diff --git a/.chezmoi.toml.tmpl b/.chezmoi.toml.tmpl new file mode 100644 index 00000000..6fe86d38 --- /dev/null +++ b/.chezmoi.toml.tmpl @@ -0,0 +1,15 @@ +# Used to customize configuration when doing a `chezmoi init`. +# +# This template file will trigger prompts to fill-in machine-specific +# templateable values. The resulting file is then created at +# `~/.config/chezmoi/chezmoi.toml` +# See https://www.chezmoi.io/docs/how-to/ +# +# {{- /* This file supports Go's text/template language. */}} + +{{- $email := promptString "Git email address for the author/committer" }} +{{- $name := promptString "Git username for the author/committer" }} + +[data] + email = "{{ $email }}" + name = "{{ $name }}" diff --git a/.chezmoiignore b/.chezmoiignore new file mode 100644 index 00000000..90c9c1a5 --- /dev/null +++ b/.chezmoiignore @@ -0,0 +1,7 @@ +scripts +other +*.tar.gz +Makefile +README.md +LICENSE +assets diff --git a/.gitignore b/.gitignore index 3aa864bd..335ec957 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -TODO.md +*.tar.gz diff --git a/Downloads/.keep b/Downloads/.keep new file mode 100644 index 00000000..e69de29b diff --git a/LICENSE.txt b/LICENSE similarity index 57% rename from LICENSE.txt rename to LICENSE index becd5ccf..fe5269e1 100644 --- a/LICENSE.txt +++ b/LICENSE @@ -1,9 +1,13 @@ -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 MIT License (MIT) + +Copyright (c) 2013-2021 Jozsef Gabor Lazar + +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. @@ -13,5 +17,5 @@ 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. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..e6b1e26a --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +none: + +update-third-party: \ + update-oh-my-zsh \ + update-p10k \ + update-zsh-syntax-highlighting + +update-p10k: + mkdir -p dot_oh-my-zsh/custom/themes + curl -s -L -o p10k-master.tar.gz https://github.com/romkatv/powerlevel10k/archive/master.tar.gz + chezmoi import --strip-components 1 --destination ${HOME}/.oh-my-zsh/custom/themes/powerlevel10k p10k-master.tar.gz + +update-oh-my-zsh: + curl -s -L -o oh-my-zsh-master.tar.gz https://github.com/robbyrussell/oh-my-zsh/archive/master.tar.gz + chezmoi import --strip-components 1 --destination ${HOME}/.oh-my-zsh oh-my-zsh-master.tar.gz + +update-zsh-syntax-highlighting: + mkdir -p dot_oh-my-zsh/custom/plugins + curl -s -L -o zsh-syntax-highlighting-master.tar.gz https://github.com/zsh-users/zsh-syntax-highlighting/archive/master.tar.gz + chezmoi import --strip-components 1 --destination ${HOME}/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting zsh-syntax-highlighting-master.tar.gz diff --git a/documents/.keep b/documents/.keep new file mode 100644 index 00000000..e69de29b diff --git a/src/nvim/autoload/myconfig.vim b/dot_SpaceVim.d/autoload/myconfig.vim similarity index 100% rename from src/nvim/autoload/myconfig.vim rename to dot_SpaceVim.d/autoload/myconfig.vim diff --git a/src/nvim/init.toml b/dot_SpaceVim.d/init.toml similarity index 100% rename from src/nvim/init.toml rename to dot_SpaceVim.d/init.toml diff --git a/src/development/clang-format b/dot_clang-format similarity index 100% rename from src/development/clang-format rename to dot_clang-format diff --git a/dot_config/chrome-flags.conf b/dot_config/chrome-flags.conf new file mode 100644 index 00000000..983b985c --- /dev/null +++ b/dot_config/chrome-flags.conf @@ -0,0 +1,6 @@ +--ignore-gpu-blocklist +--enable-gpu-rasterization +--enable-zero-copy +--disable-gpu-driver-bug-workarounds +-enable-features=UseOzonePlatform +--ozone-platform=wayland diff --git a/src/other/chromium-flags.conf b/dot_config/chromium-flags.conf similarity index 100% rename from src/other/chromium-flags.conf rename to dot_config/chromium-flags.conf diff --git a/dot_config/firejail/bitwarden.local b/dot_config/firejail/bitwarden.local new file mode 100644 index 00000000..0578a0be --- /dev/null +++ b/dot_config/firejail/bitwarden.local @@ -0,0 +1 @@ +seccomp !chroot diff --git a/dot_config/firejail/code.local b/dot_config/firejail/code.local new file mode 100644 index 00000000..b9ae7754 --- /dev/null +++ b/dot_config/firejail/code.local @@ -0,0 +1 @@ +noblacklist ${HOME} diff --git a/dot_config/firejail/firefox-common.local b/dot_config/firejail/firefox-common.local new file mode 100644 index 00000000..6c173bcd --- /dev/null +++ b/dot_config/firejail/firefox-common.local @@ -0,0 +1 @@ +whitelist ${HOME}/pictures diff --git a/dot_config/firejail/firefox.local b/dot_config/firejail/firefox.local new file mode 100644 index 00000000..8da3b226 --- /dev/null +++ b/dot_config/firejail/firefox.local @@ -0,0 +1,3 @@ +include whitelist-runuser-common.inc +dbus-user.talk org.freedesktop.Notifications +dbus-user.talk org.freedesktop.portal.Desktop diff --git a/dot_config/firejail/slack.local b/dot_config/firejail/slack.local new file mode 100644 index 00000000..40eb4360 --- /dev/null +++ b/dot_config/firejail/slack.local @@ -0,0 +1,10 @@ +noblacklist ${PATH}/bash +noblacklist ${PATH}/csh +noblacklist ${PATH}/dash +noblacklist ${PATH}/fish +noblacklist ${PATH}/ksh +noblacklist ${PATH}/sh +noblacklist ${PATH}/tclsh +noblacklist ${PATH}/tcsh +noblacklist ${PATH}/zsh +ignore private-bin diff --git a/dot_config/foot/foot.ini b/dot_config/foot/foot.ini new file mode 100644 index 00000000..ce0feb29 --- /dev/null +++ b/dot_config/foot/foot.ini @@ -0,0 +1,118 @@ +# -*- conf -*- + +# font=monospace +font=Hack +# font-bold= +# font-italic= +# font-bold-italic= +# dpi-aware=yes +# initial-window-size-pixels=700x500 # Or, +# initial-window-size-chars= +# initial-window-mode=windowed +# pad=2x2 +# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd) +# term=foot +# login-shell=no +# workers= +# bold-text-in-bright=no +# bell=none +# word-delimiters=,│`|:"'()[]{}<> +# notify=notify-send -a foot -i foot ${title} ${body} + +[scrollback] +lines=10000 +# multiplier=3.0 +# indicator-position=relative +# indicator-format= + +[cursor] +style=block +color=111111 dcdccc +blink=no + +[mouse] +# hide-when-typing=no +# alternate-scroll-mode=yes + +[colors] +alpha=1.0 +foreground=ebdbb2 +background=282828 +regular0=282828 +regular1=cc241d +regular2=98971a +regular3=d79921 +regular4=458588 +regular5=b16286 +regular6=689d6a +regular7=a89984 +# bright0=928374 +# bright1=fb4934 +# bright2=b8bb26 +# bright3=fabd2f +# bright4=83a598 +# bright5=d3869b +# bright6=8ec07c +# bright7=ebdbb2 +selection-foreground= +selection-background= + +[csd] +# preferred=server +# size=26 +# color= +# button-width=26 +# button-minimize-color=ff0000ff +# button-maximize-color=ff00ff00 +# button-close-color=ffff0000 + +[key-bindings] +# scrollback-up-page=Shift+Page_Up +# scrollback-up-half-page=none +# scrollback-up-line=none +# scrollback-down-page=Shift+Page_Down +# scrollback-down-half-page=none +# scrollback-down-line=none +# clipboard-copy=Control+Shift+C +# clipboard-paste=Control+Shift+V +# primary-paste=Shift+Insert +# search-start=Control+Shift+R +font-increase=Control+9 Control+equal Control+KP_Add +# font-decrease=Control+minus Control+KP_Subtract +# font-reset=Control+0 Control+KP_0 +# spawn-terminal=Control+Shift+N +# minimize=none +# maximize=none +# fullscreen=none +# pipe-visible=[sh -c "xurls | bemenu | xargs -r firefox"] none +# pipe-scrollback=[sh -c "xurls | bemenu | xargs -r firefox"] none +# pipe-selected=[xargs -r firefox] none + +[search-bindings] +# cancel=Control+g Escape +# commit=Return +# find-prev=Control+r +# find-next=Control+s +# cursor-left=Left Control+b +# cursor-left-word=Control+Left Mod1+b +# cursor-right=Right Control+f +# cursor-right-word=Control+Right Mod1+f +# cursor-home=Home Control+a +# cursor-end=End Control+e +# delete-prev=BackSpace +# delete-prev-word=Mod1+BackSpace Control+BackSpace +# delete-next=Delete +# delete-next-word=Mod1+d Control+Delete +# extend-to-word-boundary=Control+w +# extend-to-next-whitespace=Control+Shift+W +# clipboard-paste=Control+v Control+y +# primary-paste=Shift+Insert + +[mouse-bindings] +# primary-paste=BTN_MIDDLE +# select-begin=BTN_LEFT +# select-begin-block=Control+BTN_LEFT +# select-extend=BTN_RIGHT +# select-word=BTN_LEFT-2 +# select-word-whitespace=Control+BTN_LEFT-2 +# select-row=BTN_LEFT-3 diff --git a/dot_config/mpv/scripts/symlink_autosub.lua b/dot_config/mpv/scripts/symlink_autosub.lua new file mode 100644 index 00000000..ee5b48c5 --- /dev/null +++ b/dot_config/mpv/scripts/symlink_autosub.lua @@ -0,0 +1 @@ +/home/joelazar/dotfiles/src/mpv/autosub.lua \ No newline at end of file diff --git a/dot_config/neofetch/config.conf b/dot_config/neofetch/config.conf new file mode 100644 index 00000000..88b4ac8d --- /dev/null +++ b/dot_config/neofetch/config.conf @@ -0,0 +1,849 @@ +# See this wiki page for more info: +# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info +print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "Memory" memory + + info "GPU Driver" gpu_driver # Linux/macOS only + info "CPU Usage" cpu_usage + info "Disk" disk + info "Battery" battery +#info "Font" font + info "Song" song + [[ "$player" ]] && prin "Music Player" "$player" + info "Local IP" local_ip + info "Public IP" public_ip + info "Users" users + info "Locale" locale # This only works on glibc systems. + + info cols +} + +# Title + + +# Hide/Show Fully qualified domain name. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --title_fqdn +title_fqdn="off" + + +# Kernel + + +# Shorten the output of the kernel function. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --kernel_shorthand +# Supports: Everything except *BSDs (except PacBSD and PC-BSD) +# +# Example: +# on: '4.8.9-1-ARCH' +# off: 'Linux 4.8.9-1-ARCH' +kernel_shorthand="on" + + +# Distro + + +# Shorten the output of the distro function +# +# Default: 'off' +# Values: 'on', 'tiny', 'off' +# Flag: --distro_shorthand +# Supports: Everything except Windows and Haiku +distro_shorthand="off" + +# Show/Hide OS Architecture. +# Show 'x86_64', 'x86' and etc in 'Distro:' output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --os_arch +# +# Example: +# on: 'Arch Linux x86_64' +# off: 'Arch Linux' +os_arch="on" + + +# Uptime + + +# Shorten the output of the uptime function +# +# Default: 'on' +# Values: 'on', 'tiny', 'off' +# Flag: --uptime_shorthand +# +# Example: +# on: '2 days, 10 hours, 3 mins' +# tiny: '2d 10h 3m' +# off: '2 days, 10 hours, 3 minutes' +uptime_shorthand="on" + + +# Memory + + +# Show memory pecentage in output. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --memory_percent +# +# Example: +# on: '1801MiB / 7881MiB (22%)' +# off: '1801MiB / 7881MiB' +memory_percent="off" + + +# Packages + + +# Show/Hide Package Manager names. +# +# Default: 'tiny' +# Values: 'on', 'tiny' 'off' +# Flag: --package_managers +# +# Example: +# on: '998 (pacman), 8 (flatpak), 4 (snap)' +# tiny: '908 (pacman, flatpak, snap)' +# off: '908' +package_managers="on" + + +# Shell + + +# Show the path to $SHELL +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --shell_path +# +# Example: +# on: '/bin/bash' +# off: 'bash' +shell_path="off" + +# Show $SHELL version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --shell_version +# +# Example: +# on: 'bash 4.4.5' +# off: 'bash' +shell_version="on" + + +# CPU + + +# CPU speed type +# +# Default: 'bios_limit' +# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. +# Flag: --speed_type +# Supports: Linux with 'cpufreq' +# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. +speed_type="bios_limit" + +# CPU speed shorthand +# +# Default: 'off' +# Values: 'on', 'off'. +# Flag: --speed_shorthand +# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz +# +# Example: +# on: 'i7-6500U (4) @ 3.1GHz' +# off: 'i7-6500U (4) @ 3.100GHz' +speed_shorthand="off" + +# Enable/Disable CPU brand in output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_brand +# +# Example: +# on: 'Intel i7-6500U' +# off: 'i7-6500U (4)' +cpu_brand="on" + +# CPU Speed +# Hide/Show CPU speed. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_speed +# +# Example: +# on: 'Intel i7-6500U (4) @ 3.1GHz' +# off: 'Intel i7-6500U (4)' +cpu_speed="on" + +# CPU Cores +# Display CPU cores in output +# +# Default: 'logical' +# Values: 'logical', 'physical', 'off' +# Flag: --cpu_cores +# Support: 'physical' doesn't work on BSD. +# +# Example: +# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) +# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) +# off: 'Intel i7-6500U @ 3.1GHz' +cpu_cores="logical" + +# CPU Temperature +# Hide/Show CPU temperature. +# Note the temperature is added to the regular CPU function. +# +# Default: 'off' +# Values: 'C', 'F', 'off' +# Flag: --cpu_temp +# Supports: Linux, BSD +# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable +# coretemp kernel module. This only supports newer Intel processors. +# +# Example: +# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' +# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' +# off: 'Intel i7-6500U (4) @ 3.1GHz' +cpu_temp="off" + + +# GPU + + +# Enable/Disable GPU Brand +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gpu_brand +# +# Example: +# on: 'AMD HD 7950' +# off: 'HD 7950' +gpu_brand="on" + +# Which GPU to display +# +# Default: 'all' +# Values: 'all', 'dedicated', 'integrated' +# Flag: --gpu_type +# Supports: Linux +# +# Example: +# all: +# GPU1: AMD HD 7950 +# GPU2: Intel Integrated Graphics +# +# dedicated: +# GPU1: AMD HD 7950 +# +# integrated: +# GPU1: Intel Integrated Graphics +gpu_type="all" + + +# Resolution + + +# Display refresh rate next to each monitor +# Default: 'off' +# Values: 'on', 'off' +# Flag: --refresh_rate +# Supports: Doesn't work on Windows. +# +# Example: +# on: '1920x1080 @ 60Hz' +# off: '1920x1080' +refresh_rate="on" + + +# Gtk Theme / Icons / Font + + +# Shorten output of GTK Theme / Icons / Font +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --gtk_shorthand +# +# Example: +# on: 'Numix, Adwaita' +# off: 'Numix [GTK2], Adwaita [GTK3]' +gtk_shorthand="off" + + +# Enable/Disable gtk2 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk2 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Adwaita [GTK3]' +gtk2="on" + +# Enable/Disable gtk3 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk3 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Numix [GTK2]' +gtk3="on" + + +# IP Address + + +# Website to ping for the public IP +# +# Default: 'http://ident.me' +# Values: 'url' +# Flag: --ip_host +public_ip_host="http://ident.me" + +# Public IP timeout. +# +# Default: '2' +# Values: 'int' +# Flag: --ip_timeout +public_ip_timeout=2 + + +# Desktop Environment + + +# Show Desktop Environment version +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --de_version +de_version="off" + + +# Disk + + +# Which disks to display. +# The values can be any /dev/sdXX, mount point or directory. +# NOTE: By default we only show the disk info for '/'. +# +# Default: '/' +# Values: '/', '/dev/sdXX', '/path/to/drive'. +# Flag: --disk_show +# +# Example: +# disk_show=('/' '/dev/sdb1'): +# 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 823G / 893G (93%)' +# +# disk_show=('/'): +# 'Disk (/): 74G / 118G (66%)' +# +disk_show=('/') + +# Disk subtitle. +# What to append to the Disk subtitle. +# +# Default: 'mount' +# Values: 'mount', 'name', 'dir', 'none' +# Flag: --disk_subtitle +# +# Example: +# name: 'Disk (/dev/sda1): 74G / 118G (66%)' +# 'Disk (/dev/sdb2): 74G / 118G (66%)' +# +# mount: 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Local Disk): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 74G / 118G (66%)' +# +# dir: 'Disk (/): 74G / 118G (66%)' +# 'Disk (Local Disk): 74G / 118G (66%)' +# 'Disk (Videos): 74G / 118G (66%)' +# +# none: 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +disk_subtitle="mount" + +# Disk percent. +# Show/Hide disk percent. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --disk_percent +# +# Example: +# on: 'Disk (/): 74G / 118G (66%)' +# off: 'Disk (/): 74G / 118G' +disk_percent="on" + + +# Song + + +# Manually specify a music player. +# +# Default: 'auto' +# Values: 'auto', 'player-name' +# Flag: --music_player +# +# Available values for 'player-name': +# +# amarok +# audacious +# banshee +# bluemindo +# clementine +# cmus +# deadbeef +# deepin-music +# dragon +# elisa +# exaile +# gnome-music +# gmusicbrowser +# gogglesmm +# guayadeque +# io.elementary.music +# iTunes +# juk +# lollypop +# mocp +# mopidy +# mpd +# muine +# netease-cloud-music +# pogo +# pragha +# qmmp +# quodlibet +# rhythmbox +# sayonara +# smplayer +# spotify +# strawberry +# tomahawk +# vlc +# xmms2d +# xnoise +# yarock +music_player="auto" + +# Format to display song information. +# +# Default: '%artist% - %album% - %title%' +# Values: '%artist%', '%album%', '%title%' +# Flag: --song_format +# +# Example: +# default: 'Song: Jet - Get Born - Sgt Major' +song_format="%artist% - %album% - %title%" + +# Print the Artist, Album and Title on separate lines +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --song_shorthand +# +# Example: +# on: 'Artist: The Fratellis' +# 'Album: Costello Music' +# 'Song: Chelsea Dagger' +# +# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' +song_shorthand="off" + +# 'mpc' arguments (specify a host, password etc). +# +# Default: '' +# Example: mpc_args=(-h HOST -P PASSWORD) +mpc_args=() + + +# Text Colors + + +# Text Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --colors +# +# Each number represents a different part of the text in +# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' +# +# Example: +# colors=(distro) - Text is colored based on Distro colors. +# colors=(4 6 1 8 8 6) - Text is colored in the order above. +colors=(distro) + + +# Text Options + + +# Toggle bold text +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bold +bold="on" + +# Enable/Disable Underline +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --underline +underline_enabled="on" + +# Underline character +# +# Default: '-' +# Values: 'string' +# Flag: --underline_char +underline_char="-" + + +# Info Separator +# Replace the default separator with the specified string. +# +# Default: ':' +# Flag: --separator +# +# Example: +# separator="->": 'Shell-> bash' +# separator=" =": 'WM = dwm' +separator=":" + + +# Color Blocks + + +# Color block range +# The range of colors to print. +# +# Default: '0', '15' +# Values: 'num' +# Flag: --block_range +# +# Example: +# +# Display colors 0-7 in the blocks. (8 colors) +# neofetch --block_range 0 7 +# +# Display colors 0-15 in the blocks. (16 colors) +# neofetch --block_range 0 15 +block_range=(0 15) + +# Toggle color blocks +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --color_blocks +color_blocks="on" + +# Color block width in spaces +# +# Default: '3' +# Values: 'num' +# Flag: --block_width +block_width=3 + +# Color block height in lines +# +# Default: '1' +# Values: 'num' +# Flag: --block_height +block_height=1 + +# Color Alignment +# +# Default: 'auto' +# Values: 'auto', 'num' +# Flag: --col_offset +# +# Number specifies how far from the left side of the terminal (in spaces) to +# begin printing the columns, in case you want to e.g. center them under your +# text. +# Example: +# col_offset="auto" - Default behavior of neofetch +# col_offset=7 - Leave 7 spaces then print the colors +col_offset="auto" + +# Progress Bars + + +# Bar characters +# +# Default: '-', '=' +# Values: 'string', 'string' +# Flag: --bar_char +# +# Example: +# neofetch --bar_char 'elapsed' 'total' +# neofetch --bar_char '-' '=' +bar_char_elapsed="-" +bar_char_total="=" + +# Toggle Bar border +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bar_border +bar_border="on" + +# Progress bar length in spaces +# Number of chars long to make the progress bars. +# +# Default: '15' +# Values: 'num' +# Flag: --bar_length +bar_length=15 + +# Progress bar colors +# When set to distro, uses your distro's logo colors. +# +# Default: 'distro', 'distro' +# Values: 'distro', 'num' +# Flag: --bar_colors +# +# Example: +# neofetch --bar_colors 3 4 +# neofetch --bar_colors distro 5 +bar_color_elapsed="distro" +bar_color_total="distro" + + +# Info display +# Display a bar with the info. +# +# Default: 'off' +# Values: 'bar', 'infobar', 'barinfo', 'off' +# Flags: --cpu_display +# --memory_display +# --battery_display +# --disk_display +# +# Example: +# bar: '[---=======]' +# infobar: 'info [---=======]' +# barinfo: '[---=======] info' +# off: 'info' +cpu_display="off" +memory_display="off" +battery_display="off" +disk_display="off" + + +# Backend Settings + + +# Image backend. +# +# Default: 'ascii' +# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off', +# 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty' +# Flag: --backend +image_backend="ascii" + +# Image Source +# +# Which image or ascii file to display. +# +# Default: 'auto' +# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' +# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' +# Flag: --source +# +# NOTE: 'auto' will pick the best image source for whatever image backend is used. +# In ascii mode, distro ascii art will be used and in an image mode, your +# wallpaper will be used. +image_source="auto" + + +# Ascii Options + + +# Ascii distro +# Which distro's ascii art to display. +# +# Default: 'auto' +# Values: 'auto', 'distro_name' +# Flag: --ascii_distro +# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, AOSC, +# Apricity, ArcoLinux, ArchBox, ARCHlabs, ArchStrike, +# XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, Bitrig, +# BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD, +# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, +# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, +# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin, +# DesaOS, Devuan, DracOS, DragonFly, Drauger, Elementary, +# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, +# FreeMiNT, Frugalware, Funtoo, GalliumOS, Gentoo, Pentoo, +# gNewSense, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, +# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion, +# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite, +# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, +# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib, +# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner, +# NuTyX, OBRevenge, OpenBSD, OpenIndiana, OpenMandriva, +# OpenWrt, osmc, Oracle, PacBSD, Parabola, Pardus, Parrot, +# Parsix, TrueOS, PCLinuxOS, Peppermint, popos, Porteus, +# PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix, Raspbian, +# Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, Regata, +# Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, +# SharkLinux, Siduction, Slackware, SliTaz, SmartOS, Solus, +# Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, +# openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, +# Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio, Ubuntu, +# Void, Obarun, windows10, Windows7, Xubuntu, Zorin, and IRIX +# have ascii logos +# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants. +# Use '{distro name}_old' to use the old logos. +# NOTE: Ubuntu has flavor variants. +# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, +# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. +# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, +# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, +# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, +# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, +# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, +# postmarketOS, and Void have a smaller logo variant. +# Use '{distro name}_small' to use the small variants. +ascii_distro="auto" + +# Ascii Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --ascii_colors +# +# Example: +# ascii_colors=(distro) - Ascii is colored based on Distro colors. +# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. +ascii_colors=(distro) + +# Bold ascii logo +# Whether or not to bold the ascii logo. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --ascii_bold +ascii_bold="on" + + +# Image Options + + +# Image loop +# Setting this to on will make neofetch redraw the image constantly until +# Ctrl+C is pressed. This fixes display issues in some terminal emulators. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --loop +image_loop="off" + +# Thumbnail directory +# +# Default: '~/.cache/thumbnails/neofetch' +# Values: 'dir' +thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" + +# Crop mode +# +# Default: 'normal' +# Values: 'normal', 'fit', 'fill' +# Flag: --crop_mode +# +# See this wiki page to learn about the fit and fill options. +# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F +crop_mode="normal" + +# Crop offset +# Note: Only affects 'normal' crop mode. +# +# Default: 'center' +# Values: 'northwest', 'north', 'northeast', 'west', 'center' +# 'east', 'southwest', 'south', 'southeast' +# Flag: --crop_offset +crop_offset="center" + +# Image size +# The image is half the terminal width by default. +# +# Default: 'auto' +# Values: 'auto', '00px', '00%', 'none' +# Flags: --image_size +# --size +image_size="auto" + +# Gap between image and text +# +# Default: '3' +# Values: 'num', '-num' +# Flag: --gap +gap=3 + +# Image offsets +# Only works with the w3m backend. +# +# Default: '0' +# Values: 'px' +# Flags: --xoffset +# --yoffset +yoffset=0 +xoffset=0 + +# Image background color +# Only works with the w3m backend. +# +# Default: '' +# Values: 'color', 'blue' +# Flag: --bg_color +background_color= + + +# Misc Options + +# Stdout mode +# Turn off all colors and disables image backend (ASCII/Image). +# Useful for piping into another command. +# Default: 'off' +# Values: 'on', 'off' +stdout="off" diff --git a/src/other/config.ini b/dot_config/networkmanager-dmenu/config.ini similarity index 100% rename from src/other/config.ini rename to dot_config/networkmanager-dmenu/config.ini diff --git a/src/other/pgcli_config b/dot_config/pgcli/config similarity index 100% rename from src/other/pgcli_config rename to dot_config/pgcli/config diff --git a/dot_config/pgcli/history.REMOVED.git-id b/dot_config/pgcli/history.REMOVED.git-id new file mode 100644 index 00000000..f8c233bb --- /dev/null +++ b/dot_config/pgcli/history.REMOVED.git-id @@ -0,0 +1 @@ +d1211adb7a6ee1d76a555bb01761087ce91029ef \ No newline at end of file diff --git a/dot_config/pgcli/log.REMOVED.git-id b/dot_config/pgcli/log.REMOVED.git-id new file mode 100644 index 00000000..046392bd --- /dev/null +++ b/dot_config/pgcli/log.REMOVED.git-id @@ -0,0 +1 @@ +1141b794a548904f1847003f2c7f3a9f1f7839a2 \ No newline at end of file diff --git a/src/sway/default.pa b/dot_config/private_pulse/default.pa similarity index 100% rename from src/sway/default.pa rename to dot_config/private_pulse/default.pa diff --git a/src/sway/swappy_config b/dot_config/swappy/config similarity index 100% rename from src/sway/swappy_config rename to dot_config/swappy/config diff --git a/src/sway/config b/dot_config/sway/config similarity index 99% rename from src/sway/config rename to dot_config/sway/config index da65044a..a5cb2556 100644 --- a/src/sway/config +++ b/dot_config/sway/config @@ -293,7 +293,7 @@ bindsym $mod+shift+m exec bash -c "wlr-randr --output DP-3 --pos 0,0 --scale 0 bindsym $mod+n exec networkmanager_dmenu -b --fn "Hack 14" # Start Applications -bindsym $mod+F1 exec --no-startup-id foot -e nnn +bindsym $mod+F1 exec --no-startup-id foot nnn bindsym $mod+F2 exec --no-startup-id firefox bindsym $mod+F3 exec --no-startup-id chromium diff --git a/src/sway/happy_confirmation.wav b/dot_config/sway/happy_confirmation.wav similarity index 100% rename from src/sway/happy_confirmation.wav rename to dot_config/sway/happy_confirmation.wav diff --git a/src/sway/waybar/config b/dot_config/waybar/config similarity index 100% rename from src/sway/waybar/config rename to dot_config/waybar/config diff --git a/src/sway/waybar/style.css b/dot_config/waybar/style.css similarity index 100% rename from src/sway/waybar/style.css rename to dot_config/waybar/style.css diff --git a/src/other/zathurarc b/dot_config/zathura/zathurarc similarity index 100% rename from src/other/zathurarc rename to dot_config/zathura/zathurarc diff --git a/src/shell/curlrc b/dot_curlrc similarity index 100% rename from src/shell/curlrc rename to dot_curlrc diff --git a/dot_flake8 b/dot_flake8 new file mode 100644 index 00000000..7da1f960 --- /dev/null +++ b/dot_flake8 @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 100 diff --git a/src/git/gitconfig b/dot_gitconfig.tmpl similarity index 86% rename from src/git/gitconfig rename to dot_gitconfig.tmpl index d214bba6..7b5de710 100644 --- a/src/git/gitconfig +++ b/dot_gitconfig.tmpl @@ -1,3 +1,11 @@ +[user] + + # Specify the email address of the author/committer. + email = "{{ .email }}" + + # Specify the username of the author/committer. + name = "{{ .name }}" + [alias] a = commit --amend @@ -131,7 +139,24 @@ eol = lf autocrlf = false fileMode = false - pager = diff-so-fancy | less --tabs=4 -RFX + # pager = diff-so-fancy | less --tabs=4 -RFX + pager = delta + +[interactive] + + diffFilter = delta --color-only + +[delta] + + features = side-by-side line-numbers decorations + # features = line-numbers + whitespace-error-style = 22 reverse + syntax-theme = gruvbox + +# [delta "decorations"] +# commit-decoration-style = bold yellow box ul +# file-style = bold yellow ul +# file-decoration-style = none [diff "bin"] @@ -164,19 +189,10 @@ useConfigOnly = true -[include] - - # Load local configs. - # https://git-scm.com/docs/git-config#_includes - # - # [!] The following needs to remain at the end of this file in - # order to allow any of the above configs to be overwritten - # by the local ones - - path = ~/.gitconfig.local - [url "git@github.com:"] - insteadOf = https://github.com/ + + insteadOf = https://github.com/ [pull] - rebase = false + + rebase = false diff --git a/src/git/gitignore b/dot_gitignore similarity index 100% rename from src/git/gitignore rename to dot_gitignore diff --git a/dot_p10k.zsh b/dot_p10k.zsh new file mode 100644 index 00000000..1f8a3eb2 --- /dev/null +++ b/dot_p10k.zsh @@ -0,0 +1,193 @@ +# Generated by Powerlevel10k configuration wizard on 2021-01-04 at 09:57 CET. +# Based on romkatv/powerlevel10k/config/p10k-pure.zsh, checksum 13301. +# Wizard options: nerdfont-complete + powerline, large icons, pure, snazzy, 1 line, +# compact, transient_prompt, instant_prompt=verbose. +# Type `p10k configure` to generate another config. +# +# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure). +# +# Differences from Pure: +# +# - Git: +# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state. +# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`). +# +# Apart from the differences listed above, the replication of Pure prompt is exact. This includes +# even the questionable parts. For example, just like in Pure, there is no indication of Git status +# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt +# doesn't fit on one line, it wraps around with no attempt to shorten it. +# +# If you like the general style of Pure but not particularly attached to all its quirks, type +# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking +# advantage of Powerlevel10k features that aren't present in Pure. + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # Prompt colors. + local grey='242' + local red='#FF5C57' + local yellow='#F3F99D' + local blue='#57C7FF' + local magenta='#FF6AC1' + local cyan='#9AEDFE' + local white='#F1F1F0' + + # Left prompt segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + context # user@host + dir # current directory + vcs # git status + command_execution_time # previous command duration + virtualenv # python virtual environment + prompt_char # prompt symbol + ) + + # Right prompt segments. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # command_execution_time # previous command duration + # virtualenv # python virtual environment + # context # user@host + # time # current time + ) + + # Basic style options that define the overall prompt look. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons + + # Add an empty line before each prompt except the first. This doesn't emulate the bug + # in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + + # Magenta prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$magenta + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode is the same as in command mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='❮' + # Prompt symbol in overwrite vi mode is the same as in command mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false + + # Grey Python Virtual Environment. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey + # Don't show Python version. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + + # Blue current directory. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue + + # Context format when root: user@host. The first part white, the rest grey. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$white}%n%f%F{$grey}@%m%f" + # Context format when not root: user@host. The whole thing grey. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$grey}%n@%m%f" + # Don't show context unless root or in SSH. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION= + + # Show previous command duration only if it's >= 5s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5 + # Don't show fractional seconds. Thus, 7s rather than 7.3s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Yellow previous command duration. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow + + # Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones. + typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey + + # Disable async loading indicator to make directories that aren't Git repositories + # indistinguishable from large Git repositories without known state. + typeset -g POWERLEVEL9K_VCS_LOADING_TEXT= + + # Don't wait for Git status even for a millisecond, so that prompt always updates + # asynchronously when Git state changes. + typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0 + + # Cyan ahead/behind arrows. + typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan + # Don't show remote branch, current tag or stashes. + typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind) + # Don't show the branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + # When in detached HEAD state, show @commit where branch normally goes. + typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@' + # Don't show staged, unstaged, untracked indicators. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON= + # Show '*' when there are staged, unstaged or untracked files. + typeset -g POWERLEVEL9K_VCS_DIRTY_ICON='*' + # Show '⇣' if local branch is behind remote. + typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣' + # Show '⇡' if local branch is ahead of remote. + typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡' + # Don't show the number of commits next to the ahead/behind arrows. + typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1 + # Remove space between '⇣' and '⇡' and all trailing spaces. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }' + + # Grey current time. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands rather than the end times of + # their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/src/shell/environment b/dot_profile similarity index 100% rename from src/shell/environment rename to dot_profile diff --git a/dot_ripgreprc b/dot_ripgreprc new file mode 100644 index 00000000..fef9b7a2 --- /dev/null +++ b/dot_ripgreprc @@ -0,0 +1,9 @@ +# Search hidden files and directories also. +--hidden + +# Limit the length of lines printed by ripgrep. +--max-columns=150 +--max-columns-preview + +# Make search case insensitive, unless an uppercase letter is used. +--smart-case diff --git a/src/tmux/tmux.conf b/dot_tmux.conf similarity index 100% rename from src/tmux/tmux.conf rename to dot_tmux.conf diff --git a/dot_yarnrc b/dot_yarnrc new file mode 100644 index 00000000..20fe8f94 --- /dev/null +++ b/dot_yarnrc @@ -0,0 +1,5 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +lastUpdateCheck 1612218051934 diff --git a/src/shell/zsh_aliases b/dot_zsh_aliases similarity index 97% rename from src/shell/zsh_aliases rename to dot_zsh_aliases index c0a1b760..be612b0e 100644 --- a/src/shell/zsh_aliases +++ b/dot_zsh_aliases @@ -9,6 +9,7 @@ alias chown='chown --preserve-root' alias diff='colordiff' alias g="git" alias lg='lazygit' +alias lzd='lazydocker' alias ls='exa' alias logme="script -f $HOME/logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log" alias mkdir='mkdir -p -v' diff --git a/src/shell/zsh_exports b/dot_zsh_exports similarity index 99% rename from src/shell/zsh_exports rename to dot_zsh_exports index 825161c0..f9e99954 100644 --- a/src/shell/zsh_exports +++ b/dot_zsh_exports @@ -9,7 +9,7 @@ export EDITOR="nvim" export FILE="nnn" export READER="zathura" export STATUSBAR="waybar" -export TERMINAL="alacritty" +export TERMINAL="foot" export VISUAL="ewrap" export SUDO_ASKPASS="$HOME/.local/bin/wofipass" diff --git a/src/shell/zsh_functions b/dot_zsh_functions similarity index 85% rename from src/shell/zsh_functions rename to dot_zsh_functions index aeffc6bf..5ddbb6e5 100644 --- a/src/shell/zsh_functions +++ b/dot_zsh_functions @@ -15,7 +15,11 @@ rgv() { # Docker functions -function cleannone() { docker rmi $(docker images | grep "" | awk '{print $3}'); } +function dcleannone() { docker rmi $(docker images | grep "" | awk '{print $3}'); } + +function dstopall() { docker ps -a | awk '{print $1}' | tail -n +2 | xargs docker stop; } + +function dremoveall() { docker ps -a | awk '{print $1}' | tail -n +2 | xargs docker rm -fv; } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/shell/zshrc b/dot_zshrc similarity index 98% rename from src/shell/zshrc rename to dot_zshrc index 02f2bb5d..1b9899a2 100644 --- a/src/shell/zshrc +++ b/dot_zshrc @@ -5,6 +5,7 @@ # Oh-My-Zsh config export ZSH="$HOME/.oh-my-zsh" +export DISABLE_AUTO_UPDATE="true" # ZSH_THEME="avit" ZSH_THEME="powerlevel10k/powerlevel10k" @@ -74,7 +75,6 @@ source /usr/share/bash-completion/completions/azure-cli source /usr/share/bash-completion/completions/fd source /usr/share/fzf/key-bindings.zsh source /usr/share/fzf/completion.zsh -source $HOME/.local/share/chezmoi.zsh # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/exact_dot_oh-my-zsh/CODE_OF_CONDUCT.md b/exact_dot_oh-my-zsh/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..20ad1cce --- /dev/null +++ b/exact_dot_oh-my-zsh/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at ohmyzsh@planetargon.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/exact_dot_oh-my-zsh/CONTRIBUTING.md b/exact_dot_oh-my-zsh/CONTRIBUTING.md new file mode 100644 index 00000000..be67e93b --- /dev/null +++ b/exact_dot_oh-my-zsh/CONTRIBUTING.md @@ -0,0 +1,125 @@ +# CONTRIBUTING GUIDELINES + +Oh-My-Zsh is a community-driven project. Contribution is welcome, encouraged, and appreciated. +It is also essential for the development of the project. + +First, please take a moment to review our [code of conduct](CODE_OF_CONDUCT.md). + +These guidelines are an attempt at better addressing the huge amount of pending +issues and pull requests. Please read them closely. + +Foremost, be so kind as to [search](#use-the-search-luke). This ensures any contribution +you would make is not already covered. + +* [Issues](#reporting-issues) + * [You have a problem](#you-have-a-problem) + * [You have a suggestion](#you-have-a-suggestion) +* [Pull Requests](#submitting-pull-requests) + * [Getting started](#getting-started) + * [You have a solution](#you-have-a-solution) + * [You have an addition](#you-have-an-addition) +* [Information sources (_aka_ search)](#use-the-search-luke) + +**BONUS:** [Volunteering](#you-have-spare-time-to-volunteer) + +## Reporting Issues + +### You have a problem + +Please be so kind as to [search](#use-the-search-luke) for any open issue already covering +your problem. + +If you find one, comment on it so we can know there are more people experiencing it. + +If not, look at the [Troubleshooting](https://github.com/ohmyzsh/ohmyzsh/wiki/Troubleshooting) +page for instructions on how to gather data to better debug your problem. + +Then, you can go ahead and create an issue with as much detail as you can provide. +It should include the data gathered as indicated above, along with: + +1. How to reproduce the problem +2. What the correct behavior should be +3. What the actual behavior is + +Please copy to anyone relevant (_eg_ plugin maintainers) by mentioning their GitHub handle +(starting with `@`) in your message. + +We will do our very best to help you. + +### You have a suggestion + +Please be so kind as to [search](#use-the-search-luke) for any open issue already covering +your suggestion. + +If you find one, comment on it so we can know there are more people supporting it. + +If not, you can go ahead and create an issue. Please copy to anyone relevant (_eg_ plugin +maintainers) by mentioning their GitHub handle (starting with `@`) in your message. + +## Submitting Pull Requests + +### Getting started + +You should be familiar with the basics of +[contributing on GitHub](https://help.github.com/articles/using-pull-requests) and have a fork +[properly set up](https://github.com/ohmyzsh/ohmyzsh/wiki/Contribution-Technical-Practices). + +You MUST always create PRs with _a dedicated branch_ based on the latest upstream tree. + +If you create your own PR, please make sure you do it right. Also be so kind as to reference +any issue that would be solved in the PR description body, +[for instance](https://help.github.com/articles/closing-issues-via-commit-messages/) +_"Fixes #XXXX"_ for issue number XXXX. + +### You have a solution + +Please be so kind as to [search](#use-the-search-luke) for any open issue already covering +your [problem](#you-have-a-problem), and any pending/merged/rejected PR covering your solution. + +If the solution is already reported, try it out and +1 the pull request if the +solution works ok. On the other hand, if you think your solution is better, post +it with a reference to the other one so we can have both solutions to compare. + +If not, then go ahead and submit a PR. Please copy to anyone relevant (e.g. plugin +maintainers) by mentioning their GitHub handle (starting with `@`) in your message. + +### You have an addition + +Please [do not](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#dont-send-us-your-theme-for-now) +send themes for now. + +Please be so kind as to [search](#use-the-search-luke) for any pending, merged or rejected Pull Requests +covering or related to what you want to add. + +If you find one, try it out and work with the author on a common solution. + +If not, then go ahead and submit a PR. Please copy to anyone relevant (_eg_ plugin +maintainers) by mentioning their GitHub handle (starting with `@`) in your message. + +For any extensive change, _eg_ a new plugin, you will have to find testers to +1 your PR. + +---- + +## Use the Search, Luke + +_May the Force (of past experiences) be with you_ + +GitHub offers [many search features](https://help.github.com/articles/searching-github/) +to help you check whether a similar contribution to yours already exists. Please search +before making any contribution, it avoids duplicates and eases maintenance. Trust me, +that works 90% of the time. + +You can also take a look at the [FAQ](https://github.com/ohmyzsh/ohmyzsh/wiki/FAQ) +to be sure your contribution has not already come up. + +If all fails, your thing has probably not been reported yet, so you can go ahead +and [create an issue](#reporting-issues) or [submit a PR](#submitting-pull-requests). + +---- + +### You have spare time to volunteer + +Very nice!! :) + +Please have a look at the [Volunteer](https://github.com/ohmyzsh/ohmyzsh/wiki/Volunteers) +page for instructions on where to start and more. diff --git a/exact_dot_oh-my-zsh/LICENSE.txt b/exact_dot_oh-my-zsh/LICENSE.txt new file mode 100644 index 00000000..becd6a7b --- /dev/null +++ b/exact_dot_oh-my-zsh/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2009-2021 Robby Russell and contributors (https://github.com/ohmyzsh/ohmyzsh/contributors) + +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. diff --git a/exact_dot_oh-my-zsh/README.md b/exact_dot_oh-my-zsh/README.md new file mode 100644 index 00000000..86037f19 --- /dev/null +++ b/exact_dot_oh-my-zsh/README.md @@ -0,0 +1,314 @@ +

Oh My Zsh

+ +Oh My Zsh is an open source, community-driven framework for managing your [zsh](https://www.zsh.org/) configuration. + +Sounds boring. Let's try again. + +**Oh My Zsh will not make you a 10x developer...but you may feel like one.** + +Once installed, your terminal shell will become the talk of the town _or your money back!_ With each keystroke in your command prompt, you'll take advantage of the hundreds of powerful plugins and beautiful themes. Strangers will come up to you in cafés and ask you, _"that is amazing! are you some sort of genius?"_ + +Finally, you'll begin to get the sort of attention that you have always felt you deserved. ...or maybe you'll use the time that you're saving to start flossing more often. 😬 + +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) +[![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) + +## Getting Started + +### 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) + +### Basic Installation + +Oh My Zsh is installed by running one of the following commands in your terminal. You can install this via the command-line with either `curl`, `wget` or another similar tool. + +| Method | Command | +|:----------|:--------------------------------------------------------------------------------------------------| +| **curl** | `sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"` | +| **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)"` | + +#### 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, +then running it: + +```shell +wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh +sh install.sh +``` + +## Using Oh My Zsh + +### Plugins + +Oh My Zsh comes with a shitload of plugins for you to take advantage of. You can take a look in the [plugins](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins) directory and/or the [wiki](https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins) to see what's currently available. + +#### Enabling Plugins + +Once you spot a plugin (or several) that you'd like to use with Oh My Zsh, you'll need to enable them in the `.zshrc` file. You'll find the zshrc file in your `$HOME` directory. Open it with your favorite text editor and you'll see a spot to list all the plugins you want to load. + +```shell +vi ~/.zshrc +``` + +For example, this might begin to look like this: + +```shell +plugins=( + git + bundler + dotenv + osx + rake + rbenv + ruby +) +``` + +_Note that the plugins are separated by whitespace (spaces, tabs, new lines...). **Do not** use commas between them or it will break._ + +#### Using Plugins + +Each plugin includes a __README__, documenting it. This README should show the aliases (if the plugin adds any) and extra goodies that are included in that particular plugin. + +### Themes + +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 + +_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)._ + +Once you find a theme that you'd like to use, you will need to edit the `~/.zshrc` file. You'll see an environment variable (all caps) in there that looks like: + +```shell +ZSH_THEME="robbyrussell" +``` + +To use a different theme, simply change the value to match the name of your desired theme. For example: + +```shell +ZSH_THEME="agnoster" # (this is one of the fancy ones) +# see https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#agnoster +``` + +_Note: many themes require installing the [Powerline Fonts](https://github.com/powerline/fonts) in order to render properly._ + +Open up a new terminal window and your prompt should look something like this: + +![Agnoster theme](https://cloud.githubusercontent.com/assets/2618447/6316862/70f58fb6-ba03-11e4-82c9-c083bf9a6574.png) + +In case you did not find a suitable theme for your needs, please have a look at the wiki for [more of them](https://github.com/ohmyzsh/ohmyzsh/wiki/External-themes). + +If you're feeling feisty, you can let the computer select one randomly for you each time you open a new terminal window. + +```shell +ZSH_THEME="random" # (...please let it be pie... please be some pie..) +``` + +And if you want to pick random theme from a list of your favorite themes: + +```shell +ZSH_THEME_RANDOM_CANDIDATES=( + "robbyrussell" + "agnoster" +) +``` + +If you only know which themes you don't like, you can add them similarly to an ignored list: + +```shell +ZSH_THEME_RANDOM_IGNORED=(pygmalion tjkirch_mod) +``` + +### FAQ + +If you have some more questions or issues, you might find a solution in our [FAQ](https://github.com/ohmyzsh/ohmyzsh/wiki/FAQ). + +## Advanced Topics + +If you're the type that likes to get their hands dirty, these sections might resonate. + +### Advanced Installation + +Some users may want to manually install Oh My Zsh, or change the default path or other settings that +the installer accepts (these settings are also documented at the top of the install script). + +#### Custom Directory + +The default location is `~/.oh-my-zsh` (hidden in your home directory, you can access it with `cd ~/.oh-my-zsh`) + +If you'd like to change the install directory with the `ZSH` environment variable, either by running +`export ZSH=/your/path` before installing, or by setting it before the end of the install pipeline +like this: + +```shell +ZSH="$HOME/.dotfiles/oh-my-zsh" sh install.sh +``` + +#### Unattended install + +If you're running the Oh My Zsh install script as part of an automated install, you can pass the +flag `--unattended` to the `install.sh` script. This will have the effect of not trying to change +the default shell, and also won't run `zsh` when the installation has finished. + +```shell +sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended +``` + +#### Installing from a forked repository + +The install script also accepts these variables to allow installation of a different repository: + +- `REPO` (default: `ohmyzsh/ohmyzsh`): this takes the form of `owner/repository`. If you set + this variable, the installer will look for a repository at `https://github.com/{owner}/{repository}`. + +- `REMOTE` (default: `https://github.com/${REPO}.git`): this is the full URL of the git repository + clone. You can use this setting if you want to install from a fork that is not on GitHub (GitLab, + Bitbucket...) or if you want to clone with SSH instead of HTTPS (`git@github.com:user/project.git`). + + _NOTE: it's incompatible with setting the `REPO` variable. This setting will take precedence._ + +- `BRANCH` (default: `master`): you can use this setting if you want to change the default branch to be + checked out when cloning the repository. This might be useful for testing a Pull Request, or if you + want to use a branch other than `master`. + +For example: + +```shell +REPO=apjanke/oh-my-zsh BRANCH=edge sh install.sh +``` + +#### Manual Installation + +##### 1. Clone the repository + +```shell +git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh +``` + +##### 2. *Optionally*, backup your existing `~/.zshrc` file + +```shell +cp ~/.zshrc ~/.zshrc.orig +``` + +##### 3. Create a new zsh configuration file + +You can create a new zsh config file by copying the template that we have included for you. + +```shell +cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc +``` + +##### 4. Change your default shell + +```shell +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 + +Once you open up a new terminal window, it should load zsh with Oh My Zsh's configuration. + +### Installation Problems + +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 + +If you want to override any of the default behaviors, just add a new file (ending in `.zsh`) in the `custom/` directory. + +If you have many functions that go well together, you can put them as a `XYZ.plugin.zsh` file in the `custom/plugins/` directory and then enable this plugin. + +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/`. + +## Getting Updates + +By default, you will be prompted to check for upgrades every few weeks. If you would like `oh-my-zsh` to automatically upgrade itself without prompting you, set the following in your `~/.zshrc`: + +```shell +DISABLE_UPDATE_PROMPT=true +``` + +To disable automatic upgrades, set the following in your `~/.zshrc`: + +```shell +DISABLE_AUTO_UPDATE=true +``` + +### Manual Updates + +If you'd like to upgrade at any point in time (maybe someone just released a new plugin and you don't want to wait a week?) you just need to run: + +```shell +omz update +``` + +Magic! 🎉 + +## Uninstalling Oh My Zsh + +Oh My Zsh isn't for everyone. We'll miss you, but we want to make this an easy breakup. + +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? + +Before you participate in our delightful community, please read the [code of conduct](CODE_OF_CONDUCT.md). + +I'm far from being a [Zsh](https://www.zsh.org/) expert and suspect there are many ways to improve – if you have ideas on how to make the configuration easier to maintain (and faster), don't hesitate to fork and send pull requests! + +We also need people to test out pull-requests. So take a look through [the open issues](https://github.com/ohmyzsh/ohmyzsh/issues) and help where you can. + +See [Contributing](CONTRIBUTING.md) for more details. + +### 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. + +## Contributors + +Oh My Zsh has a vibrant community of happy users and delightful contributors. Without all the time and help from our contributors, it wouldn't be so awesome. + +Thank you so much! + +## Follow Us + +We're on social media: + +- [@ohmyzsh](https://twitter.com/ohmyzsh) on Twitter. You should follow it. +- [FaceBook](https://www.facebook.com/Oh-My-Zsh-296616263819290/) poke us. +- [Instagram](https://www.instagram.com/_ohmyzsh/) tag us in your post showing Oh My Zsh! +- [Discord](https://discord.gg/ohmyzsh) to chat with us! + +## Merchandise + +We have [stickers, shirts, and coffee mugs available](https://shop.planetargon.com/collections/oh-my-zsh?utm_source=github) for you to show off your love of Oh My Zsh. Again, you will become the talk of the town! + +## License + +Oh My Zsh is released under the [MIT license](LICENSE.txt). + +## About Planet Argon + +![Planet Argon](https://pa-github-assets.s3.amazonaws.com/PARGON_logo_digital_COL-small.jpg) + +Oh My Zsh was started by the team at [Planet Argon](https://www.planetargon.com/?utm_source=github), a [Ruby on Rails development agency](https://www.planetargon.com/skills/ruby-on-rails-development?utm_source=github). Check out our [other open source projects](https://www.planetargon.com/open-source?utm_source=github). diff --git a/exact_dot_oh-my-zsh/dot_editorconfig b/exact_dot_oh-my-zsh/dot_editorconfig new file mode 100644 index 00000000..b5321de5 --- /dev/null +++ b/exact_dot_oh-my-zsh/dot_editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +indent_size = 2 +indent_style = space diff --git a/exact_dot_oh-my-zsh/dot_gitignore b/exact_dot_oh-my-zsh/dot_gitignore new file mode 100644 index 00000000..ec24a19b --- /dev/null +++ b/exact_dot_oh-my-zsh/dot_gitignore @@ -0,0 +1,8 @@ +# custom files +custom/ + +# temp files directories +cache/ +log/ +*.swp +.DS_Store diff --git a/exact_dot_oh-my-zsh/dot_gitpod.Dockerfile b/exact_dot_oh-my-zsh/dot_gitpod.Dockerfile new file mode 100644 index 00000000..b35c80df --- /dev/null +++ b/exact_dot_oh-my-zsh/dot_gitpod.Dockerfile @@ -0,0 +1,5 @@ +FROM gitpod/workspace-full + +RUN sudo apt-get update && \ + sudo apt-get install -y zsh && \ + sudo rm -rf /var/lib/apt/lists/* diff --git a/exact_dot_oh-my-zsh/dot_gitpod.yml b/exact_dot_oh-my-zsh/dot_gitpod.yml new file mode 100644 index 00000000..ccc57242 --- /dev/null +++ b/exact_dot_oh-my-zsh/dot_gitpod.yml @@ -0,0 +1,9 @@ +image: + file: .gitpod.Dockerfile + +tasks: + - init: | + export EDITOR="command gp open -w" VISUAL="command gp open -w" + cp -f /workspace/ohmyzsh/templates/zshrc.zsh-template ~/.zshrc + ln -sf /workspace/ohmyzsh ~/.oh-my-zsh + command: exec zsh diff --git a/exact_dot_oh-my-zsh/exact_cache/docker_compose_subcommands b/exact_dot_oh-my-zsh/exact_cache/docker_compose_subcommands new file mode 100644 index 00000000..c635309d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/docker_compose_subcommands @@ -0,0 +1,4 @@ +_docker_compose_subcommands=( ${(Q)"${(z)$(<<\EO:_docker_compose_subcommands +'build:Build or rebuild services' 'config:Validate and view the Compose file' 'create:Create services' 'down:Stop and remove containers, networks, images, and volumes' 'events:Receive real time events from containers' 'exec:Execute a command in a running container' 'help:Get help on a command' 'images:List images' 'kill:Kill containers' 'logs:View output from containers' 'pause:Pause services' 'port:Print the public port for a port binding' 'ps:List containers' 'pull:Pull service images' 'push:Push service images' 'restart:Restart services' 'rm:Remove stopped containers' 'run:Run a one-off command' 'scale:Set number of containers for a service' 'start:Start services' 'stop:Stop services' 'top:Display the running processes' 'unpause:Unpause services' 'up:Create and start containers' 'version:Show version information and quit' +EO:_docker_compose_subcommands +)}"} ) diff --git a/exact_dot_oh-my-zsh/exact_cache/docker_hide_legacy_commands b/exact_dot_oh-my-zsh/exact_cache/docker_hide_legacy_commands new file mode 100644 index 00000000..e4f5a97a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/docker_hide_legacy_commands @@ -0,0 +1 @@ +_docker_hide_legacy_commands='' diff --git a/exact_dot_oh-my-zsh/exact_cache/docker_subcommands b/exact_dot_oh-my-zsh/exact_cache/docker_subcommands new file mode 100644 index 00000000..0ba73ac5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/docker_subcommands @@ -0,0 +1,4 @@ +_docker_subcommands=( ${(Q)"${(z)$(<<\EO:_docker_subcommands +'app*:Docker App (Docker Inc., v0.9.1-beta3)' 'builder:Manage builds' 'buildx*:Build with BuildKit (Docker Inc., v0.5.1-tp-docker)' 'config:Manage Docker configs' 'container:Manage containers' 'context:Manage contexts' 'image:Manage images' 'manifest:Manage Docker image manifests and manifest lists' 'network:Manage networks' 'node:Manage Swarm nodes' 'plugin:Manage plugins' 'secret:Manage Docker secrets' 'service:Manage services' 'stack:Manage Docker stacks' 'swarm:Manage Swarm' 'system:Manage Docker' 'trust:Manage trust on Docker images' 'volume:Manage volumes' 'attach:Attach local standard input, output, and error streams to a running container' 'build:Build an image from a Dockerfile' 'commit:Create a new image from a container'\''s changes' 'cp:Copy files/folders between a container and the local filesystem' 'create:Create a new container' 'diff:Inspect changes to files or directories on a container'\''s filesystem' 'events:Get real time events from the server' 'exec:Run a command in a running container' 'export:Export a container'\''s filesystem as a tar archive' 'history:Show the history of an image' 'images:List images' 'import:Import the contents from a tarball to create a filesystem image' 'info:Display system-wide information' 'inspect:Return low-level information on Docker objects' 'kill:Kill one or more running containers' 'load:Load an image from a tar archive or STDIN' 'login:Log in to a Docker registry' 'logout:Log out from a Docker registry' 'logs:Fetch the logs of a container' 'pause:Pause all processes within one or more containers' 'port:List port mappings or a specific mapping for the container' 'ps:List containers' 'pull:Pull an image or a repository from a registry' 'push:Push an image or a repository to a registry' 'rename:Rename a container' 'restart:Restart one or more containers' 'rm:Remove one or more containers' 'rmi:Remove one or more images' 'run:Run a command in a new container' 'save:Save one or more images to a tar archive (streamed to STDOUT by default)' 'search:Search the Docker Hub for images' 'start:Start one or more stopped containers' 'stats:Display a live stream of container(s) resource usage statistics' 'stop:Stop one or more running containers' 'tag:Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE' 'top:Display the running processes of a container' 'unpause:Unpause all processes within one or more containers' 'update:Update configuration of one or more containers' 'version:Show the Docker version information' 'wait:Block until one or more containers stop, then print their exit codes' 'daemon:Enable daemon mode' 'help:Show help for a command' +EO:_docker_subcommands +)}"} ) diff --git a/exact_dot_oh-my-zsh/exact_cache/dot_zsh-update b/exact_dot_oh-my-zsh/exact_cache/dot_zsh-update new file mode 100644 index 00000000..77700424 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/dot_zsh-update @@ -0,0 +1 @@ +LAST_EPOCH=18666 diff --git a/exact_dot_oh-my-zsh/exact_cache/dotenv-allowed.list b/exact_dot_oh-my-zsh/exact_cache/dotenv-allowed.list new file mode 100644 index 00000000..6f6d727f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/dotenv-allowed.list @@ -0,0 +1,3 @@ +/home/joelazar/git/work/backend/analytics-api/analytics +/home/joelazar/git/work/mc/mc-backend +/home/joelazar/git/work/mc/mc-frontend diff --git a/exact_dot_oh-my-zsh/exact_cache/empty_dot_gitkeep b/exact_dot_oh-my-zsh/exact_cache/empty_dot_gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_cache/exact_private_docker-search-raffle.azurecr.io/anal b/exact_dot_oh-my-zsh/exact_cache/exact_private_docker-search-raffle.azurecr.io/anal new file mode 100644 index 00000000..033af193 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/exact_private_docker-search-raffle.azurecr.io/anal @@ -0,0 +1,4 @@ +result=( ${(Q)"${(z)$(<<\EO:result + +EO:result +)}"} ) diff --git a/exact_dot_oh-my-zsh/exact_cache/grep-alias b/exact_dot_oh-my-zsh/exact_cache/grep-alias new file mode 100644 index 00000000..8ec15cd7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/grep-alias @@ -0,0 +1,3 @@ +alias grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}' +alias egrep='egrep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}' +alias fgrep='fgrep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}' diff --git a/exact_dot_oh-my-zsh/exact_cache/kubectl_completion.REMOVED.git-id b/exact_dot_oh-my-zsh/exact_cache/kubectl_completion.REMOVED.git-id new file mode 100644 index 00000000..4d3c6cb1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/kubectl_completion.REMOVED.git-id @@ -0,0 +1 @@ +2ac32d55d58c4a3b04d2429e1aabac29773f87b4 \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_cache/python_modules b/exact_dot_oh-my-zsh/exact_cache/python_modules new file mode 100644 index 00000000..7130612b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_cache/python_modules @@ -0,0 +1,4 @@ +_python_modules=( ${(Q)"${(z)$(<<\EO:_python_modules +'db' 'events' 'main' 'sessions' 'test' 'utils' '__future__' '_bootlocale' '_collections_abc' '_compat_pickle' '_compression' '_dummy_thread' '_markupbase' '_osx_support' '_py_abc' '_pydecimal' '_pyio' '_sitebuiltins' '_strptime' '_sysconfigdata__linux_x86_64-linux-gnu' '_threading_local' '_weakrefset' 'abc' 'aifc' 'antigravity' 'argparse' 'ast' 'asynchat' 'asyncio' 'asyncore' 'base64' 'bdb' 'binhex' 'bisect' 'bz2' 'cProfile' 'calendar' 'cgi' 'cgitb' 'chunk' 'cmd' 'code' 'codecs' 'codeop' 'collections' 'colorsys' 'compileall' 'concurrent' 'configparser' 'contextlib' 'contextvars' 'copy' 'copyreg' 'crypt' 'csv' 'ctypes' 'curses' 'dataclasses' 'datetime' 'dbm' 'decimal' 'difflib' 'dis' 'distutils' 'doctest' 'dummy_threading' 'email' 'encodings' 'ensurepip' 'enum' 'filecmp' 'fileinput' 'fnmatch' 'formatter' 'fractions' 'ftplib' 'functools' 'genericpath' 'getopt' 'getpass' 'gettext' 'glob' 'gzip' 'hashlib' 'heapq' 'hmac' 'html' 'http' 'idlelib' 'imaplib' 'imghdr' 'imp' 'importlib' 'inspect' 'io' 'ipaddress' 'json' 'keyword' 'lib2to3' 'linecache' 'locale' 'logging' 'lzma' 'mailbox' 'mailcap' 'mimetypes' 'modulefinder' 'multiprocessing' 'netrc' 'nntplib' 'ntpath' 'nturl2path' 'numbers' 'opcode' 'operator' 'optparse' 'os' 'pathlib' 'pdb' 'pickle' 'pickletools' 'pipes' 'pkgutil' 'platform' 'plistlib' 'poplib' 'posixpath' 'pprint' 'profile' 'pstats' 'pty' 'py_compile' 'pyclbr' 'pydoc' 'pydoc_data' 'queue' 'quopri' 'random' 're' 'reprlib' 'rlcompleter' 'runpy' 'sched' 'secrets' 'selectors' 'shelve' 'shlex' 'shutil' 'signal' 'site' 'smtpd' 'smtplib' 'sndhdr' 'socket' 'socketserver' 'sqlite3' 'sre_compile' 'sre_constants' 'sre_parse' 'ssl' 'stat' 'statistics' 'string' 'stringprep' 'struct' 'subprocess' 'sunau' 'symbol' 'symtable' 'sysconfig' 'tabnanny' 'tarfile' 'telnetlib' 'tempfile' 'textwrap' 'this' 'threading' 'timeit' 'tkinter' 'token' 'tokenize' 'trace' 'traceback' 'tracemalloc' 'tty' 'turtle' 'turtledemo' 'types' 'typing' 'unittest' 'urllib' 'uu' 'uuid' 'venv' 'warnings' 'wave' 'weakref' 'webbrowser' 'wsgiref' 'xdrlib' 'xml' 'xmlrpc' 'zipapp' 'zipfile' 'zipimport' '_asyncio' '_bisect' '_blake2' '_bz2' '_codecs_cn' '_codecs_hk' '_codecs_iso2022' '_codecs_jp' '_codecs_kr' '_codecs_tw' '_contextvars' '_crypt' '_csv' '_ctypes' '_ctypes_test' '_curses' '_curses_panel' '_datetime' '_dbm' '_decimal' '_elementtree' '_gdbm' '_hashlib' '_heapq' '_json' '_lsprof' '_lzma' '_md5' '_multibytecodec' '_multiprocessing' '_opcode' '_pickle' '_posixshmem' '_posixsubprocess' '_queue' '_random' '_sha1' '_sha256' '_sha3' '_sha512' '_socket' '_sqlite3' '_ssl' '_statistics' '_struct' '_testbuffer' '_testcapi' '_testimportmultiple' '_testinternalcapi' '_testmultiphase' '_tkinter' '_uuid' '_xxsubinterpreters' '_xxtestfuzz' 'array' 'audioop' 'binascii' 'cmath' 'fcntl' 'grp' 'math' 'mmap' 'nis' 'ossaudiodev' 'parser' 'pyexpat' 'readline' 'resource' 'select' 'spwd' 'syslog' 'termios' 'unicodedata' 'xxlimited' 'zlib' '_pytest' '_sentencepiece' 'absl' 'alembic' 'am_api' 'analytics_api' 'antiorm' 'antipool' 'astroid' 'autoflake' 'bin' 'blis' 'bs4' 'cachetools' 'caffe2' 'catalogue' 'certifi' 'click_plugins' 'cligj' 'clonevirtualenv' 'cloudpickle' 'colorclass' 'content_api' 'coverage' 'crc32c' 'cryptography' 'cycler' 'cymem' 'databricks_cli' 'dateutil' 'dbapiext' 'dbrelmgr' 'easy_install' 'editor' 'event_api' 'fastapi' 'fiona' 'flashtext' 'flask_cors' 'flask_migrate' 'flask_script' 'flask_sqlalchemy' 'geojson' 'geopandas' 'gevent' 'git' 'gitdb' 'google_auth_oauthlib' 'googlesearch' 'gorilla' 'grpc' 'gunicorn' 'h11' 'httptools' 'idna' 'importlib_metadata' 'iniconfig' 'integration' 'isort' 'jedi' 'joblib' 'jwt' 'kiwisolver' 'lazy_object_proxy' 'mako' 'matplotlib' 'mccabe' 'mlflow' 'more_itertools' 'munch' 'murmurhash' 'nltk' 'numpy' 'oauthlib' 'pandas' 'parso' 'pip' 'pip_upgrade' 'pip_upgrader' 'pkg_resources' 'plac' 'plac_core' 'plac_ext' 'plac_tk' 'pluggy' 'preshed' 'prometheus_client' 'prometheus_flask_exporter' 'psycopg2' 'py' 'pyasn1' 'pyasn1_modules' 'pydantic' 'pylab' 'pyls_jsonrpc' 'pyproj' 'pytest' 'querystring_parser' 'readerwriterlock' 'requests' 'requests_oauthlib' 'rsa' 'sacremoses' 'scipy' 'seaborn' 'sentencepiece' 'setuptools' 'shapely' 'simplejson' 'sklearn' 'smmap' 'spacy' 'sqlalchemy' 'srsly' 'starlette' 'tabulate' 'tensorboard' 'terminaltables' 'thinc' 'tokenizers' 'torch' 'tqdm' 'transformers' 'typing_extensions' 'ujson' 'urllib3' 'uvicorn' 'uvloop' 'wasabi' 'wcwidth' 'websockets' 'wrapt' 'xlsxwriter' 'Cryptodome' 'IPython' 'LibAppArmor' 'OpenGL' 'PIL' 'PyQt5' 'VdePlug' '_black_version' '_blueman' '_cffi_backend' '_dbus_bindings' '_dbus_glib_bindings' '_distutils_hack' '_ftdi1' '_gv' '_ldb_text' '_orcus' '_orcus_json' '_pyrsistent_version' '_snack' '_tdb_text' '_tevent' '_volume_key' '_yaml' 'airdrop' 'airgraphviz' 'apparmor' 'appdirs' 'apsw' 'argon2' 'asciinema' 'asn1crypto' 'attr' 'avahi' 'babel' 'babelfish' 'backcall' 'bcrypt' 'black' 'blackd' 'bleach' 'blib2to3' 'blueman' 'brlapi' 'btrfsutil' 'bytesize' 'cachecontrol' 'cached_property' 'cachy' 'cairo' 'ceph_argparse' 'ceph_daemon' 'ceph_volume' 'ceph_volume_client' 'cephfs' 'cffi' 'chardet' 'chm' 'clang' 'cleo' 'click' 'clikit' 'colorama' 'compose' 'contextlib2' 'css_parser' 'cssselect' 'cups' 'cupshelpers' 'curl' 'cv2' 'dbus' 'decorator' 'defusedxml' 'distlib' 'distro' 'dns' 'docker' 'dockerpty' 'dockerpycreds' 'docopt' 'dogpile' 'dotenv' 'drv_libxml2' 'entrypoints' 'enzyme' 'feedparser' 'filelock' 'flake8' 'flask' 'ftdi1' 'future' 'gi' 'greenlet' 'grip' 'guessit' 'gv' 'html2text' 'html5_parser' 'html5lib' 'httpie' 'ieee1284module' 'iex' 'ifaddr' 'imath' 'imathnumpy' 'imobiledevice' 'init_calibre' 'ipykernel' 'ipykernel_launcher' 'ipython_genutils' 'ipywidgets' 'isc' 'itsdangerous' 'ixion' 'jeepney' 'jinja2' 'jsonschema' 'jupyter' 'jupyter_client' 'jupyter_console' 'jupyter_core' 'keyring' 'ldb' 'lensfun' 'libfuturize' 'libmount' 'libpasteurize' 'libproxy' 'libsmbios_c' 'libsvn' 'libxml2' 'libxml2mod' 'lockfile' 'louis' 'lxml' 'lz4' 'markdown' 'markupsafe' 'mechanize' 'mesonbuild' 'mistune' 'msgpack' 'mypy_extensions' 'nacl' 'nbconvert' 'nbformat' 'neovim' 'netifaces' 'notebook' 'notedown' 'nvr' 'orcus' 'ordered_set' 'packaging' 'pandocattributes' 'pandocfilters' 'paramiko' 'past' 'pastel' 'path_and_address' 'pathspec' 'pep517' 'pexpect' 'pickleshare' 'pkginfo' 'plist' 'ply' 'poetry' 'progress' 'prompt_toolkit' 'psutil' 'ptyprocess' 'pvectorc' 'pycodestyle' 'pycparser' 'pycurl' 'pyflakes' 'pygments' 'pygtkcompat' 'pylev' 'pyls' 'pynvim' 'pyparsing' 'pypeg2' 'pyrsistent' 'pysrt' 'pytz' 'qutebrowser' 'rados' 'rarfile' 'rbd' 'rebulk' 'regex' 'rencode' 'requests_toolbelt' 'resolvelib' 'retrying' 'rgw' 'samba' 'secretstorage' 'send2trash' 'sgmllib' 'shellingham' 'six' 'snack' 'socks' 'sockshandler' 'soupsieve' 'sqlparse' 'stevedore' 'subliminal' 'svn' 'talloc' 'tdb' 'team' 'terminado' 'testpath' 'tevent' 'texttable' 'toml' 'tomlkit' 'tornado' 'traitlets' 'typed_ast' 'uno' 'unohelper' 'unrardll' 'vdeplug_python' 'virtualenv' 'volume_key' 'webencodings' 'websocket' 'werkzeug' 'wheel' 'widgetsnbextension' 'xcbgen' 'xpra' 'yaml' 'yapf' 'yapftests' 'youtube_dl' 'zeroconf' 'zipp' 'zmq' +EO:_python_modules +)}"} ) diff --git a/exact_dot_oh-my-zsh/exact_completions/_handlr b/exact_dot_oh-my-zsh/exact_completions/_handlr new file mode 100644 index 00000000..48f58769 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_completions/_handlr @@ -0,0 +1,75 @@ +#compdef handlr + +_handlr_types() { + declare -a types + types=(${${(f)"$(handlr autocomplete -m)"}}) + _describe -t types "types" types +} + +_handlr_desktops() { + declare -a desktops + desktops=(${${(f)"$(handlr autocomplete -d | tr '\t' ':')"}}) + _describe -t desktops "desktops" desktops +} + +_handlr_commands() { + declare -a subcommands + subcommands=( + 'list:List default apps and the associated handlers' + 'open:Open a path/URL with its default handler' + 'set:Set the default handler for mime/extension' + 'unset:Unset the default handler for mime/extension' + 'launch:Launch the handler for specified extension/mime with optional arguments' + 'get:Get handler for this mime/extension' + 'add:Add a handler for given mime/extension Note that the first handler is the default' + ) + _describe -t handlr-commands "command" subcommands +} + +_handlr_subcommand () { + case "$words[1]" in + (list) + ;; + (open) + _alternative '1:filename/path:_files' + ;; + (get|unset) + _arguments ':types:_handlr_types' + ;; + (launch) + _arguments \ + '1:types:_handlr_types' \ + '2:filename/path:_files' + ;; + (set|add) + _arguments \ + '1:type:_handlr_types' \ + '2:desktop:_handlr_desktops' + ;; + (*) + _message 'Unknown subcommand' + esac +} + +_handlr () { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + '--version[get version]:' \ + '--help[get help]:' \ + '(-): :->command' \ + '(-)*:: :->arguments' + + case $state in + (command) + _handlr_commands + ;; + (arguments) + curcontext=${curcontext%:*:*}:handlr-$words[1]: + _handlr_subcommand + ;; + esac +} + +_handlr "$@" diff --git a/exact_dot_oh-my-zsh/exact_completions/_kubectl.REMOVED.git-id b/exact_dot_oh-my-zsh/exact_completions/_kubectl.REMOVED.git-id new file mode 100644 index 00000000..8a635260 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_completions/_kubectl.REMOVED.git-id @@ -0,0 +1 @@ +d09c524a16f47ead9058691834278b7263207224 \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/CHANGELOG.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/CHANGELOG.md new file mode 100644 index 00000000..fc2a1fa1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/CHANGELOG.md @@ -0,0 +1,111 @@ +# Changelog + +## v0.6.4 +- Fix `vi-forward-char` triggering a bell when using it to accept a suggestion (#488) +- New configuration option to skip completion suggestions when buffer matches a pattern (#487) +- New configuration option to ignore history entries matching a pattern (#456) + +## v0.6.3 +- Fixed bug moving cursor to end of buffer after accepting suggestion (#453) + +## v0.6.2 +- Fixed bug deleting the last character in the buffer in vi mode (#450) +- Degrade gracefully when user doesn't have `zsh/system` module installed (#447) + +## v0.6.1 +- Fixed bug occurring when `_complete` had been aliased (#443) + +## v0.6.0 +- Added `completion` suggestion strategy powered by completion system (#111) +- Allow setting `ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE` to an empty string (#422) +- Don't fetch suggestions after copy-earlier-word (#439) +- Allow users to unignore zle-\* widgets (e.g. zle-line-init) (#432) + + +## v0.5.2 +- Allow disabling automatic widget re-binding for better performance (#418) +- Fix async suggestions when `SH_WORD_SPLIT` is set +- Refactor async mode to use process substitution instead of zpty (#417) + +## v0.5.1 +- Speed up widget rebinding (#413) +- Clean up global variable creations (#403) +- Respect user's set options when running original widget (#402) + +## v0.5.0 +- Don't overwrite config with default values (#335) +- Support fallback strategies by supplying array to suggestion config var +- Rename "default" suggestion strategy to "history" to name it based on what it actually does +- Reset opts in some functions affected by `GLOB_SUBST` (#334) +- Support widgets starting with dashes (ex: `-a-widget`) (#337) +- Skip async tests in zsh versions less than 5.0.8 because of reliability issues +- Fix handling of newline + carriage return in async pty (#333) + + +## v0.4.3 +- Avoid bell when accepting suggestions with `autosuggest-accept` (#228) +- Don't fetch suggestions after [up,down]-line-or-beginning-search (#227, #241) +- We are now running CI against new 5.5.1 version +- Fix partial-accept in vi mode (#188) +- Fix suggestion disappearing on fast movement after switching to `vicmd` mode (#290) +- Fix issue rotating through kill ring with `yank-pop` (#301) +- Fix issue creating new pty for async mode when previous pty is not properly cleaned up (#249) + +## v0.4.2 +- Fix bug in zsh versions older than 5.0.8 (#296) +- Officially support back to zsh v4.3.11 + +## v0.4.1 +- Switch to [[ and (( conditionals instead of [ (#257) +- Avoid warnnestedvar warnings with `typeset -g` (#275) +- Replace tabs with spaces in yaml (#268) +- Clean up and fix escaping of special characters (#267) +- Add `emacs-forward-word` to default list of partial accept widgets (#246) + +## v0.4.0 +- High-level integration tests using RSpec and tmux +- Add continuous integration with Circle CI +- Experimental support for asynchronous suggestions (#170) +- Fix problems with multi-line suggestions (#225) +- Optimize case where manually typing in suggestion +- Avoid wrapping any zle-\* widgets (#206) +- Remove support for deprecated options from v0.0.x +- Handle history entries that begin with dashes +- Gracefully handle being sourced multiple times (#126) +- Add enable/disable/toggle widgets to disable/enable suggestions (#219) + + +## v0.3.3 +- Switch from $history array to fc builtin for better performance with large HISTFILEs (#164) +- Fix tilde handling when extended_glob is set (#168) +- Add config option for maximum buffer length to fetch suggestions for (#178) +- Add config option for list of widgets to ignore (#184) +- Don't fetch a new suggestion unless a modification widget actually modifies the buffer (#183) + +## v0.3.2 +- Test runner now supports running specific tests and choosing zsh binary +- Return code from original widget is now correctly passed through (#135) +- Add `vi-add-eol` to list of accept widgets (#143) +- Escapes widget names within evals to fix problems with irregular widget names (#152) +- Plugin now clears suggestion while within a completion menu (#149) +- .plugin file no longer relies on symbolic link support, fixing issues on Windows (#156) + +## v0.3.1 + +- Fixes issue with `vi-next-char` not accepting suggestion (#137). +- Fixes global variable warning when WARN_CREATE_GLOBAL option enabled (#133). +- Split out a separate test file for each widget. + +## v0.3.0 + +- Adds `autosuggest-execute` widget (PR #124). +- Adds concept of suggestion "strategies" for different ways of fetching suggestions. +- Adds "match_prev_cmd" strategy (PR #131). +- Uses git submodules for testing dependencies. +- Lots of test cleanup. +- Various bug fixes for zsh 5.0.x and `sh_word_split` option. + + +## v0.2.17 + +Start of changelog. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/DESCRIPTION b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/DESCRIPTION new file mode 100644 index 00000000..b69200fc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/DESCRIPTION @@ -0,0 +1 @@ +Fish-like fast/unobtrusive autosuggestions for zsh. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Dockerfile b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Dockerfile new file mode 100644 index 00000000..0d51407c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Dockerfile @@ -0,0 +1,20 @@ +FROM ruby:2.5.3-alpine + +RUN apk add --no-cache autoconf +RUN apk add --no-cache libtool +RUN apk add --no-cache libcap-dev +RUN apk add --no-cache pcre-dev +RUN apk add --no-cache curl +RUN apk add --no-cache build-base +RUN apk add --no-cache ncurses-dev +RUN apk add --no-cache tmux + +WORKDIR /zsh-autosuggestions + +ADD ZSH_VERSIONS /zsh-autosuggestions/ZSH_VERSIONS +ADD install_test_zsh.sh /zsh-autosuggestions/install_test_zsh.sh +RUN ./install_test_zsh.sh + +ADD Gemfile /zsh-autosuggestions/Gemfile +ADD Gemfile.lock /zsh-autosuggestions/Gemfile.lock +RUN bundle install diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Gemfile b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Gemfile new file mode 100644 index 00000000..8b5deecf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Gemfile @@ -0,0 +1,5 @@ +source 'https://rubygems.org' + +gem 'rspec' +gem 'rspec-wait' +gem 'pry-byebug' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Gemfile.lock b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Gemfile.lock new file mode 100644 index 00000000..63ee778a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Gemfile.lock @@ -0,0 +1,41 @@ +GEM + remote: https://rubygems.org/ + specs: + byebug (9.0.5) + coderay (1.1.1) + diff-lcs (1.3) + method_source (0.8.2) + pry (0.10.4) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) + pry-byebug (3.4.0) + byebug (~> 9.0) + pry (~> 0.10) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) + rspec-wait (0.0.9) + rspec (>= 3, < 4) + slop (3.6.0) + +PLATFORMS + ruby + +DEPENDENCIES + pry-byebug + rspec + rspec-wait + +BUNDLED WITH + 1.13.6 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/INSTALL.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/INSTALL.md new file mode 100644 index 00000000..9d2915ef --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/INSTALL.md @@ -0,0 +1,61 @@ +# Installation + +* [Packages](#packages) +* [Antigen](#antigen) +* [Oh My Zsh](#oh-my-zsh) +* [Manual](#manual-git-clone) + +## Packages + +| System | Package | +| ------------- | ------------- | +| Debian / Ubuntu | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) | +| Fedora / CentOS / RHEL / Scientific Linux | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) | +| OpenSUSE / SLE | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) | +| Arch Linux / Manjaro / Antergos / Hyperbola | [zsh-autosuggestions](https://www.archlinux.org/packages/zsh-autosuggestions), [zsh-autosuggestions-git](https://aur.archlinux.org/packages/zsh-autosuggestions-git) | +| NixOS | [zsh-autosuggestions](https://github.com/NixOS/nixpkgs/blob/master/pkgs/shells/zsh/zsh-autosuggestions/default.nix) | +| Void Linux | [zsh-autosuggestions](https://github.com/void-linux/void-packages/blob/master/srcpkgs/zsh-autosuggestions/template) | +| Mac OS | [homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/zsh-autosuggestions.rb) | +| NetBSD | [pkgsrc](http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/shells/zsh-autosuggestions/README.html) | + +## Antigen + +1. Add the following to your `.zshrc`: + + ```sh + antigen bundle zsh-users/zsh-autosuggestions + ``` + +2. Start a new terminal session. + +## Oh My Zsh + +1. Clone this repository into `$ZSH_CUSTOM/plugins` (by default `~/.oh-my-zsh/custom/plugins`) + + ```sh + git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions + ``` + +2. Add the plugin to the list of plugins for Oh My Zsh to load (inside `~/.zshrc`): + + ```sh + plugins=(zsh-autosuggestions) + ``` + +3. Start a new terminal session. + +## Manual (Git Clone) + +1. Clone this repository somewhere on your machine. This guide will assume `~/.zsh/zsh-autosuggestions`. + + ```sh + git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions + ``` + +2. Add the following to your `.zshrc`: + + ```sh + source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh + ``` + +3. Start a new terminal session. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/LICENSE b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/LICENSE new file mode 100644 index 00000000..ef7cfb63 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2013 Thiago de Arruda +Copyright (c) 2016-2019 Eric Freese + +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. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Makefile b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Makefile new file mode 100644 index 00000000..f6d13a77 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/Makefile @@ -0,0 +1,35 @@ +SRC_DIR := ./src + +SRC_FILES := \ + $(SRC_DIR)/config.zsh \ + $(SRC_DIR)/util.zsh \ + $(SRC_DIR)/bind.zsh \ + $(SRC_DIR)/highlight.zsh \ + $(SRC_DIR)/widgets.zsh \ + $(SRC_DIR)/strategies/*.zsh \ + $(SRC_DIR)/fetch.zsh \ + $(SRC_DIR)/async.zsh \ + $(SRC_DIR)/start.zsh + +HEADER_FILES := \ + DESCRIPTION \ + URL \ + VERSION \ + LICENSE + +PLUGIN_TARGET := zsh-autosuggestions.zsh + +all: $(PLUGIN_TARGET) + +$(PLUGIN_TARGET): $(HEADER_FILES) $(SRC_FILES) + cat $(HEADER_FILES) | sed -e 's/^/# /g' > $@ + cat $(SRC_FILES) >> $@ + +.PHONY: clean +clean: + rm $(PLUGIN_TARGET) + +.PHONY: test +test: all + @test -n "$$TEST_ZSH_BIN" && echo "Testing zsh binary: $(TEST_ZSH_BIN)" || true + bundle exec rspec $(TESTS) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/README.md new file mode 100644 index 00000000..06d26e35 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/README.md @@ -0,0 +1,189 @@ +# zsh-autosuggestions + +_[Fish](http://fishshell.com/)-like fast/unobtrusive autosuggestions for zsh._ + +It suggests commands as you type based on history and completions. + +Requirements: Zsh v4.3.11 or later + +[![CircleCI](https://img.shields.io/circleci/build/github/zsh-users/zsh-autosuggestions.svg)](https://circleci.com/gh/zsh-users/zsh-autosuggestions) +[![Chat on Gitter](https://img.shields.io/gitter/room/zsh-users/zsh-autosuggestions.svg)](https://gitter.im/zsh-users/zsh-autosuggestions) + + + + +## Installation + +See [INSTALL.md](INSTALL.md). + + +## Usage + +As you type commands, you will see a completion offered after the cursor in a muted gray color. This color can be changed by setting the `ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE` variable. See [configuration](#configuration). + +If you press the → key (`forward-char` widget) or End (`end-of-line` widget) with the cursor at the end of the buffer, it will accept the suggestion, replacing the contents of the command line buffer with the suggestion. + +If you invoke the `forward-word` widget, it will partially accept the suggestion up to the point that the cursor moves to. + + +## Configuration + +You may want to override the default global config variables. Default values of these variables can be found [here](src/config.zsh). + +**Note:** If you are using Oh My Zsh, you can put this configuration in a file in the `$ZSH_CUSTOM` directory. See their comments on [overriding internals](https://github.com/robbyrussell/oh-my-zsh/wiki/Customization#overriding-internals). + + +### Suggestion Highlight Style + +Set `ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE` to configure the style that the suggestion is shown with. The default is `fg=8`, which will set the foreground color to color 8 from the [256-color palette](https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg). If your terminal only supports 8 colors, you will need to use a number between 0 and 7. + +Background color can also be set, and the suggestion can be styled bold, underlined, or standout. For example, this would show suggestions with bold, underlined, pink text on a cyan background: + +```sh +ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#ff00ff,bg=cyan,bold,underline" +``` + +For more info, read the Character Highlighting section of the zsh manual: `man zshzle` or [online](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting). + +**Note:** Some iTerm2 users have reported [not being able to see the suggestions](https://github.com/zsh-users/zsh-autosuggestions/issues/416#issuecomment-486516333). If this affects you, the problem is likely caused by incorrect color settings. In order to correct this, go into iTerm2's setting, navigate to profile > colors and make sure that the colors for Basic Colors > Background and ANSI Colors > Bright Black are **different**. + + +### Suggestion Strategy + +`ZSH_AUTOSUGGEST_STRATEGY` is an array that specifies how suggestions should be generated. The strategies in the array are tried successively until a suggestion is found. There are currently three built-in strategies to choose from: + +- `history`: Chooses the most recent match from history. +- `completion`: Chooses a suggestion based on what tab-completion would suggest. (requires `zpty` module) +- `match_prev_cmd`: Like `history`, but chooses the most recent match whose preceding history item matches the most recently executed command ([more info](src/strategies/match_prev_cmd.zsh)). Note that this strategy won't work as expected with ZSH options that don't preserve the history order such as `HIST_IGNORE_ALL_DUPS` or `HIST_EXPIRE_DUPS_FIRST`. + +For example, setting `ZSH_AUTOSUGGEST_STRATEGY=(history completion)` will first try to find a suggestion from your history, but, if it can't find a match, will find a suggestion from the completion engine. + + +### Widget Mapping + +This plugin works by triggering custom behavior when certain [zle widgets](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets) are invoked. You can add and remove widgets from these arrays to change the behavior of this plugin: + +- `ZSH_AUTOSUGGEST_CLEAR_WIDGETS`: Widgets in this array will clear the suggestion when invoked. +- `ZSH_AUTOSUGGEST_ACCEPT_WIDGETS`: Widgets in this array will accept the suggestion when invoked. +- `ZSH_AUTOSUGGEST_EXECUTE_WIDGETS`: Widgets in this array will execute the suggestion when invoked. +- `ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS`: Widgets in this array will partially accept the suggestion when invoked. +- `ZSH_AUTOSUGGEST_IGNORE_WIDGETS`: Widgets in this array will not trigger any custom behavior. + +Widgets that modify the buffer and are not found in any of these arrays will fetch a new suggestion after they are invoked. + +**Note:** A widget shouldn't belong to more than one of the above arrays. + + +### Disabling suggestion for large buffers + +Set `ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE` to an integer value to disable autosuggestion for large buffers. The default is unset, which means that autosuggestion will be tried for any buffer size. Recommended value is 20. +This can be useful when pasting large amount of text in the terminal, to avoid triggering autosuggestion for strings that are too long. + +### Enable Asynchronous Mode + +As of `v0.4.0`, suggestions can be fetched asynchronously. To enable this behavior, set the `ZSH_AUTOSUGGEST_USE_ASYNC` variable (it can be set to anything). + +### Disabling automatic widget re-binding + +Set `ZSH_AUTOSUGGEST_MANUAL_REBIND` (it can be set to anything) to disable automatic widget re-binding on each precmd. This can be a big boost to performance, but you'll need to handle re-binding yourself if any of the widget lists change or if you or another plugin wrap any of the autosuggest widgets. To re-bind widgets, run `_zsh_autosuggest_bind_widgets`. + +### Ignoring history suggestions that match a pattern + +Set `ZSH_AUTOSUGGEST_HISTORY_IGNORE` to a glob pattern to prevent offering suggestions for history entries that match the pattern. For example, set it to `"cd *"` to never suggest any `cd` commands from history. Or set to `"?(#c50,)"` to never suggest anything 50 characters or longer. + +**Note:** This only affects the `history` and `match_prev_cmd` suggestion strategies. + +### Skipping completion suggestions for certain cases + +Set `ZSH_AUTOSUGGEST_COMPLETION_IGNORE` to a glob pattern to prevent offering completion suggestions when the buffer matches that pattern. For example, set it to `"git *"` to disable completion suggestions for git subcommands. + +**Note:** This only affects the `completion` suggestion strategy. + + +### Key Bindings + +This plugin provides a few widgets that you can use with `bindkey`: + +1. `autosuggest-accept`: Accepts the current suggestion. +2. `autosuggest-execute`: Accepts and executes the current suggestion. +3. `autosuggest-clear`: Clears the current suggestion. +4. `autosuggest-fetch`: Fetches a suggestion (works even when suggestions are disabled). +5. `autosuggest-disable`: Disables suggestions. +6. `autosuggest-enable`: Re-enables suggestions. +7. `autosuggest-toggle`: Toggles between enabled/disabled suggestions. + +For example, this would bind ctrl + space to accept the current suggestion. + +```sh +bindkey '^ ' autosuggest-accept +``` + + +## Troubleshooting + +If you have a problem, please search through [the list of issues on GitHub](https://github.com/zsh-users/zsh-autosuggestions/issues?q=) to see if someone else has already reported it. + +### Reporting an Issue + +Before reporting an issue, please try temporarily disabling sections of your configuration and other plugins that may be conflicting with this plugin to isolate the problem. + +When reporting an issue, please include: + +- The smallest, simplest `.zshrc` configuration that will reproduce the problem. See [this comment](https://github.com/zsh-users/zsh-autosuggestions/issues/102#issuecomment-180944764) for a good example of what this means. +- The version of zsh you're using (`zsh --version`) +- Which operating system you're running + + +## Uninstallation + +1. Remove the code referencing this plugin from `~/.zshrc`. + +2. Remove the git repository from your hard drive + + ```sh + rm -rf ~/.zsh/zsh-autosuggestions # Or wherever you installed + ``` + + +## Development + +### Build Process + +Edit the source files in `src/`. Run `make` to build `zsh-autosuggestions.zsh` from those source files. + + +### Pull Requests + +Pull requests are welcome! If you send a pull request, please: + +- Request to merge into the `develop` branch (*NOT* `master`) +- Match the existing coding conventions. +- Include helpful comments to keep the barrier-to-entry low for people new to the project. +- Write tests that cover your code as much as possible. + + +### Testing + +Tests are written in ruby using the [`rspec`](http://rspec.info/) framework. They use [`tmux`](https://tmux.github.io/) to drive a pseudoterminal, sending simulated keystrokes and making assertions on the terminal content. + +Test files live in `spec/`. To run the tests, run `make test`. To run a specific test, run `TESTS=spec/some_spec.rb make test`. You can also specify a `zsh` binary to use by setting the `TEST_ZSH_BIN` environment variable (ex: `TEST_ZSH_BIN=/bin/zsh make test`). + +A docker image for testing is available [on docker hub](https://hub.docker.com/r/ericfreese/zsh-autosuggestions-test). It comes with ruby, the bundler dependencies, and all supported versions of zsh installed. + +Pull the docker image with: + +```sh +docker pull ericfreese/zsh-autosuggestions-test +``` + +To run the tests for a specific version of zsh (where `` below is substituted with the contents of a line from the [`ZSH_VERSIONS`](ZSH_VERSIONS) file): + +```sh +docker run -it -e TEST_ZSH_BIN=zsh- -v $PWD:/zsh-autosuggestions zsh-autosuggestions-test make test +``` + + +## License + +This project is licensed under [MIT license](http://opensource.org/licenses/MIT). +For the full text of the license, see the [LICENSE](LICENSE) file. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/URL b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/URL new file mode 100644 index 00000000..4e2bd941 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/URL @@ -0,0 +1 @@ +https://github.com/zsh-users/zsh-autosuggestions diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/VERSION b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/VERSION new file mode 100644 index 00000000..2fc7b367 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/VERSION @@ -0,0 +1 @@ +v0.6.4 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/ZSH_VERSIONS b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/ZSH_VERSIONS new file mode 100644 index 00000000..ed7b882f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/ZSH_VERSIONS @@ -0,0 +1,16 @@ +# Zsh releases to run tests against +# See https://github.com/zsh-users/zsh/releases +# +# When modifying this file, rebuild and push docker image: +# $ docker build -t ericfreese/zsh-autosuggestions-test . +# $ docker push ericfreese/zsh-autosuggestions-test +4.3.11 +5.0.2 +5.0.8 +5.1.1 +5.2 +5.3.1 +5.4.2 +5.5.1 +5.6.2 +5.7.1 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_editorconfig b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_editorconfig new file mode 100644 index 00000000..ddabb17b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_editorconfig @@ -0,0 +1,18 @@ +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = tab +indent_size = 4 + +[*.md] +indent_style = space + +[*.rb] +indent_style = space +indent_size = 2 + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_rspec b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_rspec new file mode 100644 index 00000000..43ae2036 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_rspec @@ -0,0 +1,3 @@ +--color +--require spec_helper +--format documentation diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_rubocop.yml b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_rubocop.yml new file mode 100644 index 00000000..97facac8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_rubocop.yml @@ -0,0 +1,30 @@ +# Rails: +# Enabled: true + +AllCops: + TargetRubyVersion: 2.3 + Include: + - '**/Rakefile' + - '**/config.ru' + - '**/Gemfile' + +Metrics/LineLength: + Max: 120 + +Style/Documentation: + Enabled: false + +Style/DotPosition: + EnforcedStyle: trailing + +Style/FrozenStringLiteralComment: + Enabled: false + +Style/Lambda: + Enabled: false + +Style/MultilineMethodCallIndentation: + EnforcedStyle: indented + +Style/TrailingUnderscoreVariable: + Enabled: false diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_ruby-version b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_ruby-version new file mode 100644 index 00000000..aedc15bb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/dot_ruby-version @@ -0,0 +1 @@ +2.5.3 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_circleci/config.yml b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_circleci/config.yml new file mode 100644 index 00000000..d95fa98b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_circleci/config.yml @@ -0,0 +1,15 @@ +version: 2 +jobs: + build: + parallelism: 4 + shell: /bin/bash --login + docker: + - image: ericfreese/zsh-autosuggestions-test:latest + steps: + - checkout + - run: + name: Running tests + command: | + for v in $(grep "^[^#]" ZSH_VERSIONS | awk "(NR + $CIRCLE_NODE_INDEX) % $CIRCLE_NODE_TOTAL == 0"); do + TEST_ZSH_BIN=zsh-$v make test || exit 1 + done diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/FETCH_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/FETCH_HEAD new file mode 100644 index 00000000..f816cefd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/FETCH_HEAD @@ -0,0 +1,11 @@ +ae315ded4dba10685dbbafbfa2ff3c1aefeb490d branch 'master' of ssh://github.com/zsh-users/zsh-autosuggestions +eff0894a138f64f2752c0e2f0612055d71b0af4f not-for-merge branch 'develop' of ssh://github.com/zsh-users/zsh-autosuggestions +b27277e7ff0f877f3189211ccd57da9ebec5e743 not-for-merge branch 'experiments/strategies-by-pattern' of ssh://github.com/zsh-users/zsh-autosuggestions +767d55eba0355d9ef9270df3ca257a936cf0eac5 not-for-merge branch 'features/background-initialization' of ssh://github.com/zsh-users/zsh-autosuggestions +36dae44064a7bf088fb1dec74c8463d5b6f3d3c8 not-for-merge branch 'features/hist-words-suggestions' of ssh://github.com/zsh-users/zsh-autosuggestions +161de32912a3426dc686db38250913227dd91948 not-for-merge branch 'features/redraw-hook' of ssh://github.com/zsh-users/zsh-autosuggestions +15bcfd712664bb301113761f886718fd3bea7bc2 not-for-merge branch 'fixes/copy-earlier-word' of ssh://github.com/zsh-users/zsh-autosuggestions +141f497d1751ea7c8f3bd7e4fb0e2e031d6d302b not-for-merge branch 'fixes/kill-multiple-words' of ssh://github.com/zsh-users/zsh-autosuggestions +4ccfdb2435ea4b82983bf22bb2913c0773992cce not-for-merge branch 'fixes/partial-accept-duplicate-word' of ssh://github.com/zsh-users/zsh-autosuggestions +9fb96753069b919deaaacb6f659be2339dfeb4d2 not-for-merge branch 'fixes/slow_bracketed_paste_magic' of ssh://github.com/zsh-users/zsh-autosuggestions +20c0ea841bafa78d8fb75c767e780248bfdf11a4 not-for-merge branch 'no-server' of ssh://github.com/zsh-users/zsh-autosuggestions diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/ORIG_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/ORIG_HEAD new file mode 100644 index 00000000..100da5cf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/ORIG_HEAD @@ -0,0 +1 @@ +ae315ded4dba10685dbbafbfa2ff3c1aefeb490d diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/config b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/config new file mode 100644 index 00000000..df59b3b9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/config @@ -0,0 +1,11 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + url = https://github.com/zsh-users/zsh-autosuggestions + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/description b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_branches/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_branches/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_applypatch-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_applypatch-msg.sample new file mode 100644 index 00000000..a5d7b84a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_commit-msg.sample new file mode 100644 index 00000000..b58d1184 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample new file mode 100644 index 00000000..14ed0aa4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample @@ -0,0 +1,173 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + } + my $query = <<" END"; + ["query", "$git_work_tree", { + "since": $last_update_token, + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_post-update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_post-update.sample new file mode 100644 index 00000000..ec17ec19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-applypatch.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-applypatch.sample new file mode 100644 index 00000000..4142082b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-commit.sample new file mode 100644 index 00000000..e144712c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample new file mode 100644 index 00000000..399eab19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-push.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-push.sample new file mode 100644 index 00000000..4ce688d3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-rebase.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-rebase.sample new file mode 100644 index 00000000..6cbef5c3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-receive.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-receive.sample new file mode 100644 index 00000000..a1fd29ec --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample new file mode 100644 index 00000000..10fa14c5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_update.sample new file mode 100644 index 00000000..c4d426bc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_hooks/executable_update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_info/exclude b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_info/exclude new file mode 100644 index 00000000..a5196d1b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/HEAD new file mode 100644 index 00000000..05e1f45f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 ae315ded4dba10685dbbafbfa2ff3c1aefeb490d joelazar 1606125297 +0100 clone: from https://github.com/zsh-users/zsh-autosuggestions diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_heads/master new file mode 100644 index 00000000..05e1f45f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 ae315ded4dba10685dbbafbfa2ff3c1aefeb490d joelazar 1606125297 +0100 clone: from https://github.com/zsh-users/zsh-autosuggestions diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD new file mode 100644 index 00000000..05e1f45f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 ae315ded4dba10685dbbafbfa2ff3c1aefeb490d joelazar 1606125297 +0100 clone: from https://github.com/zsh-users/zsh-autosuggestions diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_objects/exact_info/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_objects/exact_info/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_objects/exact_pack/pack-d9220fa9e92bd29c294f672dc23c7930c26e4477.idx b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_objects/exact_pack/pack-d9220fa9e92bd29c294f672dc23c7930c26e4477.idx new file mode 100644 index 0000000000000000000000000000000000000000..2c2f829b9594e0b38028b60caf2b16cb8d0eabf1 GIT binary patch literal 68160 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

y#zc@0WExx%>NS*_o%>eH+cQYt~Gj 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

=&BqkRo+N*m@{Jv$L>&#t>wV9Gx8x1Px} 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/packed-refs b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/packed-refs new file mode 100644 index 00000000..288aa646 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/packed-refs @@ -0,0 +1,50 @@ +# pack-refs with: peeled fully-peeled sorted +eff0894a138f64f2752c0e2f0612055d71b0af4f refs/remotes/origin/develop +b27277e7ff0f877f3189211ccd57da9ebec5e743 refs/remotes/origin/experiments/strategies-by-pattern +767d55eba0355d9ef9270df3ca257a936cf0eac5 refs/remotes/origin/features/background-initialization +36dae44064a7bf088fb1dec74c8463d5b6f3d3c8 refs/remotes/origin/features/hist-words-suggestions +161de32912a3426dc686db38250913227dd91948 refs/remotes/origin/features/redraw-hook +15bcfd712664bb301113761f886718fd3bea7bc2 refs/remotes/origin/fixes/copy-earlier-word +141f497d1751ea7c8f3bd7e4fb0e2e031d6d302b refs/remotes/origin/fixes/kill-multiple-words +4ccfdb2435ea4b82983bf22bb2913c0773992cce refs/remotes/origin/fixes/partial-accept-duplicate-word +9fb96753069b919deaaacb6f659be2339dfeb4d2 refs/remotes/origin/fixes/slow_bracketed_paste_magic +ae315ded4dba10685dbbafbfa2ff3c1aefeb490d refs/remotes/origin/master +20c0ea841bafa78d8fb75c767e780248bfdf11a4 refs/remotes/origin/no-server +5f13490bae58bc42045b2a19fc3e446df75417a5 refs/tags/0.0.1 +7dc9e0f92631d03d289bdcf67530c84e72b18aa3 refs/tags/pre-v0.1.0 +6a4b2b386534461d479155c7f9503b1063800398 refs/tags/v0.1.0 +f154d25fb3b734235bff7d508d885e7db851c4ca refs/tags/v0.1.1 +0ae590729428a0b6aea682a04d74404a124cb909 refs/tags/v0.2.0 +31452887d20069d882e31eafaf46890e6500b4af refs/tags/v0.2.1 +2b449a62f8b6fc69e44db3eaf46c5c36c1853bfa refs/tags/v0.2.10 +ba029e83d0aa2d859d7ac46299462fa5b5a43a68 refs/tags/v0.2.11 +aa859a282dddf97cadce45255fad95930fc3f503 refs/tags/v0.2.12 +2a5791710a9038ad21b9f528e6923f33fe3b8edd refs/tags/v0.2.13 +9d100f4f321000b80b73638a6406e8486c35ce16 refs/tags/v0.2.14 +c761dc81509b137748190d254e8beb6845dedf21 refs/tags/v0.2.15 +0a42f872b84ecdd17b2d4d4e4422f3af8bf8959b refs/tags/v0.2.16 +f0a745576ff69fa608421ee7214d4cd77b43e62f refs/tags/v0.2.17 +011f5420fcc61d1c8fdd7510c4b560b0ca7f6412 refs/tags/v0.2.2 +266437c98a7e3d9b24fa82e6a35d8dc54946f1d2 refs/tags/v0.2.3 +cd71081303287498f940e6158cfce13583d4293f refs/tags/v0.2.4 +76f415bf4360705a819c92787b188ddd813d374c refs/tags/v0.2.5 +3ce1adb55dfb558c7f9b60056356fdb7d3567403 refs/tags/v0.2.6 +45ab49d1f2024f9422ab9eb41178e4d9edf2e91c refs/tags/v0.2.7 +dd9a8789a758966eed6943adad5338b2213df4a2 refs/tags/v0.2.8 +0faa2b6584928a17fef8904e8439d1268729f37a refs/tags/v0.2.9 +1ed9155f89956310eb0cfce59f95e6f3e2ecbcd2 refs/tags/v0.3.0 +87facd9b85630f288433aa0a20a963cffc612ee5 refs/tags/v0.3.1 +cce68de46d37697f561a23c51db629ee2bbd18db refs/tags/v0.3.2 +9cfaf5d3424ceb5fedd2c7e3253f823faae74383 refs/tags/v0.3.3 +2cb6eb6e29852e64a146b0284275ecdc0661b082 refs/tags/v0.4.0 +9f9237ab8a530eeff389161202bbc7283ad6af3e refs/tags/v0.4.1 +15931f04ffac91a2f9a1a044b6b3ee4050751064 refs/tags/v0.4.2 +d7c796719e6352666f7a9c94da9ddaed10f3217d refs/tags/v0.4.3 +a7f0106b31c2538a36cab30428e6ca65d9a2ae60 refs/tags/v0.5.0 +cbf0e24b1863c44606bbdd1edcb1c1b40efbcb55 refs/tags/v0.5.1 +733abd4af0f23f217caa2a303fbef66382d19d6f refs/tags/v0.5.2 +b3b34eab49b8e44f2df93d746640329a45722c0b refs/tags/v0.6.0 +112dd3e3c7d1e038c46a2af92d38f4b9aa2ffb17 refs/tags/v0.6.1 +c80605595c209e4ee60c3d121ab159ebc6d66547 refs/tags/v0.6.2 +146020d9b28c70a5edd93d19bbef9c5cb05d4b62 refs/tags/v0.6.3 +ae315ded4dba10685dbbafbfa2ff3c1aefeb490d refs/tags/v0.6.4 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_github/exact_ISSUE_TEMPLATE/bug-report.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_github/exact_ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 00000000..7663df69 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_github/exact_ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,36 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +### Describe the bug + + +### To Reproduce +Steps to reproduce the behavior: + + + +```sh +% zsh -df +% source path/to/zsh-autosuggestions.zsh +% ... # what do you do to reproduce? +``` + +### Expected behavior + + +### Screenshots + + +### Desktop + - OS + distribution: + - Zsh version: + - Plugin version: + +### Additional context + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_github/exact_ISSUE_TEMPLATE/feature_request.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_github/exact_ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..58746253 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_github/exact_ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +### Is your feature request related to a problem? Please describe. + + +### Describe the solution you'd like + + +### Describe alternatives you've considered + + +### Additional context + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/async_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/async_spec.rb new file mode 100644 index 00000000..0af72329 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/async_spec.rb @@ -0,0 +1,70 @@ +context 'with asynchronous suggestions enabled' do + let(:options) { ["ZSH_AUTOSUGGEST_USE_ASYNC="] } + + describe '`up-line-or-beginning-search`' do + let(:before_sourcing) do + -> do + session. + run_command('autoload -U up-line-or-beginning-search'). + run_command('zle -N up-line-or-beginning-search'). + send_string('bindkey "'). + send_keys('C-v').send_keys('up'). + send_string('" up-line-or-beginning-search'). + send_keys('enter') + end + end + + it 'should show previous history entries' do + with_history( + 'echo foo', + 'echo bar', + 'echo baz' + ) do + session.clear_screen + 3.times { session.send_keys('up') } + wait_for { session.content }.to eq("echo foo") + end + end + end + + describe '`copy-earlier-word`' do + let(:before_sourcing) do + -> do + session. + run_command('autoload -Uz copy-earlier-word'). + run_command('zle -N copy-earlier-word'). + run_command('bindkey "^N" copy-earlier-word') + end + end + + it 'should cycle through previous words in the buffer' do + session.clear_screen + session.send_string('foo bar baz') + sleep 0.5 + session.send_keys('C-n') + wait_for { session.content }.to eq('foo bar bazbaz') + session.send_keys('C-n') + wait_for { session.content }.to eq('foo bar bazbar') + session.send_keys('C-n') + wait_for { session.content }.to eq('foo bar bazfoo') + end + end + + describe 'pressing ^C after fetching a suggestion' do + before do + skip 'Workaround does not work below v5.0.8' if session.zsh_version < Gem::Version.new('5.0.8') + end + + it 'terminates the prompt and begins a new one' do + session.send_keys('e') + sleep 0.5 + session.send_keys('C-c') + sleep 0.5 + session.send_keys('echo') + + wait_for { session.content }.to eq("e\necho") + end + end +end + + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/auto_cd_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/auto_cd_spec.rb new file mode 100644 index 00000000..94bd24b0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/auto_cd_spec.rb @@ -0,0 +1,14 @@ +describe 'with `AUTO_CD` option set' do + let(:after_sourcing) do + -> { + session.run_command('setopt AUTO_CD') + session.run_command('autoload compinit && compinit') + } + end + + it 'directory names are still completed' do + session.send_string('sr') + session.send_keys('C-i') + wait_for { session.content }.to eq('src/') + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/bracketed_paste_magic_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/bracketed_paste_magic_spec.rb new file mode 100644 index 00000000..41ff2676 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/bracketed_paste_magic_spec.rb @@ -0,0 +1,43 @@ +describe 'pasting using bracketed-paste-magic' do + let(:before_sourcing) do + -> do + session. + run_command('autoload -Uz bracketed-paste-magic'). + run_command('zle -N bracketed-paste bracketed-paste-magic') + end + end + + context 'with suggestions disabled while pasting' do + before do + session. + run_command('bpm_init() { zle autosuggest-disable }'). + run_command('bpm_finish() { zle autosuggest-enable }'). + run_command('zstyle :bracketed-paste-magic paste-init bpm_init'). + run_command('zstyle :bracketed-paste-magic paste-finish bpm_finish') + end + + it 'does not show an incorrect suggestion' do + with_history('echo hello') do + session.paste_string("echo #{'a' * 60}") + sleep 1 + expect(session.content).to eq("echo #{'a' * 60}") + end + end + end + + context 'with `bracketed-paste` added to the list of widgets that clear the suggestion' do + let(:options) { ['ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste)'] } + + it 'does not retain an old suggestion' do + with_history ('echo foo') do + session.send_string('echo ') + wait_for { session.content }.to eq('echo foo') + session.paste_string('bar') + wait_for { session.content }.to eq('echo bar') + session.send_keys('C-a') # Any cursor movement works + sleep 1 + expect(session.content).to eq('echo bar') + end + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/client_zpty_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/client_zpty_spec.rb new file mode 100644 index 00000000..b8abb375 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/client_zpty_spec.rb @@ -0,0 +1,14 @@ +describe 'a running zpty command' do + let(:before_sourcing) { -> { session.run_command('zmodload zsh/zpty && zpty -b kitty cat') } } + + context 'when using `completion` strategy' do + let(:options) { ["ZSH_AUTOSUGGEST_STRATEGY=completion"] } + + it 'is not affected' do + session.send_keys('a').send_keys('C-h') + session.run_command('zpty -t kitty; echo $?') + + wait_for { session.content }.to end_with("\n0") + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/glob_subst_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/glob_subst_spec.rb new file mode 100644 index 00000000..c3dd671c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/glob_subst_spec.rb @@ -0,0 +1,12 @@ +describe 'with `GLOB_SUBST` option set' do + let(:after_sourcing) do + -> { + session.run_command('setopt GLOB_SUBST') + } + end + + it 'error messages are not printed' do + session.send_string('[[') + wait_for { session.content }.to eq('[[') + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/rebound_bracket_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/rebound_bracket_spec.rb new file mode 100644 index 00000000..8b420f06 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/rebound_bracket_spec.rb @@ -0,0 +1,13 @@ +describe 'rebinding [' do + context 'initialized before sourcing the plugin' do + before do + session.run_command("function [ { $commands[\\[] \"$@\" }") + session.clear_screen + end + + it 'executes the custom behavior and the built-in behavior' do + session.send_string('asdf') + wait_for { session.content }.to eq('asdf') + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/vi_mode_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/vi_mode_spec.rb new file mode 100644 index 00000000..0a295c23 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/vi_mode_spec.rb @@ -0,0 +1,80 @@ +describe 'when using vi mode' do + let(:before_sourcing) do + -> do + session.run_command('bindkey -v') + end + end + + describe 'moving the cursor after exiting insert mode' do + it 'should not clear the current suggestion' do + with_history('foobar foo') do + session. + send_string('foo'). + send_keys('escape'). + send_keys('h') + + wait_for { session.content }.to eq('foobar foo') + end + end + end + + describe '`vi-forward-word-end`' do + it 'should accept through the end of the current word' do + with_history('foobar foo') do + session. + send_string('foo'). + send_keys('escape'). + send_keys('e'). # vi-forward-word-end + send_keys('a'). # vi-add-next + send_string('baz') + + wait_for { session.content }.to eq('foobarbaz') + end + end + end + + describe '`vi-forward-word`' do + it 'should accept through the first character of the next word' do + with_history('foobar foo') do + session. + send_string('foo'). + send_keys('escape'). + send_keys('w'). # vi-forward-word + send_keys('a'). # vi-add-next + send_string('az') + + wait_for { session.content }.to eq('foobar faz') + end + end + end + + describe '`vi-find-next-char`' do + it 'should accept through the next occurrence of the character' do + with_history('foobar foo') do + session. + send_string('foo'). + send_keys('escape'). + send_keys('f'). # vi-find-next-char + send_keys('o'). + send_keys('a'). # vi-add-next + send_string('b') + + wait_for { session.content }.to eq('foobar fob') + end + end + end + + describe '`vi-delete`' do + it 'should be able to remove the last character in the buffer' do + skip 'deleting last char did not work below zsh version 5.0.8' if session.zsh_version < Gem::Version.new('5.0.8') + + session. + send_string('echo foo'). + send_keys('escape'). + send_keys('d'). + send_keys('l') + + wait_for { session.content }.to eq('echo fo') + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/wrapped_widget_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/wrapped_widget_spec.rb new file mode 100644 index 00000000..61dfc2dc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/wrapped_widget_spec.rb @@ -0,0 +1,39 @@ +describe 'a wrapped widget' do + let(:widget) { 'backward-delete-char' } + + context 'initialized before sourcing the plugin' do + let(:before_sourcing) do + -> do + session. + run_command("_orig_#{widget}() { zle .#{widget} }"). + run_command("zle -N orig-#{widget} _orig_#{widget}"). + run_command("#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }"). + run_command("zle -N #{widget} #{widget}-magic") + end + end + + it 'executes the custom behavior and the built-in behavior' do + with_history('foobar', 'foodar') do + session.send_string('food').send_keys('C-h') + wait_for { session.content }.to eq('foobar') + end + end + end + + context 'initialized after sourcing the plugin' do + before do + session. + run_command("zle -N orig-#{widget} ${widgets[#{widget}]#*:}"). + run_command("#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }"). + run_command("zle -N #{widget} #{widget}-magic"). + clear_screen + end + + it 'executes the custom behavior and the built-in behavior' do + with_history('foobar', 'foodar') do + session.send_string('food').send_keys('C-h') + wait_for { session.content }.to eq('foobar') + end + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/zle_input_stack_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/zle_input_stack_spec.rb new file mode 100644 index 00000000..12cfbc7b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_integrations/zle_input_stack_spec.rb @@ -0,0 +1,24 @@ +describe 'using `zle -U`' do + let(:before_sourcing) do + -> do + session. + run_command('_zsh_autosuggest_strategy_test() { sleep 1; _zsh_autosuggest_strategy_history "$1" }'). + run_command('foo() { zle -U - "echo hello" }; zle -N foo; bindkey ^B foo') + end + end + + let(:options) { ['unset ZSH_AUTOSUGGEST_USE_ASYNC', 'ZSH_AUTOSUGGEST_STRATEGY=test'] } + + # TODO: This is only possible with the $KEYS_QUEUED_COUNT widget parameter, coming soon... + xit 'does not fetch a suggestion for every inserted character' do + session.send_keys('C-b') + wait_for { session.content }.to eq('echo hello') + end + + it 'shows a suggestion when the widget completes' do + with_history('echo hello world') do + session.send_keys('C-b') + wait_for { session.content(esc_seqs: true) }.to match(/\Aecho hello\e\[[0-9]+m world/) + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/buffer_max_size_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/buffer_max_size_spec.rb new file mode 100644 index 00000000..29ca8bc4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/buffer_max_size_spec.rb @@ -0,0 +1,30 @@ +describe 'a suggestion' do + let(:term_opts) { { width: 200 } } + let(:long_command) { "echo #{'a' * 100}" } + + around do |example| + with_history(long_command) { example.run } + end + + it 'is provided for any buffer length' do + session.send_string(long_command[0...-1]) + wait_for { session.content }.to eq(long_command) + end + + context 'when ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE is specified' do + let(:buffer_max_size) { 10 } + let(:options) { ["ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=#{buffer_max_size}"] } + + it 'is provided when the buffer is shorter than the specified length' do + session.send_string(long_command[0...(buffer_max_size - 1)]) + wait_for { session.content }.to eq(long_command) + end + + it 'is provided when the buffer is equal to the specified length' do + session.send_string(long_command[0...(buffer_max_size)]) + wait_for { session.content }.to eq(long_command) + end + + it 'is not provided when the buffer is longer than the specified length' + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/highlight_style_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/highlight_style_spec.rb new file mode 100644 index 00000000..a7e39b34 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/highlight_style_spec.rb @@ -0,0 +1,7 @@ +describe 'a displayed suggestion' do + it 'is shown in the default style' + + describe 'when ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE is set to a zle_highlight string' do + it 'is shown in the specified style' + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/original_widget_prefix_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/original_widget_prefix_spec.rb new file mode 100644 index 00000000..a4b6e983 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/original_widget_prefix_spec.rb @@ -0,0 +1,7 @@ +describe 'an original zle widget' do + context 'is accessible with the default prefix' + + context 'when ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX is set' do + it 'is accessible with the specified prefix' + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/strategy_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/strategy_spec.rb new file mode 100644 index 00000000..58562d0c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/strategy_spec.rb @@ -0,0 +1,55 @@ +describe 'a suggestion for a given prefix' do + let(:history_strategy) { '_zsh_autosuggest_strategy_history() { suggestion="history" }' } + let(:foobar_strategy) { '_zsh_autosuggest_strategy_foobar() { [[ "foobar baz" = $1* ]] && suggestion="foobar baz" }' } + let(:foobaz_strategy) { '_zsh_autosuggest_strategy_foobaz() { [[ "foobaz bar" = $1* ]] && suggestion="foobaz bar" }' } + + let(:after_sourcing) do + -> do + session.run_command(history_strategy) + end + end + + it 'by default is determined by calling the `history` strategy function' do + session.send_string('h') + wait_for { session.content }.to eq('history') + end + + context 'when ZSH_AUTOSUGGEST_STRATEGY is set to an array' do + let(:after_sourcing) do + -> do + session. + run_command(foobar_strategy). + run_command(foobaz_strategy). + run_command('ZSH_AUTOSUGGEST_STRATEGY=(foobar foobaz)') + end + end + + it 'is determined by the first strategy function to return a suggestion' do + session.send_string('foo') + wait_for { session.content }.to eq('foobar baz') + + session.send_string('baz') + wait_for { session.content }.to eq('foobaz bar') + end + end + + context 'when ZSH_AUTOSUGGEST_STRATEGY is set to a string' do + let(:after_sourcing) do + -> do + session. + run_command(foobar_strategy). + run_command(foobaz_strategy). + run_command('ZSH_AUTOSUGGEST_STRATEGY="foobar foobaz"') + end + end + + it 'is determined by the first strategy function to return a suggestion' do + session.send_string('foo') + wait_for { session.content }.to eq('foobar baz') + + session.send_string('baz') + wait_for { session.content }.to eq('foobaz bar') + end + end +end + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/use_async_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/use_async_spec.rb new file mode 100644 index 00000000..420dcc30 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/use_async_spec.rb @@ -0,0 +1,7 @@ +describe 'suggestion fetching' do + it 'is performed synchronously' + + context 'when ZSH_AUTOSUGGEST_USE_ASYNC is set' do + it 'is performed asynchronously' + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/widget_lists_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/widget_lists_spec.rb new file mode 100644 index 00000000..421b84e4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_options/widget_lists_spec.rb @@ -0,0 +1,121 @@ +describe 'a zle widget' do + let(:widget) { 'my-widget' } + let(:before_sourcing) { -> { session.run_command("#{widget}() {}; zle -N #{widget}; bindkey ^B #{widget}") } } + + context 'when added to ZSH_AUTOSUGGEST_ACCEPT_WIDGETS' do + let(:options) { ["ZSH_AUTOSUGGEST_ACCEPT_WIDGETS+=(#{widget})"] } + + it 'accepts the suggestion and moves the cursor to the end of the buffer when invoked' do + with_history('echo hello') do + session.send_string('e') + wait_for { session.content }.to eq('echo hello') + session.send_keys('C-b') + wait_for { session.content(esc_seqs: true) }.to eq('echo hello') + wait_for { session.cursor }.to eq([10, 0]) + end + end + end + + context 'when added to ZSH_AUTOSUGGEST_CLEAR_WIDGETS' do + let(:options) { ["ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(#{widget})"] } + + it 'clears the suggestion when invoked' do + with_history('echo hello') do + session.send_string('e') + wait_for { session.content }.to eq('echo hello') + session.send_keys('C-b') + wait_for { session.content }.to eq('e') + end + end + end + + context 'when added to ZSH_AUTOSUGGEST_EXECUTE_WIDGETS' do + let(:options) { ["ZSH_AUTOSUGGEST_EXECUTE_WIDGETS+=(#{widget})"] } + + it 'executes the suggestion when invoked' do + with_history('echo hello') do + session.send_string('e') + wait_for { session.content }.to eq('echo hello') + session.send_keys('C-b') + wait_for { session.content }.to end_with("\nhello") + end + end + end + + context 'when added to ZSH_AUTOSUGGEST_IGNORE_WIDGETS' do + let(:options) { ["ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(#{widget})"] } + + it 'should not be wrapped with an autosuggest widget' do + session.run_command("echo $widgets[#{widget}]") + wait_for { session.content }.to end_with("\nuser:#{widget}") + end + end + + context 'that moves the cursor forward' do + before { session.run_command("#{widget}() { zle forward-char }") } + + context 'when added to ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS' do + let(:options) { ["ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=(#{widget})"] } + + it 'accepts the suggestion as far as the cursor is moved when invoked' do + with_history('echo hello') do + session.send_string('e') + wait_for { session.content }.to start_with('echo hello') + session.send_keys('C-b') + wait_for { session.content(esc_seqs: true) }.to match(/\Aec\e\[[0-9]+mho hello/) + end + end + end + end + + context 'that modifies the buffer' do + before { session.run_command("#{widget}() { BUFFER=\"foo\" }") } + + context 'when not added to any of the widget lists' do + it 'modifies the buffer and fetches a new suggestion' do + with_history('foobar') do + session.send_keys('C-b') + wait_for { session.content }.to eq('foobar') + end + end + end + end +end + +describe 'a modification to the widget lists' do + let(:widget) { 'my-widget' } + let(:before_sourcing) { -> { session.run_command("#{widget}() {}; zle -N #{widget}; bindkey ^B #{widget}") } } + before { session.run_command("ZSH_AUTOSUGGEST_ACCEPT_WIDGETS+=(#{widget})") } + + it 'takes effect on the next cmd line' do + with_history('echo hello') do + session.send_string('e') + wait_for { session.content }.to eq('echo hello') + session.send_keys('C-b') + wait_for { session.content(esc_seqs: true) }.to eq('echo hello') + end + end + + context 'when manual rebind is enabled' do + let(:options) { ["ZSH_AUTOSUGGEST_MANUAL_REBIND=true"] } + + it 'does not take effect until bind command is re-run' do + with_history('echo hello') do + session.send_string('e') + wait_for { session.content }.to eq('echo hello') + session.send_keys('C-b') + sleep 1 + expect(session.content(esc_seqs: true)).not_to eq('echo hello') + + session.send_keys('C-c') + session.run_command('_zsh_autosuggest_bind_widgets').clear_screen + wait_for { session.content }.to eq('') + + session.send_string('e') + wait_for { session.content }.to eq('echo hello') + session.send_keys('C-b') + wait_for { session.content(esc_seqs: true) }.to eq('echo hello') + end + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/completion_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/completion_spec.rb new file mode 100644 index 00000000..92794d6a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/completion_spec.rb @@ -0,0 +1,72 @@ +describe 'the `completion` suggestion strategy' do + let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=completion'] } + let(:before_sourcing) do + -> do + session. + run_command('autoload compinit && compinit'). + run_command('_foo() { compadd bar; compadd bat }'). + run_command('_num() { compadd two; compadd three }'). + run_command('compdef _foo baz'). + run_command('compdef _num one') + end + end + + it 'suggests the first completion result' do + session.send_string('baz ') + wait_for { session.content }.to eq('baz bar') + end + + it 'does not add extra carriage returns when prefix has a line feed' do + skip '`stty` does not work inside zpty below zsh version 5.0.3' if session.zsh_version < Gem::Version.new('5.0.3') + session.send_string('baz \\').send_keys('C-v', 'C-j') + wait_for { session.content }.to eq("baz \\\nbar") + end + + context 'when `_complete` is aliased' do + let(:before_sourcing) do + -> do + session. + run_command('autoload compinit && compinit'). + run_command('_foo() { compadd bar; compadd bat }'). + run_command('compdef _foo baz'). + run_command('alias _complete=_complete') + end + end + + it 'suggests the first completion result' do + session.send_string('baz ') + wait_for { session.content }.to eq('baz bar') + end + end + + context 'when ZSH_AUTOSUGGEST_COMPLETION_IGNORE is set to a pattern' do + let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=completion', 'ZSH_AUTOSUGGEST_COMPLETION_IGNORE="one *"'] } + + it 'makes suggestions when the buffer does not match the pattern' do + session.send_string('baz ') + wait_for { session.content }.to eq('baz bar') + end + + it 'does not make suggestions when the buffer matches the pattern' do + session.send_string('one t') + sleep 1 + expect(session.content).to eq('one t') + end + end + + context 'when async mode is enabled' do + let(:options) { ['ZSH_AUTOSUGGEST_USE_ASYNC=true', 'ZSH_AUTOSUGGEST_STRATEGY=completion'] } + + it 'suggests the first completion result' do + session.send_string('baz ') + wait_for { session.content }.to eq('baz bar') + end + + it 'does not add extra carriage returns when prefix has a line feed' do + skip '`stty` does not work inside zpty below zsh version 5.0.3' if session.zsh_version < Gem::Version.new('5.0.3') + session.send_string('baz \\').send_keys('C-v', 'C-j') + wait_for { session.content }.to eq("baz \\\nbar") + end + end +end + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/history_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/history_spec.rb new file mode 100644 index 00000000..eee8efdf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/history_spec.rb @@ -0,0 +1,23 @@ +require 'strategies/special_characters_helper' + +describe 'the `history` suggestion strategy' do + it 'suggests the last matching history entry' do + with_history('ls foo', 'ls bar', 'echo baz') do + session.send_string('ls') + wait_for { session.content }.to eq('ls bar') + end + end + + context 'when ZSH_AUTOSUGGEST_HISTORY_IGNORE is set to a pattern' do + let(:options) { ['ZSH_AUTOSUGGEST_HISTORY_IGNORE="* bar"'] } + + it 'does not make suggestions that match the pattern' do + with_history('ls foo', 'ls bar', 'echo baz') do + session.send_string('ls') + wait_for { session.content }.to eq('ls foo') + end + end + end + + include_examples 'special characters' +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/match_prev_cmd_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/match_prev_cmd_spec.rb new file mode 100644 index 00000000..c435f162 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/match_prev_cmd_spec.rb @@ -0,0 +1,34 @@ +require 'strategies/special_characters_helper' + +describe 'the `match_prev_cmd` strategy' do + let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd'] } + + let(:history) { [ + 'echo what', + 'ls foo', + 'echo what', + 'ls bar', + 'ls baz', + 'echo what' + ] } + + it 'suggests the last matching history entry after the previous command' do + with_history(*history) do + session.send_string('ls') + wait_for { session.content }.to eq('ls bar') + end + end + + context 'when ZSH_AUTOSUGGEST_HISTORY_IGNORE is set to a pattern' do + let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd', 'ZSH_AUTOSUGGEST_HISTORY_IGNORE="* bar"'] } + + it 'does not make suggestions that match the pattern' do + with_history(*history) do + session.send_string('ls') + wait_for { session.content }.to eq('ls foo') + end + end + end + + include_examples 'special characters' +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/special_characters_helper.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/special_characters_helper.rb new file mode 100644 index 00000000..8771861f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/special_characters_helper.rb @@ -0,0 +1,62 @@ +shared_examples 'special characters' do + describe 'a special character in the buffer' do + it 'should be treated like any other character' do + with_history('echo "hello*"', 'echo "hello."') do + session.send_string('echo "hello*') + wait_for { session.content }.to eq('echo "hello*"') + end + + with_history('echo "hello?"', 'echo "hello."') do + session.send_string('echo "hello?') + wait_for { session.content }.to eq('echo "hello?"') + end + + with_history('echo "hello\nworld"') do + session.send_string('echo "hello\\') + wait_for { session.content }.to eq('echo "hello\nworld"') + end + + with_history('echo "\\\\"') do + session.send_string('echo "\\\\') + wait_for { session.content }.to eq('echo "\\\\"') + end + + with_history('echo ~/foo') do + session.send_string('echo ~') + wait_for { session.content }.to eq('echo ~/foo') + end + + with_history('echo "$(ls foo)"') do + session.send_string('echo "$(') + wait_for { session.content }.to eq('echo "$(ls foo)"') + end + + with_history('echo "$history[123]"') do + session.send_string('echo "$history[') + wait_for { session.content }.to eq('echo "$history[123]"') + session.send_string('123]') + wait_for { session.content }.to eq('echo "$history[123]"') + end + + with_history('echo "#yolo"') do + session.send_string('echo "#') + wait_for { session.content }.to eq('echo "#yolo"') + end + + with_history('echo "#foo"', 'echo $#abc') do + session.send_string('echo "#') + wait_for { session.content }.to eq('echo "#foo"') + end + + with_history('echo "^A"', 'echo "^B"') do + session.send_string('echo "^A') + wait_for { session.content }.to eq('echo "^A"') + end + + with_history('-foo() {}') do + session.send_string('-') + wait_for { session.content }.to eq('-foo() {}') + end + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/disable_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/disable_spec.rb new file mode 100644 index 00000000..b387a590 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/disable_spec.rb @@ -0,0 +1,19 @@ +describe 'the `autosuggest-disable` widget' do + before do + session.run_command('bindkey ^B autosuggest-disable') + end + + it 'disables suggestions and clears the suggestion' do + with_history('echo hello') do + session.send_string('echo') + wait_for { session.content }.to eq('echo hello') + + session.send_keys('C-b') + wait_for { session.content }.to eq('echo') + + session.send_string(' h') + sleep 1 + expect(session.content).to eq('echo h') + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/enable_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/enable_spec.rb new file mode 100644 index 00000000..3ad35a8c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/enable_spec.rb @@ -0,0 +1,42 @@ +describe 'the `autosuggest-enable` widget' do + before do + session. + run_command('typeset -g _ZSH_AUTOSUGGEST_DISABLED'). + run_command('bindkey ^B autosuggest-enable') + end + + it 'enables suggestions and fetches a suggestion' do + with_history('echo hello') do + session.send_string('e') + sleep 1 + expect(session.content).to eq('e') + + session.send_keys('C-b') + session.send_string('c') + wait_for { session.content }.to eq('echo hello') + end + end + + context 'invoked on an empty buffer' do + it 'does not fetch a suggestion' do + with_history('echo hello') do + session.send_keys('C-b') + sleep 1 + expect(session.content).to eq('') + end + end + end + + context 'invoked on a non-empty buffer' do + it 'fetches a suggestion' do + with_history('echo hello') do + session.send_string('e') + sleep 1 + expect(session.content).to eq('e') + + session.send_keys('C-b') + wait_for { session.content }.to eq('echo hello') + end + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/fetch_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/fetch_spec.rb new file mode 100644 index 00000000..eb8f2ba5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/fetch_spec.rb @@ -0,0 +1,24 @@ +describe 'the `autosuggest-fetch` widget' do + context 'when suggestions are disabled' do + before do + session. + run_command('bindkey ^B autosuggest-disable'). + run_command('bindkey ^F autosuggest-fetch'). + send_keys('C-b') + end + + it 'will fetch and display a suggestion' do + with_history('echo hello') do + session.send_string('echo h') + sleep 1 + expect(session.content).to eq('echo h') + + session.send_keys('C-f') + wait_for { session.content }.to eq('echo hello') + + session.send_string('e') + wait_for { session.content }.to eq('echo hello') + end + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/toggle_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/toggle_spec.rb new file mode 100644 index 00000000..8f9f3c3d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_widgets/toggle_spec.rb @@ -0,0 +1,26 @@ +describe 'the `autosuggest-toggle` widget' do + before do + session.run_command('bindkey ^B autosuggest-toggle') + end + + it 'toggles suggestions' do + with_history('echo world', 'echo hello') do + session.send_string('echo') + wait_for { session.content }.to eq('echo hello') + + session.send_keys('C-b') + wait_for { session.content }.to eq('echo') + + session.send_string(' h') + sleep 1 + expect(session.content).to eq('echo h') + + session.send_keys('C-b') + wait_for { session.content }.to eq('echo hello') + + session.send_keys('C-h') + session.send_string('w') + wait_for { session.content }.to eq('echo world') + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/kill_ring_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/kill_ring_spec.rb new file mode 100644 index 00000000..4d0178f9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/kill_ring_spec.rb @@ -0,0 +1,23 @@ +context 'with some items in the kill ring' do + before do + session. + send_string('echo foo'). + send_keys('C-u'). + send_string('echo bar'). + send_keys('C-u') + end + + describe '`yank-pop`' do + it 'should cycle through all items in the kill ring' do + session.send_keys('C-y') + wait_for { session.content }.to eq('echo bar') + + session.send_keys('escape').send_keys('y') + wait_for { session.content }.to eq('echo foo') + + session.send_keys('escape').send_keys('y') + wait_for { session.content }.to eq('echo bar') + end + end +end + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/line_init_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/line_init_spec.rb new file mode 100644 index 00000000..826277fc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/line_init_spec.rb @@ -0,0 +1,17 @@ +context 'with zle-line-init unignored' do + let(:after_sourcing) do + -> do + session. + run_command('setopt extendedglob'). + run_command('ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(${(@)ZSH_AUTOSUGGEST_IGNORE_WIDGETS:#zle-\*} zle-\^line-init)'). + run_command('zle-line-init() { BUFFER="echo" }') + end + end + + it 'should fetch a suggestion on each line initialization' do + with_history('echo foo') do + session.run_command('zle -N zle-line-init') + wait_for { session.content }.to end_with('echo foo') + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/multi_line_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/multi_line_spec.rb new file mode 100644 index 00000000..4ff2ae12 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/multi_line_spec.rb @@ -0,0 +1,13 @@ +describe 'a multi-line suggestion' do + it 'should be displayed on multiple lines' do + with_history(-> { + session.send_string('echo "') + session.send_keys('enter') + session.send_string('"') + session.send_keys('enter') + }) do + session.send_keys('e') + wait_for { session.content }.to eq("echo \"\n\"") + end + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/spec_helper.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/spec_helper.rb new file mode 100644 index 00000000..cb149ef1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/spec_helper.rb @@ -0,0 +1,51 @@ +require 'pry' +require 'rspec/wait' +require 'terminal_session' + +RSpec.shared_context 'terminal session' do + let(:term_opts) { {} } + let(:session) { TerminalSession.new(term_opts) } + let(:before_sourcing) { -> {} } + let(:after_sourcing) { -> {} } + let(:options) { [] } + + around do |example| + before_sourcing.call + session.run_command(['source zsh-autosuggestions.zsh', *options].join('; ')) + after_sourcing.call + session.clear_screen + + example.run + + session.destroy + end + + def with_history(*commands, &block) + session.run_command('fc -p') + + commands.each do |c| + c.respond_to?(:call) ? c.call : session.run_command(c) + end + + session.clear_screen + + yield block + + session.send_keys('C-c') + session.run_command('fc -P') + end +end + +RSpec.configure do |config| + config.expect_with :rspec do |expectations| + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + config.mock_with :rspec do |mocks| + mocks.verify_partial_doubles = true + end + + config.wait_timeout = 2 + + config.include_context 'terminal session' +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/terminal_session.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/terminal_session.rb new file mode 100644 index 00000000..f91ee6cd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/terminal_session.rb @@ -0,0 +1,99 @@ +require 'securerandom' + +class TerminalSession + ZSH_BIN = ENV['TEST_ZSH_BIN'] || 'zsh' + + def initialize(opts = {}) + opts = { + width: 80, + height: 24, + prompt: '', + term: 'xterm-256color', + zsh_bin: ZSH_BIN + }.merge(opts) + + @opts = opts + + cmd="PS1=\"#{opts[:prompt]}\" TERM=#{opts[:term]} #{ZSH_BIN} -f" + tmux_command("new-session -d -x #{opts[:width]} -y #{opts[:height]} '#{cmd}'") + end + + def zsh_version + @zsh_version ||= Gem::Version.new(`#{ZSH_BIN} -c 'echo -n $ZSH_VERSION'`) + end + + def tmux_socket_name + @tmux_socket_name ||= SecureRandom.hex(6) + end + + def run_command(command) + send_string(command) + send_keys('enter') + + self + end + + def send_string(str) + tmux_command("send-keys -t 0 -l -- '#{str.gsub("'", "\\'")}'") + + self + end + + def send_keys(*keys) + tmux_command("send-keys -t 0 #{keys.join(' ')}") + + self + end + + def paste_string(str) + tmux_command("set-buffer -- '#{str}'") + tmux_command("paste-buffer -dpr -t 0") + + self + end + + def content(esc_seqs: false) + cmd = 'capture-pane -p -t 0' + cmd += ' -e' if esc_seqs + tmux_command(cmd).strip + end + + def clear_screen + send_keys('C-l') + + i = 0 + until content == opts[:prompt] || i > 20 do + sleep(0.1) + i = i + 1 + end + + self + end + + def destroy + tmux_command('kill-session') + end + + def cursor + tmux_command("display-message -t 0 -p '\#{cursor_x},\#{cursor_y}'"). + strip. + split(','). + map(&:to_i) + end + + def attach! + tmux_command('attach-session') + end + + private + + attr_reader :opts + + def tmux_command(cmd) + out = `tmux -u -L #{tmux_socket_name} #{cmd}` + + raise("tmux error running: '#{cmd}'") unless $?.success? + + out + end +end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/async.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/async.zsh new file mode 100644 index 00000000..4314e8c6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/async.zsh @@ -0,0 +1,75 @@ + +#--------------------------------------------------------------------# +# Async # +#--------------------------------------------------------------------# + +_zsh_autosuggest_async_request() { + zmodload zsh/system 2>/dev/null # For `$sysparams` + + typeset -g _ZSH_AUTOSUGGEST_ASYNC_FD _ZSH_AUTOSUGGEST_CHILD_PID + + # If we've got a pending request, cancel it + if [[ -n "$_ZSH_AUTOSUGGEST_ASYNC_FD" ]] && { true <&$_ZSH_AUTOSUGGEST_ASYNC_FD } 2>/dev/null; then + # Close the file descriptor and remove the handler + exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&- + zle -F $_ZSH_AUTOSUGGEST_ASYNC_FD + + # We won't know the pid unless the user has zsh/system module installed + if [[ -n "$_ZSH_AUTOSUGGEST_CHILD_PID" ]]; then + # 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 suggestion strategy + kill -TERM -$_ZSH_AUTOSUGGEST_CHILD_PID 2>/dev/null + else + # Kill just the child process since it wasn't placed in a new process + # group. If the suggestion strategy forked any child processes they may + # be orphaned and left behind. + kill -TERM $_ZSH_AUTOSUGGEST_CHILD_PID 2>/dev/null + fi + fi + fi + + # Fork a process to fetch a suggestion and open a pipe to read from it + exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <( + # Tell parent process our pid + echo $sysparams[pid] + + # Fetch and print the suggestion + local suggestion + _zsh_autosuggest_fetch_suggestion "$1" + echo -nE "$suggestion" + ) + + # 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 + + # Read the pid from the child process + read _ZSH_AUTOSUGGEST_CHILD_PID <&$_ZSH_AUTOSUGGEST_ASYNC_FD + + # When the fd is readable, call the response handler + zle -F "$_ZSH_AUTOSUGGEST_ASYNC_FD" _zsh_autosuggest_async_response +} + +# Called when new data is ready to be read from the pipe +# First arg will be fd ready for reading +# Second arg will be passed in case of error +_zsh_autosuggest_async_response() { + emulate -L zsh + + local suggestion + + if [[ -z "$2" || "$2" == "hup" ]]; then + # Read everything from the fd and give it as a suggestion + IFS='' read -rd '' -u $1 suggestion + zle autosuggest-suggest -- "$suggestion" + + # Close the fd + exec {1}<&- + fi + + # Always remove the handler + zle -F "$1" +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/bind.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/bind.zsh new file mode 100644 index 00000000..fc2da9e2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/bind.zsh @@ -0,0 +1,106 @@ + +#--------------------------------------------------------------------# +# Widget Helpers # +#--------------------------------------------------------------------# + +_zsh_autosuggest_incr_bind_count() { + typeset -gi bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]+1)) + _ZSH_AUTOSUGGEST_BIND_COUNTS[$1]=$bind_count +} + +# Bind a single widget to an autosuggest widget, saving a reference to the original widget +_zsh_autosuggest_bind_widget() { + typeset -gA _ZSH_AUTOSUGGEST_BIND_COUNTS + + local widget=$1 + local autosuggest_action=$2 + local prefix=$ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX + + local -i bind_count + + # Save a reference to the original widget + case $widgets[$widget] in + # Already bound + user:_zsh_autosuggest_(bound|orig)_*) + bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$widget])) + ;; + + # User-defined widget + user:*) + _zsh_autosuggest_incr_bind_count $widget + zle -N $prefix$bind_count-$widget ${widgets[$widget]#*:} + ;; + + # Built-in widget + builtin) + _zsh_autosuggest_incr_bind_count $widget + eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }" + zle -N $prefix$bind_count-$widget _zsh_autosuggest_orig_$widget + ;; + + # Completion widget + completion:*) + _zsh_autosuggest_incr_bind_count $widget + eval "zle -C $prefix$bind_count-${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}" + ;; + esac + + # Pass the original widget's name explicitly into the autosuggest + # function. Use this passed in widget name to call the original + # widget instead of relying on the $WIDGET variable being set + # correctly. $WIDGET cannot be trusted because other plugins call + # zle without the `-w` flag (e.g. `zle self-insert` instead of + # `zle self-insert -w`). + eval "_zsh_autosuggest_bound_${bind_count}_${(q)widget}() { + _zsh_autosuggest_widget_$autosuggest_action $prefix$bind_count-${(q)widget} \$@ + }" + + # Create the bound widget + zle -N -- $widget _zsh_autosuggest_bound_${bind_count}_$widget +} + +# Map all configured widgets to the right autosuggest widgets +_zsh_autosuggest_bind_widgets() { + emulate -L zsh + + local widget + local ignore_widgets + + ignore_widgets=( + .\* + _\* + autosuggest-\* + $ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX\* + $ZSH_AUTOSUGGEST_IGNORE_WIDGETS + ) + + # Find every widget we might want to bind and bind it appropriately + for widget in ${${(f)"$(builtin zle -la)"}:#${(j:|:)~ignore_widgets}}; do + if [[ -n ${ZSH_AUTOSUGGEST_CLEAR_WIDGETS[(r)$widget]} ]]; then + _zsh_autosuggest_bind_widget $widget clear + elif [[ -n ${ZSH_AUTOSUGGEST_ACCEPT_WIDGETS[(r)$widget]} ]]; then + _zsh_autosuggest_bind_widget $widget accept + elif [[ -n ${ZSH_AUTOSUGGEST_EXECUTE_WIDGETS[(r)$widget]} ]]; then + _zsh_autosuggest_bind_widget $widget execute + elif [[ -n ${ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS[(r)$widget]} ]]; then + _zsh_autosuggest_bind_widget $widget partial_accept + else + # Assume any unspecified widget might modify the buffer + _zsh_autosuggest_bind_widget $widget modify + fi + done +} + +# Given the name of an original widget and args, invoke it, if it exists +_zsh_autosuggest_invoke_original_widget() { + # Do nothing unless called with at least one arg + (( $# )) || return 0 + + local original_widget_name="$1" + + shift + + if (( ${+widgets[$original_widget_name]} )); then + zle $original_widget_name -- $@ + fi +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/config.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/config.zsh new file mode 100644 index 00000000..5a0ebd85 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/config.zsh @@ -0,0 +1,93 @@ + +#--------------------------------------------------------------------# +# Global Configuration Variables # +#--------------------------------------------------------------------# + +# Color to use when highlighting suggestion +# Uses format of `region_highlight` +# More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets +(( ! ${+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE} )) && +typeset -g ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' + +# Prefix to use when saving original versions of bound widgets +(( ! ${+ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX} )) && +typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig- + +# Strategies to use to fetch a suggestion +# Will try each strategy in order until a suggestion is returned +(( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && { + typeset -ga ZSH_AUTOSUGGEST_STRATEGY + ZSH_AUTOSUGGEST_STRATEGY=(history) +} + +# Widgets that clear the suggestion +(( ! ${+ZSH_AUTOSUGGEST_CLEAR_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_CLEAR_WIDGETS + ZSH_AUTOSUGGEST_CLEAR_WIDGETS=( + history-search-forward + history-search-backward + history-beginning-search-forward + history-beginning-search-backward + history-substring-search-up + history-substring-search-down + up-line-or-beginning-search + down-line-or-beginning-search + up-line-or-history + down-line-or-history + accept-line + copy-earlier-word + ) +} + +# Widgets that accept the entire suggestion +(( ! ${+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_ACCEPT_WIDGETS + ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=( + forward-char + end-of-line + vi-forward-char + vi-end-of-line + vi-add-eol + ) +} + +# Widgets that accept the entire suggestion and execute it +(( ! ${+ZSH_AUTOSUGGEST_EXECUTE_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_EXECUTE_WIDGETS + ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=( + ) +} + +# Widgets that accept the suggestion as far as the cursor moves +(( ! ${+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS + ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=( + forward-word + emacs-forward-word + vi-forward-word + vi-forward-word-end + vi-forward-blank-word + vi-forward-blank-word-end + vi-find-next-char + vi-find-next-char-skip + ) +} + +# Widgets that should be ignored (globbing supported but must be escaped) +(( ! ${+ZSH_AUTOSUGGEST_IGNORE_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_IGNORE_WIDGETS + ZSH_AUTOSUGGEST_IGNORE_WIDGETS=( + orig-\* + beep + run-help + set-local-history + which-command + yank + yank-pop + zle-\* + ) +} + +# Pty name for capturing completions for completion suggestion strategy +(( ! ${+ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME} )) && +typeset -g ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME=zsh_autosuggest_completion_pty diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/completion.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/completion.zsh new file mode 100644 index 00000000..4290f0cc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/completion.zsh @@ -0,0 +1,139 @@ + +#--------------------------------------------------------------------# +# Completion Suggestion Strategy # +#--------------------------------------------------------------------# +# Fetches a suggestion from the completion engine +# + +_zsh_autosuggest_capture_postcompletion() { + # Always insert the first completion into the buffer + compstate[insert]=1 + + # Don't list completions + unset 'compstate[list]' +} + +_zsh_autosuggest_capture_completion_widget() { + # Add a post-completion hook to be called after all completions have been + # gathered. The hook can modify compstate to affect what is done with the + # gathered completions. + local -a +h comppostfuncs + comppostfuncs=(_zsh_autosuggest_capture_postcompletion) + + # Only capture completions at the end of the buffer + CURSOR=$#BUFFER + + # Run the original widget wrapping `.complete-word` so we don't + # recursively try to fetch suggestions, since our pty is forked + # after autosuggestions is initialized. + zle -- ${(k)widgets[(r)completion:.complete-word:_main_complete]} + + if is-at-least 5.0.3; then + # Don't do any cr/lf transformations. We need to do this immediately before + # output because if we do it in setup, onlcr will be re-enabled when we enter + # vared in the async code path. There is a bug in zpty module in older versions + # where the tty is not properly attached to the pty slave, resulting in stty + # getting stopped with a SIGTTOU. See zsh-workers thread 31660 and upstream + # commit f75904a38 + stty -onlcr -ocrnl -F /dev/tty + fi + + # The completion has been added, print the buffer as the suggestion + echo -nE - $'\0'$BUFFER$'\0' +} + +zle -N autosuggest-capture-completion _zsh_autosuggest_capture_completion_widget + +_zsh_autosuggest_capture_setup() { + autoload -Uz is-at-least + + # There is a bug in zpty module in older zsh versions by which a + # zpty that exits will kill all zpty processes that were forked + # before it. Here we set up a zsh exit hook to SIGKILL the zpty + # process immediately, before it has a chance to kill any other + # zpty processes. + if ! is-at-least 5.4; then + zshexit() { + # The zsh builtin `kill` fails sometimes in older versions + # https://unix.stackexchange.com/a/477647/156673 + kill -KILL $$ 2>&- || command kill -KILL $$ + + # Block for long enough for the signal to come through + sleep 1 + } + fi + + # Try to avoid any suggestions that wouldn't match the prefix + zstyle ':completion:*' matcher-list '' + zstyle ':completion:*' path-completion false + zstyle ':completion:*' max-errors 0 not-numeric + + bindkey '^I' autosuggest-capture-completion +} + +_zsh_autosuggest_capture_completion_sync() { + _zsh_autosuggest_capture_setup + + zle autosuggest-capture-completion +} + +_zsh_autosuggest_capture_completion_async() { + _zsh_autosuggest_capture_setup + + zmodload zsh/parameter 2>/dev/null || return # For `$functions` + + # Make vared completion work as if for a normal command line + # https://stackoverflow.com/a/7057118/154703 + autoload +X _complete + functions[_original_complete]=$functions[_complete] + function _complete() { + unset 'compstate[vared]' + _original_complete "$@" + } + + # Open zle with buffer set so we can capture completions for it + vared 1 +} + +_zsh_autosuggest_strategy_completion() { + # Reset options to defaults and enable LOCAL_OPTIONS + emulate -L zsh + + # Enable extended glob for completion ignore pattern + setopt EXTENDED_GLOB + + typeset -g suggestion + local line REPLY + + # Exit if we don't have completions + whence compdef >/dev/null || return + + # Exit if we don't have zpty + zmodload zsh/zpty 2>/dev/null || return + + # Exit if our search string matches the ignore pattern + [[ -n "$ZSH_AUTOSUGGEST_COMPLETION_IGNORE" ]] && [[ "$1" == $~ZSH_AUTOSUGGEST_COMPLETION_IGNORE ]] && return + + # Zle will be inactive if we are in async mode + if zle; then + zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync + else + zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_async "\$1" + zpty -w $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME $'\t' + fi + + { + # The completion result is surrounded by null bytes, so read the + # content between the first two null bytes. + zpty -r $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME line '*'$'\0''*'$'\0' + + # Extract the suggestion from between the null bytes. On older + # versions of zsh (older than 5.3), we sometimes get extra bytes after + # the second null byte, so trim those off the end. + # See http://www.zsh.org/mla/workers/2015/msg03290.html + suggestion="${${(@0)line}[2]}" + } always { + # Destroy the pty + zpty -d $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME + } +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/history.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/history.zsh new file mode 100644 index 00000000..0672a136 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/history.zsh @@ -0,0 +1,32 @@ + +#--------------------------------------------------------------------# +# History Suggestion Strategy # +#--------------------------------------------------------------------# +# Suggests the most recent history item that matches the given +# prefix. +# + +_zsh_autosuggest_strategy_history() { + # Reset options to defaults and enable LOCAL_OPTIONS + emulate -L zsh + + # Enable globbing flags so that we can use (#m) and (x~y) glob operator + setopt EXTENDED_GLOB + + # Escape backslashes and all of the glob operators so we can use + # this string as a pattern to search the $history associative array. + # - (#m) globbing flag enables setting references for match data + # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8 + local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}" + + # Get the history items that match the prefix, excluding those that match + # the ignore pattern + local pattern="$prefix*" + if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then + pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)" + fi + + # Give the first history item matching the pattern as the suggestion + # - (r) subscript flag makes the pattern match on values + typeset -g suggestion="${history[(r)$pattern]}" +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/match_prev_cmd.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/match_prev_cmd.zsh new file mode 100644 index 00000000..b7097837 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/match_prev_cmd.zsh @@ -0,0 +1,66 @@ + +#--------------------------------------------------------------------# +# Match Previous Command Suggestion Strategy # +#--------------------------------------------------------------------# +# Suggests the most recent history item that matches the given +# prefix and whose preceding history item also matches the most +# recently executed command. +# +# For example, suppose your history has the following entries: +# - pwd +# - ls foo +# - ls bar +# - pwd +# +# Given the history list above, when you type 'ls', the suggestion +# will be 'ls foo' rather than 'ls bar' because your most recently +# executed command (pwd) was previously followed by 'ls foo'. +# +# Note that this strategy won't work as expected with ZSH options that don't +# preserve the history order such as `HIST_IGNORE_ALL_DUPS` or +# `HIST_EXPIRE_DUPS_FIRST`. + +_zsh_autosuggest_strategy_match_prev_cmd() { + # Reset options to defaults and enable LOCAL_OPTIONS + emulate -L zsh + + # Enable globbing flags so that we can use (#m) and (x~y) glob operator + setopt EXTENDED_GLOB + + # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8 + local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}" + + # Get the history items that match the prefix, excluding those that match + # the ignore pattern + local pattern="$prefix*" + if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then + pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)" + fi + + # Get all history event numbers that correspond to history + # entries that match the pattern + local history_match_keys + history_match_keys=(${(k)history[(R)$~pattern]}) + + # By default we use the first history number (most recent history entry) + local histkey="${history_match_keys[1]}" + + # Get the previously executed command + local prev_cmd="$(_zsh_autosuggest_escape_command "${history[$((HISTCMD-1))]}")" + + # Iterate up to the first 200 history event numbers that match $prefix + for key in "${(@)history_match_keys[1,200]}"; do + # Stop if we ran out of history + [[ $key -gt 1 ]] || break + + # See if the history entry preceding the suggestion matches the + # previous command, and use it if it does + if [[ "${history[$((key - 1))]}" == "$prev_cmd" ]]; then + histkey="$key" + break + fi + done + + # Give back the matched history entry + typeset -g suggestion="$history[$histkey]" +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/fetch.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/fetch.zsh new file mode 100644 index 00000000..fef27152 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/fetch.zsh @@ -0,0 +1,27 @@ + +#--------------------------------------------------------------------# +# Fetch Suggestion # +#--------------------------------------------------------------------# +# Loops through all specified strategies and returns a suggestion +# from the first strategy to provide one. +# + +_zsh_autosuggest_fetch_suggestion() { + typeset -g suggestion + local -a strategies + local strategy + + # Ensure we are working with an array + strategies=(${=ZSH_AUTOSUGGEST_STRATEGY}) + + for strategy in $strategies; do + # Try to get a suggestion from this strategy + _zsh_autosuggest_strategy_$strategy "$1" + + # Ensure the suggestion matches the prefix + [[ "$suggestion" != "$1"* ]] && unset suggestion + + # Break once we've found a valid suggestion + [[ -n "$suggestion" ]] && break + done +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/highlight.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/highlight.zsh new file mode 100644 index 00000000..273c03d5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/highlight.zsh @@ -0,0 +1,26 @@ + +#--------------------------------------------------------------------# +# Highlighting # +#--------------------------------------------------------------------# + +# If there was a highlight, remove it +_zsh_autosuggest_highlight_reset() { + typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT + + if [[ -n "$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT" ]]; then + region_highlight=("${(@)region_highlight:#$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT}") + unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT + fi +} + +# If there's a suggestion, highlight it +_zsh_autosuggest_highlight_apply() { + typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT + + if (( $#POSTDISPLAY )); then + typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="$#BUFFER $(($#BUFFER + $#POSTDISPLAY)) $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE" + region_highlight+=("$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT") + else + unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT + fi +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/start.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/start.zsh new file mode 100644 index 00000000..59910390 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/start.zsh @@ -0,0 +1,23 @@ + +#--------------------------------------------------------------------# +# Start # +#--------------------------------------------------------------------# + +# Start the autosuggestion widgets +_zsh_autosuggest_start() { + # By default we re-bind widgets on every precmd to ensure we wrap other + # wrappers. Specifically, highlighting breaks if our widgets are wrapped by + # zsh-syntax-highlighting widgets. This also allows modifications to the + # widget list variables to take effect on the next precmd. However this has + # a decent performance hit, so users can set ZSH_AUTOSUGGEST_MANUAL_REBIND + # to disable the automatic re-binding. + if (( ${+ZSH_AUTOSUGGEST_MANUAL_REBIND} )); then + add-zsh-hook -d precmd _zsh_autosuggest_start + fi + + _zsh_autosuggest_bind_widgets +} + +# Start the autosuggestion widgets on the next precmd +autoload -Uz add-zsh-hook +add-zsh-hook precmd _zsh_autosuggest_start diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/util.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/util.zsh new file mode 100644 index 00000000..1f55d363 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/util.zsh @@ -0,0 +1,11 @@ + +#--------------------------------------------------------------------# +# Utility Functions # +#--------------------------------------------------------------------# + +_zsh_autosuggest_escape_command() { + setopt localoptions EXTENDED_GLOB + + # Escape special chars in the string (requires EXTENDED_GLOB) + echo -E "${1//(#m)[\"\'\\()\[\]|*?~]/\\$MATCH}" +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/widgets.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/widgets.zsh new file mode 100644 index 00000000..8f097928 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/widgets.zsh @@ -0,0 +1,234 @@ + +#--------------------------------------------------------------------# +# Autosuggest Widget Implementations # +#--------------------------------------------------------------------# + +# Disable suggestions +_zsh_autosuggest_disable() { + typeset -g _ZSH_AUTOSUGGEST_DISABLED + _zsh_autosuggest_clear +} + +# Enable suggestions +_zsh_autosuggest_enable() { + unset _ZSH_AUTOSUGGEST_DISABLED + + if (( $#BUFFER )); then + _zsh_autosuggest_fetch + fi +} + +# Toggle suggestions (enable/disable) +_zsh_autosuggest_toggle() { + if [[ -n "${_ZSH_AUTOSUGGEST_DISABLED+x}" ]]; then + _zsh_autosuggest_enable + else + _zsh_autosuggest_disable + fi +} + +# Clear the suggestion +_zsh_autosuggest_clear() { + # Remove the suggestion + unset POSTDISPLAY + + _zsh_autosuggest_invoke_original_widget $@ +} + +# Modify the buffer and get a new suggestion +_zsh_autosuggest_modify() { + local -i retval + + # Only available in zsh >= 5.4 + local -i KEYS_QUEUED_COUNT + + # Save the contents of the buffer/postdisplay + local orig_buffer="$BUFFER" + local orig_postdisplay="$POSTDISPLAY" + + # Clear suggestion while waiting for next one + unset POSTDISPLAY + + # Original widget may modify the buffer + _zsh_autosuggest_invoke_original_widget $@ + retval=$? + + emulate -L zsh + + # Don't fetch a new suggestion if there's more input to be read immediately + if (( $PENDING > 0 || $KEYS_QUEUED_COUNT > 0 )); then + POSTDISPLAY="$orig_postdisplay" + return $retval + fi + + # Optimize if manually typing in the suggestion + if (( $#BUFFER > $#orig_buffer )); then + local added=${BUFFER#$orig_buffer} + + # If the string added matches the beginning of the postdisplay + if [[ "$added" = "${orig_postdisplay:0:$#added}" ]]; then + POSTDISPLAY="${orig_postdisplay:$#added}" + return $retval + fi + fi + + # Don't fetch a new suggestion if the buffer hasn't changed + if [[ "$BUFFER" = "$orig_buffer" ]]; then + POSTDISPLAY="$orig_postdisplay" + return $retval + fi + + # Bail out if suggestions are disabled + if [[ -n "${_ZSH_AUTOSUGGEST_DISABLED+x}" ]]; then + return $? + fi + + # Get a new suggestion if the buffer is not empty after modification + if (( $#BUFFER > 0 )); then + if [[ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]] || (( $#BUFFER <= $ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE )); then + _zsh_autosuggest_fetch + fi + fi + + return $retval +} + +# Fetch a new suggestion based on what's currently in the buffer +_zsh_autosuggest_fetch() { + if (( ${+ZSH_AUTOSUGGEST_USE_ASYNC} )); then + _zsh_autosuggest_async_request "$BUFFER" + else + local suggestion + _zsh_autosuggest_fetch_suggestion "$BUFFER" + _zsh_autosuggest_suggest "$suggestion" + fi +} + +# Offer a suggestion +_zsh_autosuggest_suggest() { + emulate -L zsh + + local suggestion="$1" + + if [[ -n "$suggestion" ]] && (( $#BUFFER )); then + POSTDISPLAY="${suggestion#$BUFFER}" + else + unset POSTDISPLAY + fi +} + +# Accept the entire suggestion +_zsh_autosuggest_accept() { + local -i retval max_cursor_pos=$#BUFFER + + # When vicmd keymap is active, the cursor can't move all the way + # to the end of the buffer + if [[ "$KEYMAP" = "vicmd" ]]; then + max_cursor_pos=$((max_cursor_pos - 1)) + fi + + # If we're not in a valid state to accept a suggestion, just run the + # original widget and bail out + if (( $CURSOR != $max_cursor_pos || !$#POSTDISPLAY )); then + _zsh_autosuggest_invoke_original_widget $@ + return + fi + + # Only accept if the cursor is at the end of the buffer + # Add the suggestion to the buffer + BUFFER="$BUFFER$POSTDISPLAY" + + # Remove the suggestion + unset POSTDISPLAY + + # Run the original widget before manually moving the cursor so that the + # cursor movement doesn't make the widget do something unexpected + _zsh_autosuggest_invoke_original_widget $@ + retval=$? + + # Move the cursor to the end of the buffer + if [[ "$KEYMAP" = "vicmd" ]]; then + CURSOR=$(($#BUFFER - 1)) + else + CURSOR=$#BUFFER + fi + + return $retval +} + +# Accept the entire suggestion and execute it +_zsh_autosuggest_execute() { + # Add the suggestion to the buffer + BUFFER="$BUFFER$POSTDISPLAY" + + # Remove the suggestion + unset POSTDISPLAY + + # Call the original `accept-line` to handle syntax highlighting or + # other potential custom behavior + _zsh_autosuggest_invoke_original_widget "accept-line" +} + +# Partially accept the suggestion +_zsh_autosuggest_partial_accept() { + local -i retval cursor_loc + + # Save the contents of the buffer so we can restore later if needed + local original_buffer="$BUFFER" + + # Temporarily accept the suggestion. + BUFFER="$BUFFER$POSTDISPLAY" + + # Original widget moves the cursor + _zsh_autosuggest_invoke_original_widget $@ + retval=$? + + # Normalize cursor location across vi/emacs modes + cursor_loc=$CURSOR + if [[ "$KEYMAP" = "vicmd" ]]; then + cursor_loc=$((cursor_loc + 1)) + fi + + # If we've moved past the end of the original buffer + if (( $cursor_loc > $#original_buffer )); then + # Set POSTDISPLAY to text right of the cursor + POSTDISPLAY="${BUFFER[$(($cursor_loc + 1)),$#BUFFER]}" + + # Clip the buffer at the cursor + BUFFER="${BUFFER[1,$cursor_loc]}" + else + # Restore the original buffer + BUFFER="$original_buffer" + fi + + return $retval +} + +() { + local action + for action in clear modify fetch suggest accept partial_accept execute enable disable toggle; do + eval "_zsh_autosuggest_widget_$action() { + local -i retval + + _zsh_autosuggest_highlight_reset + + _zsh_autosuggest_$action \$@ + retval=\$? + + _zsh_autosuggest_highlight_apply + + zle -R + + return \$retval + }" + done + + zle -N autosuggest-fetch _zsh_autosuggest_widget_fetch + zle -N autosuggest-suggest _zsh_autosuggest_widget_suggest + zle -N autosuggest-accept _zsh_autosuggest_widget_accept + zle -N autosuggest-clear _zsh_autosuggest_widget_clear + zle -N autosuggest-execute _zsh_autosuggest_widget_execute + zle -N autosuggest-enable _zsh_autosuggest_widget_enable + zle -N autosuggest-disable _zsh_autosuggest_widget_disable + zle -N autosuggest-toggle _zsh_autosuggest_widget_toggle +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/executable_install_test_zsh.sh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/executable_install_test_zsh.sh new file mode 100644 index 00000000..40dc4c56 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/executable_install_test_zsh.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +set -ex + +for v in $(grep "^[^#]" ZSH_VERSIONS); do + mkdir zsh-$v + cd zsh-$v + + curl -L https://api.github.com/repos/zsh-users/zsh/tarball/zsh-$v | tar xz --strip=1 + + ./Util/preconfig + ./configure --enable-pcre \ + --enable-cap \ + --enable-multibyte \ + --with-term-lib='ncursesw tinfo' \ + --with-tcsetpgrp \ + --program-suffix="-$v" + + make install.bin + make install.modules + make install.fns + + cd .. + + rm -rf zsh-$v +done diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.plugin.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.plugin.zsh new file mode 100644 index 00000000..16c22563 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.plugin.zsh @@ -0,0 +1 @@ +source ${0:A:h}/zsh-autosuggestions.zsh diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.zsh new file mode 100644 index 00000000..a8ef6c41 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.zsh @@ -0,0 +1,858 @@ +# Fish-like fast/unobtrusive autosuggestions for zsh. +# https://github.com/zsh-users/zsh-autosuggestions +# v0.6.4 +# Copyright (c) 2013 Thiago de Arruda +# Copyright (c) 2016-2019 Eric Freese +# +# 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. + +#--------------------------------------------------------------------# +# Global Configuration Variables # +#--------------------------------------------------------------------# + +# Color to use when highlighting suggestion +# Uses format of `region_highlight` +# More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets +(( ! ${+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE} )) && +typeset -g ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' + +# Prefix to use when saving original versions of bound widgets +(( ! ${+ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX} )) && +typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig- + +# Strategies to use to fetch a suggestion +# Will try each strategy in order until a suggestion is returned +(( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && { + typeset -ga ZSH_AUTOSUGGEST_STRATEGY + ZSH_AUTOSUGGEST_STRATEGY=(history) +} + +# Widgets that clear the suggestion +(( ! ${+ZSH_AUTOSUGGEST_CLEAR_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_CLEAR_WIDGETS + ZSH_AUTOSUGGEST_CLEAR_WIDGETS=( + history-search-forward + history-search-backward + history-beginning-search-forward + history-beginning-search-backward + history-substring-search-up + history-substring-search-down + up-line-or-beginning-search + down-line-or-beginning-search + up-line-or-history + down-line-or-history + accept-line + copy-earlier-word + ) +} + +# Widgets that accept the entire suggestion +(( ! ${+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_ACCEPT_WIDGETS + ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=( + forward-char + end-of-line + vi-forward-char + vi-end-of-line + vi-add-eol + ) +} + +# Widgets that accept the entire suggestion and execute it +(( ! ${+ZSH_AUTOSUGGEST_EXECUTE_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_EXECUTE_WIDGETS + ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=( + ) +} + +# Widgets that accept the suggestion as far as the cursor moves +(( ! ${+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS + ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=( + forward-word + emacs-forward-word + vi-forward-word + vi-forward-word-end + vi-forward-blank-word + vi-forward-blank-word-end + vi-find-next-char + vi-find-next-char-skip + ) +} + +# Widgets that should be ignored (globbing supported but must be escaped) +(( ! ${+ZSH_AUTOSUGGEST_IGNORE_WIDGETS} )) && { + typeset -ga ZSH_AUTOSUGGEST_IGNORE_WIDGETS + ZSH_AUTOSUGGEST_IGNORE_WIDGETS=( + orig-\* + beep + run-help + set-local-history + which-command + yank + yank-pop + zle-\* + ) +} + +# Pty name for capturing completions for completion suggestion strategy +(( ! ${+ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME} )) && +typeset -g ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME=zsh_autosuggest_completion_pty + +#--------------------------------------------------------------------# +# Utility Functions # +#--------------------------------------------------------------------# + +_zsh_autosuggest_escape_command() { + setopt localoptions EXTENDED_GLOB + + # Escape special chars in the string (requires EXTENDED_GLOB) + echo -E "${1//(#m)[\"\'\\()\[\]|*?~]/\\$MATCH}" +} + +#--------------------------------------------------------------------# +# Widget Helpers # +#--------------------------------------------------------------------# + +_zsh_autosuggest_incr_bind_count() { + typeset -gi bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]+1)) + _ZSH_AUTOSUGGEST_BIND_COUNTS[$1]=$bind_count +} + +# Bind a single widget to an autosuggest widget, saving a reference to the original widget +_zsh_autosuggest_bind_widget() { + typeset -gA _ZSH_AUTOSUGGEST_BIND_COUNTS + + local widget=$1 + local autosuggest_action=$2 + local prefix=$ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX + + local -i bind_count + + # Save a reference to the original widget + case $widgets[$widget] in + # Already bound + user:_zsh_autosuggest_(bound|orig)_*) + bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$widget])) + ;; + + # User-defined widget + user:*) + _zsh_autosuggest_incr_bind_count $widget + zle -N $prefix$bind_count-$widget ${widgets[$widget]#*:} + ;; + + # Built-in widget + builtin) + _zsh_autosuggest_incr_bind_count $widget + eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }" + zle -N $prefix$bind_count-$widget _zsh_autosuggest_orig_$widget + ;; + + # Completion widget + completion:*) + _zsh_autosuggest_incr_bind_count $widget + eval "zle -C $prefix$bind_count-${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}" + ;; + esac + + # Pass the original widget's name explicitly into the autosuggest + # function. Use this passed in widget name to call the original + # widget instead of relying on the $WIDGET variable being set + # correctly. $WIDGET cannot be trusted because other plugins call + # zle without the `-w` flag (e.g. `zle self-insert` instead of + # `zle self-insert -w`). + eval "_zsh_autosuggest_bound_${bind_count}_${(q)widget}() { + _zsh_autosuggest_widget_$autosuggest_action $prefix$bind_count-${(q)widget} \$@ + }" + + # Create the bound widget + zle -N -- $widget _zsh_autosuggest_bound_${bind_count}_$widget +} + +# Map all configured widgets to the right autosuggest widgets +_zsh_autosuggest_bind_widgets() { + emulate -L zsh + + local widget + local ignore_widgets + + ignore_widgets=( + .\* + _\* + autosuggest-\* + $ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX\* + $ZSH_AUTOSUGGEST_IGNORE_WIDGETS + ) + + # Find every widget we might want to bind and bind it appropriately + for widget in ${${(f)"$(builtin zle -la)"}:#${(j:|:)~ignore_widgets}}; do + if [[ -n ${ZSH_AUTOSUGGEST_CLEAR_WIDGETS[(r)$widget]} ]]; then + _zsh_autosuggest_bind_widget $widget clear + elif [[ -n ${ZSH_AUTOSUGGEST_ACCEPT_WIDGETS[(r)$widget]} ]]; then + _zsh_autosuggest_bind_widget $widget accept + elif [[ -n ${ZSH_AUTOSUGGEST_EXECUTE_WIDGETS[(r)$widget]} ]]; then + _zsh_autosuggest_bind_widget $widget execute + elif [[ -n ${ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS[(r)$widget]} ]]; then + _zsh_autosuggest_bind_widget $widget partial_accept + else + # Assume any unspecified widget might modify the buffer + _zsh_autosuggest_bind_widget $widget modify + fi + done +} + +# Given the name of an original widget and args, invoke it, if it exists +_zsh_autosuggest_invoke_original_widget() { + # Do nothing unless called with at least one arg + (( $# )) || return 0 + + local original_widget_name="$1" + + shift + + if (( ${+widgets[$original_widget_name]} )); then + zle $original_widget_name -- $@ + fi +} + +#--------------------------------------------------------------------# +# Highlighting # +#--------------------------------------------------------------------# + +# If there was a highlight, remove it +_zsh_autosuggest_highlight_reset() { + typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT + + if [[ -n "$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT" ]]; then + region_highlight=("${(@)region_highlight:#$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT}") + unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT + fi +} + +# If there's a suggestion, highlight it +_zsh_autosuggest_highlight_apply() { + typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT + + if (( $#POSTDISPLAY )); then + typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="$#BUFFER $(($#BUFFER + $#POSTDISPLAY)) $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE" + region_highlight+=("$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT") + else + unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT + fi +} + +#--------------------------------------------------------------------# +# Autosuggest Widget Implementations # +#--------------------------------------------------------------------# + +# Disable suggestions +_zsh_autosuggest_disable() { + typeset -g _ZSH_AUTOSUGGEST_DISABLED + _zsh_autosuggest_clear +} + +# Enable suggestions +_zsh_autosuggest_enable() { + unset _ZSH_AUTOSUGGEST_DISABLED + + if (( $#BUFFER )); then + _zsh_autosuggest_fetch + fi +} + +# Toggle suggestions (enable/disable) +_zsh_autosuggest_toggle() { + if [[ -n "${_ZSH_AUTOSUGGEST_DISABLED+x}" ]]; then + _zsh_autosuggest_enable + else + _zsh_autosuggest_disable + fi +} + +# Clear the suggestion +_zsh_autosuggest_clear() { + # Remove the suggestion + unset POSTDISPLAY + + _zsh_autosuggest_invoke_original_widget $@ +} + +# Modify the buffer and get a new suggestion +_zsh_autosuggest_modify() { + local -i retval + + # Only available in zsh >= 5.4 + local -i KEYS_QUEUED_COUNT + + # Save the contents of the buffer/postdisplay + local orig_buffer="$BUFFER" + local orig_postdisplay="$POSTDISPLAY" + + # Clear suggestion while waiting for next one + unset POSTDISPLAY + + # Original widget may modify the buffer + _zsh_autosuggest_invoke_original_widget $@ + retval=$? + + emulate -L zsh + + # Don't fetch a new suggestion if there's more input to be read immediately + if (( $PENDING > 0 || $KEYS_QUEUED_COUNT > 0 )); then + POSTDISPLAY="$orig_postdisplay" + return $retval + fi + + # Optimize if manually typing in the suggestion + if (( $#BUFFER > $#orig_buffer )); then + local added=${BUFFER#$orig_buffer} + + # If the string added matches the beginning of the postdisplay + if [[ "$added" = "${orig_postdisplay:0:$#added}" ]]; then + POSTDISPLAY="${orig_postdisplay:$#added}" + return $retval + fi + fi + + # Don't fetch a new suggestion if the buffer hasn't changed + if [[ "$BUFFER" = "$orig_buffer" ]]; then + POSTDISPLAY="$orig_postdisplay" + return $retval + fi + + # Bail out if suggestions are disabled + if [[ -n "${_ZSH_AUTOSUGGEST_DISABLED+x}" ]]; then + return $? + fi + + # Get a new suggestion if the buffer is not empty after modification + if (( $#BUFFER > 0 )); then + if [[ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]] || (( $#BUFFER <= $ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE )); then + _zsh_autosuggest_fetch + fi + fi + + return $retval +} + +# Fetch a new suggestion based on what's currently in the buffer +_zsh_autosuggest_fetch() { + if (( ${+ZSH_AUTOSUGGEST_USE_ASYNC} )); then + _zsh_autosuggest_async_request "$BUFFER" + else + local suggestion + _zsh_autosuggest_fetch_suggestion "$BUFFER" + _zsh_autosuggest_suggest "$suggestion" + fi +} + +# Offer a suggestion +_zsh_autosuggest_suggest() { + emulate -L zsh + + local suggestion="$1" + + if [[ -n "$suggestion" ]] && (( $#BUFFER )); then + POSTDISPLAY="${suggestion#$BUFFER}" + else + unset POSTDISPLAY + fi +} + +# Accept the entire suggestion +_zsh_autosuggest_accept() { + local -i retval max_cursor_pos=$#BUFFER + + # When vicmd keymap is active, the cursor can't move all the way + # to the end of the buffer + if [[ "$KEYMAP" = "vicmd" ]]; then + max_cursor_pos=$((max_cursor_pos - 1)) + fi + + # If we're not in a valid state to accept a suggestion, just run the + # original widget and bail out + if (( $CURSOR != $max_cursor_pos || !$#POSTDISPLAY )); then + _zsh_autosuggest_invoke_original_widget $@ + return + fi + + # Only accept if the cursor is at the end of the buffer + # Add the suggestion to the buffer + BUFFER="$BUFFER$POSTDISPLAY" + + # Remove the suggestion + unset POSTDISPLAY + + # Run the original widget before manually moving the cursor so that the + # cursor movement doesn't make the widget do something unexpected + _zsh_autosuggest_invoke_original_widget $@ + retval=$? + + # Move the cursor to the end of the buffer + if [[ "$KEYMAP" = "vicmd" ]]; then + CURSOR=$(($#BUFFER - 1)) + else + CURSOR=$#BUFFER + fi + + return $retval +} + +# Accept the entire suggestion and execute it +_zsh_autosuggest_execute() { + # Add the suggestion to the buffer + BUFFER="$BUFFER$POSTDISPLAY" + + # Remove the suggestion + unset POSTDISPLAY + + # Call the original `accept-line` to handle syntax highlighting or + # other potential custom behavior + _zsh_autosuggest_invoke_original_widget "accept-line" +} + +# Partially accept the suggestion +_zsh_autosuggest_partial_accept() { + local -i retval cursor_loc + + # Save the contents of the buffer so we can restore later if needed + local original_buffer="$BUFFER" + + # Temporarily accept the suggestion. + BUFFER="$BUFFER$POSTDISPLAY" + + # Original widget moves the cursor + _zsh_autosuggest_invoke_original_widget $@ + retval=$? + + # Normalize cursor location across vi/emacs modes + cursor_loc=$CURSOR + if [[ "$KEYMAP" = "vicmd" ]]; then + cursor_loc=$((cursor_loc + 1)) + fi + + # If we've moved past the end of the original buffer + if (( $cursor_loc > $#original_buffer )); then + # Set POSTDISPLAY to text right of the cursor + POSTDISPLAY="${BUFFER[$(($cursor_loc + 1)),$#BUFFER]}" + + # Clip the buffer at the cursor + BUFFER="${BUFFER[1,$cursor_loc]}" + else + # Restore the original buffer + BUFFER="$original_buffer" + fi + + return $retval +} + +() { + local action + for action in clear modify fetch suggest accept partial_accept execute enable disable toggle; do + eval "_zsh_autosuggest_widget_$action() { + local -i retval + + _zsh_autosuggest_highlight_reset + + _zsh_autosuggest_$action \$@ + retval=\$? + + _zsh_autosuggest_highlight_apply + + zle -R + + return \$retval + }" + done + + zle -N autosuggest-fetch _zsh_autosuggest_widget_fetch + zle -N autosuggest-suggest _zsh_autosuggest_widget_suggest + zle -N autosuggest-accept _zsh_autosuggest_widget_accept + zle -N autosuggest-clear _zsh_autosuggest_widget_clear + zle -N autosuggest-execute _zsh_autosuggest_widget_execute + zle -N autosuggest-enable _zsh_autosuggest_widget_enable + zle -N autosuggest-disable _zsh_autosuggest_widget_disable + zle -N autosuggest-toggle _zsh_autosuggest_widget_toggle +} + +#--------------------------------------------------------------------# +# Completion Suggestion Strategy # +#--------------------------------------------------------------------# +# Fetches a suggestion from the completion engine +# + +_zsh_autosuggest_capture_postcompletion() { + # Always insert the first completion into the buffer + compstate[insert]=1 + + # Don't list completions + unset 'compstate[list]' +} + +_zsh_autosuggest_capture_completion_widget() { + # Add a post-completion hook to be called after all completions have been + # gathered. The hook can modify compstate to affect what is done with the + # gathered completions. + local -a +h comppostfuncs + comppostfuncs=(_zsh_autosuggest_capture_postcompletion) + + # Only capture completions at the end of the buffer + CURSOR=$#BUFFER + + # Run the original widget wrapping `.complete-word` so we don't + # recursively try to fetch suggestions, since our pty is forked + # after autosuggestions is initialized. + zle -- ${(k)widgets[(r)completion:.complete-word:_main_complete]} + + if is-at-least 5.0.3; then + # Don't do any cr/lf transformations. We need to do this immediately before + # output because if we do it in setup, onlcr will be re-enabled when we enter + # vared in the async code path. There is a bug in zpty module in older versions + # where the tty is not properly attached to the pty slave, resulting in stty + # getting stopped with a SIGTTOU. See zsh-workers thread 31660 and upstream + # commit f75904a38 + stty -onlcr -ocrnl -F /dev/tty + fi + + # The completion has been added, print the buffer as the suggestion + echo -nE - $'\0'$BUFFER$'\0' +} + +zle -N autosuggest-capture-completion _zsh_autosuggest_capture_completion_widget + +_zsh_autosuggest_capture_setup() { + autoload -Uz is-at-least + + # There is a bug in zpty module in older zsh versions by which a + # zpty that exits will kill all zpty processes that were forked + # before it. Here we set up a zsh exit hook to SIGKILL the zpty + # process immediately, before it has a chance to kill any other + # zpty processes. + if ! is-at-least 5.4; then + zshexit() { + # The zsh builtin `kill` fails sometimes in older versions + # https://unix.stackexchange.com/a/477647/156673 + kill -KILL $$ 2>&- || command kill -KILL $$ + + # Block for long enough for the signal to come through + sleep 1 + } + fi + + # Try to avoid any suggestions that wouldn't match the prefix + zstyle ':completion:*' matcher-list '' + zstyle ':completion:*' path-completion false + zstyle ':completion:*' max-errors 0 not-numeric + + bindkey '^I' autosuggest-capture-completion +} + +_zsh_autosuggest_capture_completion_sync() { + _zsh_autosuggest_capture_setup + + zle autosuggest-capture-completion +} + +_zsh_autosuggest_capture_completion_async() { + _zsh_autosuggest_capture_setup + + zmodload zsh/parameter 2>/dev/null || return # For `$functions` + + # Make vared completion work as if for a normal command line + # https://stackoverflow.com/a/7057118/154703 + autoload +X _complete + functions[_original_complete]=$functions[_complete] + function _complete() { + unset 'compstate[vared]' + _original_complete "$@" + } + + # Open zle with buffer set so we can capture completions for it + vared 1 +} + +_zsh_autosuggest_strategy_completion() { + # Reset options to defaults and enable LOCAL_OPTIONS + emulate -L zsh + + # Enable extended glob for completion ignore pattern + setopt EXTENDED_GLOB + + typeset -g suggestion + local line REPLY + + # Exit if we don't have completions + whence compdef >/dev/null || return + + # Exit if we don't have zpty + zmodload zsh/zpty 2>/dev/null || return + + # Exit if our search string matches the ignore pattern + [[ -n "$ZSH_AUTOSUGGEST_COMPLETION_IGNORE" ]] && [[ "$1" == $~ZSH_AUTOSUGGEST_COMPLETION_IGNORE ]] && return + + # Zle will be inactive if we are in async mode + if zle; then + zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync + else + zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_async "\$1" + zpty -w $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME $'\t' + fi + + { + # The completion result is surrounded by null bytes, so read the + # content between the first two null bytes. + zpty -r $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME line '*'$'\0''*'$'\0' + + # Extract the suggestion from between the null bytes. On older + # versions of zsh (older than 5.3), we sometimes get extra bytes after + # the second null byte, so trim those off the end. + # See http://www.zsh.org/mla/workers/2015/msg03290.html + suggestion="${${(@0)line}[2]}" + } always { + # Destroy the pty + zpty -d $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME + } +} + +#--------------------------------------------------------------------# +# History Suggestion Strategy # +#--------------------------------------------------------------------# +# Suggests the most recent history item that matches the given +# prefix. +# + +_zsh_autosuggest_strategy_history() { + # Reset options to defaults and enable LOCAL_OPTIONS + emulate -L zsh + + # Enable globbing flags so that we can use (#m) and (x~y) glob operator + setopt EXTENDED_GLOB + + # Escape backslashes and all of the glob operators so we can use + # this string as a pattern to search the $history associative array. + # - (#m) globbing flag enables setting references for match data + # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8 + local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}" + + # Get the history items that match the prefix, excluding those that match + # the ignore pattern + local pattern="$prefix*" + if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then + pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)" + fi + + # Give the first history item matching the pattern as the suggestion + # - (r) subscript flag makes the pattern match on values + typeset -g suggestion="${history[(r)$pattern]}" +} + +#--------------------------------------------------------------------# +# Match Previous Command Suggestion Strategy # +#--------------------------------------------------------------------# +# Suggests the most recent history item that matches the given +# prefix and whose preceding history item also matches the most +# recently executed command. +# +# For example, suppose your history has the following entries: +# - pwd +# - ls foo +# - ls bar +# - pwd +# +# Given the history list above, when you type 'ls', the suggestion +# will be 'ls foo' rather than 'ls bar' because your most recently +# executed command (pwd) was previously followed by 'ls foo'. +# +# Note that this strategy won't work as expected with ZSH options that don't +# preserve the history order such as `HIST_IGNORE_ALL_DUPS` or +# `HIST_EXPIRE_DUPS_FIRST`. + +_zsh_autosuggest_strategy_match_prev_cmd() { + # Reset options to defaults and enable LOCAL_OPTIONS + emulate -L zsh + + # Enable globbing flags so that we can use (#m) and (x~y) glob operator + setopt EXTENDED_GLOB + + # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8 + local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}" + + # Get the history items that match the prefix, excluding those that match + # the ignore pattern + local pattern="$prefix*" + if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then + pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)" + fi + + # Get all history event numbers that correspond to history + # entries that match the pattern + local history_match_keys + history_match_keys=(${(k)history[(R)$~pattern]}) + + # By default we use the first history number (most recent history entry) + local histkey="${history_match_keys[1]}" + + # Get the previously executed command + local prev_cmd="$(_zsh_autosuggest_escape_command "${history[$((HISTCMD-1))]}")" + + # Iterate up to the first 200 history event numbers that match $prefix + for key in "${(@)history_match_keys[1,200]}"; do + # Stop if we ran out of history + [[ $key -gt 1 ]] || break + + # See if the history entry preceding the suggestion matches the + # previous command, and use it if it does + if [[ "${history[$((key - 1))]}" == "$prev_cmd" ]]; then + histkey="$key" + break + fi + done + + # Give back the matched history entry + typeset -g suggestion="$history[$histkey]" +} + +#--------------------------------------------------------------------# +# Fetch Suggestion # +#--------------------------------------------------------------------# +# Loops through all specified strategies and returns a suggestion +# from the first strategy to provide one. +# + +_zsh_autosuggest_fetch_suggestion() { + typeset -g suggestion + local -a strategies + local strategy + + # Ensure we are working with an array + strategies=(${=ZSH_AUTOSUGGEST_STRATEGY}) + + for strategy in $strategies; do + # Try to get a suggestion from this strategy + _zsh_autosuggest_strategy_$strategy "$1" + + # Ensure the suggestion matches the prefix + [[ "$suggestion" != "$1"* ]] && unset suggestion + + # Break once we've found a valid suggestion + [[ -n "$suggestion" ]] && break + done +} + +#--------------------------------------------------------------------# +# Async # +#--------------------------------------------------------------------# + +_zsh_autosuggest_async_request() { + zmodload zsh/system 2>/dev/null # For `$sysparams` + + typeset -g _ZSH_AUTOSUGGEST_ASYNC_FD _ZSH_AUTOSUGGEST_CHILD_PID + + # If we've got a pending request, cancel it + if [[ -n "$_ZSH_AUTOSUGGEST_ASYNC_FD" ]] && { true <&$_ZSH_AUTOSUGGEST_ASYNC_FD } 2>/dev/null; then + # Close the file descriptor and remove the handler + exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&- + zle -F $_ZSH_AUTOSUGGEST_ASYNC_FD + + # We won't know the pid unless the user has zsh/system module installed + if [[ -n "$_ZSH_AUTOSUGGEST_CHILD_PID" ]]; then + # 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 suggestion strategy + kill -TERM -$_ZSH_AUTOSUGGEST_CHILD_PID 2>/dev/null + else + # Kill just the child process since it wasn't placed in a new process + # group. If the suggestion strategy forked any child processes they may + # be orphaned and left behind. + kill -TERM $_ZSH_AUTOSUGGEST_CHILD_PID 2>/dev/null + fi + fi + fi + + # Fork a process to fetch a suggestion and open a pipe to read from it + exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <( + # Tell parent process our pid + echo $sysparams[pid] + + # Fetch and print the suggestion + local suggestion + _zsh_autosuggest_fetch_suggestion "$1" + echo -nE "$suggestion" + ) + + # 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 + + # Read the pid from the child process + read _ZSH_AUTOSUGGEST_CHILD_PID <&$_ZSH_AUTOSUGGEST_ASYNC_FD + + # When the fd is readable, call the response handler + zle -F "$_ZSH_AUTOSUGGEST_ASYNC_FD" _zsh_autosuggest_async_response +} + +# Called when new data is ready to be read from the pipe +# First arg will be fd ready for reading +# Second arg will be passed in case of error +_zsh_autosuggest_async_response() { + emulate -L zsh + + local suggestion + + if [[ -z "$2" || "$2" == "hup" ]]; then + # Read everything from the fd and give it as a suggestion + IFS='' read -rd '' -u $1 suggestion + zle autosuggest-suggest -- "$suggestion" + + # Close the fd + exec {1}<&- + fi + + # Always remove the handler + zle -F "$1" +} + +#--------------------------------------------------------------------# +# Start # +#--------------------------------------------------------------------# + +# Start the autosuggestion widgets +_zsh_autosuggest_start() { + # By default we re-bind widgets on every precmd to ensure we wrap other + # wrappers. Specifically, highlighting breaks if our widgets are wrapped by + # zsh-syntax-highlighting widgets. This also allows modifications to the + # widget list variables to take effect on the next precmd. However this has + # a decent performance hit, so users can set ZSH_AUTOSUGGEST_MANUAL_REBIND + # to disable the automatic re-binding. + if (( ${+ZSH_AUTOSUGGEST_MANUAL_REBIND} )); then + add-zsh-hook -d precmd _zsh_autosuggest_start + fi + + _zsh_autosuggest_bind_widgets +} + +# Start the autosuggestion widgets on the next precmd +autoload -Uz add-zsh-hook +add-zsh-hook precmd _zsh_autosuggest_start diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/LICENSE b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/LICENSE new file mode 100644 index 00000000..0a041280 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/README.md new file mode 100644 index 00000000..bc3e99ba --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/README.md @@ -0,0 +1,155 @@ +# zsh-bash-completions-fallback + +This plugin is intended to use the bash completions when a zsh completion is not +available. + +While this could be supported natively via `bashcompinit`, this doesn't +actually work most of the times, as completion scripts may use syntax not +supported by zsh, and so it's just better to implement this querying the bash +itself, using a bash script called at completion time (based on [Brian Baffa +implementation](https://brbsix.github.io/2015/11/29/accessing-tab-completion-programmatically-in-bash/) +and including various fixes to support commands and completion parameters). + +Make sure you load this after other plugins to prevent their completions to be +replaced by the (simpler) bash ones. + +Most of all bash completions can now work as they precisely do in bash, as per +the `compopt` simulation that is added here. It may be used to control the +output or avoid adding spaces or limit the results. + +The plugin by default works by lazy-loading the completions the first time you +hit TAB to complete a command, however this can be controlled using the +`$ZSH_BASH_COMPLETIONS_FALLBACK_LAZYLOAD_DISABLE` parameter, to load them all +on startup. + +If a new bash completion has been installed in the system, you can just restart +zsh or call `_bash_completions_load`, if instead you want this to be handled +automatically, you can use `$ZSH_BASH_COMPLETIONS_FALLBACK_LAZYLOAD_AUTO_UPDATE` +to update all the the available completions at every TAB-completion. +This is disabled by default, to avoid IO operations at each completion, but it +is still very fast in most of the platforms. + +Once loaded you can see all the completions available via bash (through this +script) using: + + _bash_completions_fallback_list_handled_completions + + +Requirements +------------------------------------------------------------------------------ + +* [ZSH](http://zsh.sourceforge.net) 4.3 or newer +* [GNU Bash](https://www.gnu.org/software/bash/) 4 or newer + +Install +------------------------------------------------------------------------------ + +Using [Oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh): + +1. Clone this repository in oh-my-zsh's plugins directory: + + git clone https://github.com/3v1n0/zsh-bash-completions-fallback ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-bash-completions-fallback + +2. Activate the plugin in `~/.zshrc` (make sure it's set as the last one not to + replace completions provided by other plugins): + + plugins=( [plugins...] zsh-bash-completions-fallback) + +3. Source `~/.zshrc` (or restart zsh) to take changes into account + + source ~/.zshrc + +Using [Zinit](https://github.com/zdharma/zinit): + +- If you're using normal loading mode: + + # Replace `light` with `load` if you want some more debugging + zinit ice depth=1 # optional, but avoids downloading the full history + zinit light 3v1n0/zsh-bash-completions-fallback + +- If you're using turbo mode, you can avoid using the internal lazy mode: + + zinit wait lucid nocd depth=1 \ + atinit='ZSH_BASH_COMPLETIONS_FALLBACK_LAZYLOAD_DISABLE=true' \ + for 3v1n0/zsh-bash-completions-fallback + +- Add those to your `~/.zshrc` to keep the changes persistent + +Using other plugins manager: + + # Depending on the tool the syntax may vary but it's generally just + $your_plugin_manager 3v1n0/zsh-bash-completions-fallback + +Manual installation: + +1. Clone this repository in a folder (like ~/.zsh-bash-completions-fallback): + + git clone https://github.com/3v1n0/zsh-bash-completions-fallback $HOME/.zsh-bash-completions-fallback + +2. Add to your `~/.zshrc`: + + source $HOME/.zsh-bash-completions-fallback/zsh-bash-completions-fallback.plugin.zsh + +3. Source `~/.zshrc` (or restart zsh) to start using the plugin + + # This plugin requires compinit, so make sure that your ~/.zshrc or + # your package manager loads it before, otherwise this is needed + #autoload -U compinit && compinit + source ~/.zshrc + +4. Of course in case you want to test it temporary you just have to `source` the plugin file (`zsh-bash-completions-fallback.plugin.zsh`) + +Configuration +------------------------------------------------------------------------------ + +This script defines the following global variables. You may override their +default values only after having loaded this script into your ZSH session. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_PATH` overrides the default bash completions + path that is set to `/usr/share/bash-completion` by default. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_REPLACE_ALL` set (to any value) to allow to + replace all the zsh completions, even if we already have one for the given + command. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_WHITELIST` an array of commands for which we + want to enable the bash completions, this allow to filter the commands to use + a bash completion for. Set it to a value such as `(gdbus zramctl)` to enable + it only for the `gdbus` and `zramctl` commands. + This also can be used with `$ZSH_BASH_COMPLETIONS_FALLBACK_REPLACE_ALL` to + only use a subset of completions from bash only. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_BLACKLIST` an array of commands for which we + want to disable the bash completions. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_REPLACE_LIST` an array of commands for which we + want to give priority to the bash completions over the zsh ones. + So, in case a zsh completion for such commands is available, we just ignore it + and replace it with the bash ones. + This has no effect if `$ZSH_BASH_COMPLETIONS_FALLBACK_REPLACE_ALL` is set. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_PRELOAD_ALL` set this variable (to any value) + to always preload completions even for non-available commands. We don't do it + by default and if any command is added at later times, the user can manually + call `_bash_completions_load` (or source this file again) + +* `ZSH_BASH_COMPLETIONS_FALLBACK_LAZYLOAD_DISABLE` set this variable (to any + value) in order to disable the lazy loading of the completions at the fist + time the tab-completion is triggered. By setting this the completions are + loaded instead at startup. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_LOAD_NATIVE_COMPLETIONS` set this variable to + a value that is different from `true` not to ask the bash for all its suported + completions, but only relying in the provided completion files. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_LAZYLOAD_AUTO_UPDATE` set this variable (to any + value) to automatically check for new completions and to install them at every + tab-completion if the threshold from the last update set in + `$ZSH_BASH_COMPLETIONS_FALLBACK_AUTO_UPDATE_THRESHOLD` has passed. + This is not affected by the value of + `$ZSH_BASH_COMPLETIONS_FALLBACK_LAZYLOAD_DISABLE` and it will work both in + case lazy loading is enabled or not. + +* `ZSH_BASH_COMPLETIONS_FALLBACK_AUTO_UPDATE_THRESHOLD`: Sets a threshold (in + seconds) to check if the completions have been changed in case the lazy load + update is enabled. This is set by default at 300 seconds. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/bash-completions-getter.sh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/bash-completions-getter.sh new file mode 100644 index 00000000..011e349f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/bash-completions-getter.sh @@ -0,0 +1,248 @@ + +# Copyright 2020: Marco Trevisan +# Original Author: Brian Beffa +# Original source: https://brbsix.github.io/2015/11/29/accessing-tab-completion-programmatically-in-bash/ +# License: LGPLv3 (http://www.gnu.org/licenses/lgpl-3.0.txt) +# + +compopt() { + # TODO implement default case addition and removal + [ -z "$_COMP_OPTIONS" ] && + _COMP_OPTIONS=() + + while [ ${#@} -gt 0 ]; do + case "$1" in + -o|+o) + local opt="${2#\'}" + local opt="${opt%\'}" + + if [ "$1" == "-o" ]; then + _COMP_OPTIONS+=("$opt") + else + local del=("$opt") + _COMP_OPTIONS=("${_COMP_OPTIONS[@]/$del}") + fi + + shift 2 + ;; + esac + done + + return 0 +} + +source_bash_completion() { + local src_name='bash_completion' + if [ -n "${ZSH_BASH_COMPLETIONS_FALLBACK_PATH}" ] && + [ -f "${ZSH_BASH_COMPLETIONS_FALLBACK_PATH}/$src_name" ]; then + source "${ZSH_BASH_COMPLETIONS_FALLBACK_PATH}/$src_name" + elif [ -f "/etc/$src_name" ]; then + source "/etc/$src_name" + elif [[ $BASH_SOURCE == */* ]] && + [ -f "${BASH_SOURCE%/*}/$src_name" ]; then + source "${BASH_SOURCE%/*}/$src_name" + else + local -a dirs=() + local OIFS=$IFS IFS=: dir + local lookup_dirs=(${XDG_DATA_DIRS:-/usr/local/share:/usr/share}) + IFS=$OIFS + + for dir in ${lookup_dirs[@]}; do + if [ -f "$dir/bash-completion/$src_name" ]; then + source "$dir/bash-completion/$src_name" + return 0 + fi + done + fi + + return 1 +} + +parse_quoted_arguments() { + local args="${1#\'}" + args="${args%\'}" + local QUOTED_ARGS=() + quote="${2:-\"}" + + if [[ "${args:$i}" == *"${quote}"* ]]; then + new_args="${args}" + + for ((i = 1; i < "${#args}"; i++)); do + if [[ "${args:$i}" =~ [^${quote}]*${quote}([^${quote}]*)${quote} ]]; then + local m="${BASH_REMATCH[1]}" + QUOTED_ARGS+=("${m}") + placeholder="____QUOTED_ARG_${#QUOTED_ARGS[@]}____" + new_args=${new_args/"${quote}${m}${quote}"/${placeholder}} + i=$((i + ${#BASH_REMATCH} - 1)) + fi + + if [[ "${args:$i}" != *"${quote}"* ]]; then + break + fi + done + + args="${new_args}" + fi + + UNQUOTED_ARGS=($args) + + if [ -n "$QUOTED_ARGS" ]; then + for ((i = 0; i < ${#QUOTED_ARGS[@]}; i++)); do + placeholder="____QUOTED_ARG_$((i+1))____" + UNQUOTED_ARGS=("${UNQUOTED_ARGS[@]/$placeholder/"${QUOTED_ARGS[$i]}"}") + done + fi +} + +parse_complete_options() { + unset COMPLETE_ACTION + unset COMPLETE_ACTION_TYPE + unset COMPLETE_SUPPORTED_COMMANDS + unset COMPLETE_OPTION + unset COMPLETE_WORDS + + COMPLETE_ACTION= + COMPLETE_SUPPORTED_COMMANDS=() + COMPLETE_WORDS=() + COMPLETE_OPTION= + + while [ ${#@} -gt 0 ]; do + case "$1" in + -F|-C) + [ -n "$COMPLETE_ACTION" ] && + return 2 + + COMPLETE_ACTION="${2}" + COMPLETE_ACTION_TYPE=${1#-} + shift 2 + ;; + -pr|-D|-E|-A|-G|-F|-C|-P|-S) + shift 2 + ;; + -o) + COMPLETE_OPTION="${2}" + shift 2 + ;; + -W) + parse_quoted_arguments "$2" + COMPLETE_WORDS=("${UNQUOTED_ARGS[@]}") + shift 2 + ;; + -X) + # TODO, but to support this we also need to handle compopt and -o + shift 2 + ;; + -*) + shift + ;; + *) + break + ;; + esac + done + + [ -z "$COMPLETE_ACTION" ] && [ -z "$COMPLETE_WORDS" ] \ + && return; + + while [ ${#@} -gt 0 ]; do + COMPLETE_SUPPORTED_COMMANDS+=("$1") + shift + done +} + +get_completions() { + local COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS COMP_WORDBREAKS + local completion COMPREPLY=() cmd_name + + _COMP_OPTIONS=() + + COMP_LINE=${ZSH_BUFFER} + COMP_POINT=${ZSH_CURSOR:-${#COMP_LINE}} + COMP_WORDBREAKS=${ZSH_WORDBREAKS} + COMP_WORDS=(${ZSH_WORDS[@]}) + cmd_name=${ZSH_NAME} + + + # add '' to COMP_WORDS if the last character of the command line is a space + [[ "${COMP_LINE[@]: -1}" = ' ' ]] && COMP_WORDS+=('') + + # index of the last word as fallback + COMP_CWORD=${ZSH_CURRENT:-$(( ${#COMP_WORDS[@]} - 1 ))} + + # load completion + source_bash_completion + + # load completion, in case getting from the specific command file + completion_command=$(complete -p "$cmd_name" 2>/dev/null) + if [ -z "$completion_command" ]; then + _completion_loader "$cmd_name" + completion_command=$(complete -p "$cmd_name" 2>/dev/null) + fi + # detect completion function or command + if [[ "$completion_command" =~ \ + ^complete[[:space:]]+(.+) ]]; then + local args="${BASH_REMATCH[1]}"; + parse_quoted_arguments "$args" "'" + parse_complete_options "${UNQUOTED_ARGS[@]}" + + completion="$COMPLETE_ACTION" + _COMP_OPTIONS+=("$COMPLETE_OPTION") + else + return 1; + fi + + # ensure completion was detected + if ([[ -z "$completion" ]] || [[ "$completion" == "_minimal" ]]); then + if [ -n "$COMPLETE_WORDS" ]; then + echo "${_COMP_OPTIONS[@]}" + printf "%s\n" "${COMPLETE_WORDS[@]}" + return 0 + fi + + return 1 + fi + + # execute completion function or command (exporting the needed variables) + # This may fail if compopt is called, but there's no easy way to pre-fill + # the bash input with some stuff, using only bashy things. + local -a cmd=("$completion") + cmd+=("$cmd_name") + cmd+=("'${COMP_WORDS[${COMP_CWORD}]}'") + + if [ ${COMP_CWORD} -gt 0 ]; then + cmd+=("'${COMP_WORDS[$((COMP_CWORD-1))]}'"); + else + cmd+=(''); + fi + + if [ "$COMPLETE_ACTION_TYPE" == 'C' ]; then + export COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS COMP_WORDBREAKS + COMPREPLY=($("${cmd[@]}")) + else + ${cmd[@]} + fi + + [ -n "$COMPLETE_WORDS" ] && + COMPREPLY+=("${COMPLETE_WORDS[@]}") + + # print options, followed by completions to stdout + echo "${_COMP_OPTIONS[@]}" + printf "%s\n" "${COMPREPLY[@]}" +} + +get_defined_completions() { + local defined_completions=() + # Redefine complete bash builtin function to catch all the defined actions + # We may call `builtin complete "$@"` at the end to override the actual + # function, but this doesn't seem to be needed in this case, so let's save + # some cycles. + function complete() { + parse_complete_options "$@" + defined_completions+=("${COMPLETE_SUPPORTED_COMMANDS[@]}") + } + + source_bash_completion + unset -f complete + + printf "%s\n" "${defined_completions[@]}" +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/FETCH_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/FETCH_HEAD new file mode 100644 index 00000000..3d16a957 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/FETCH_HEAD @@ -0,0 +1 @@ +274d42b54e6153b72ee1a159b4721afef7fe93ca branch 'master' of ssh://github.com/3v1n0/zsh-bash-completions-fallback diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/ORIG_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/ORIG_HEAD new file mode 100644 index 00000000..d44592d3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/ORIG_HEAD @@ -0,0 +1 @@ +274d42b54e6153b72ee1a159b4721afef7fe93ca diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/config b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/config new file mode 100644 index 00000000..d248cbb7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/config @@ -0,0 +1,11 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + url = https://github.com/3v1n0/zsh-bash-completions-fallback + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/description b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_branches/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_branches/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_applypatch-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_applypatch-msg.sample new file mode 100644 index 00000000..a5d7b84a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_commit-msg.sample new file mode 100644 index 00000000..b58d1184 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample new file mode 100644 index 00000000..14ed0aa4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample @@ -0,0 +1,173 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + } + my $query = <<" END"; + ["query", "$git_work_tree", { + "since": $last_update_token, + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_post-update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_post-update.sample new file mode 100644 index 00000000..ec17ec19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-applypatch.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-applypatch.sample new file mode 100644 index 00000000..4142082b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-commit.sample new file mode 100644 index 00000000..e144712c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample new file mode 100644 index 00000000..399eab19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-push.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-push.sample new file mode 100644 index 00000000..4ce688d3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-rebase.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-rebase.sample new file mode 100644 index 00000000..6cbef5c3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-receive.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-receive.sample new file mode 100644 index 00000000..a1fd29ec --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample new file mode 100644 index 00000000..10fa14c5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_update.sample new file mode 100644 index 00000000..c4d426bc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_hooks/executable_update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_info/exclude b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_info/exclude new file mode 100644 index 00000000..a5196d1b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/HEAD new file mode 100644 index 00000000..eca53cb2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 274d42b54e6153b72ee1a159b4721afef7fe93ca joelazar 1606124090 +0100 clone: from https://github.com/3v1n0/zsh-bash-completions-fallback diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/exact_refs/exact_heads/master new file mode 100644 index 00000000..eca53cb2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/exact_refs/exact_heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 274d42b54e6153b72ee1a159b4721afef7fe93ca joelazar 1606124090 +0100 clone: from https://github.com/3v1n0/zsh-bash-completions-fallback diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD new file mode 100644 index 00000000..eca53cb2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 274d42b54e6153b72ee1a159b4721afef7fe93ca joelazar 1606124090 +0100 clone: from https://github.com/3v1n0/zsh-bash-completions-fallback diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_objects/exact_info/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_objects/exact_info/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_objects/exact_pack/pack-0e3c179f3624d8b830657494a723b09d1328ffd5.idx b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-bash-completions-fallback/exact_dot_git/exact_objects/exact_pack/pack-0e3c179f3624d8b830657494a723b09d1328ffd5.idx new file mode 100644 index 0000000000000000000000000000000000000000..2db07148e7432bb1ecb56eb7e525c9ce2581fc18 GIT binary patch literal 6616 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%0D>Th#w2-X9&uVNOe#4ps? zs-SLY8Oo@!0MsQ92%U3q>4uy0J}W9S1lsU@e9YXYh-z*<03gqDZ)I=FfGx4_NuuRwq3E(>Pa$Njxy8qGHZ#aclieifxsfc}}OBG00W2 zq`c>8iUNhr*V)O37?1tv%y&}TZLq3XQ_DsB#WGEel}G&7C0q&B_0rYUJr!)Q<(b#% zCy%=P&z;vj;i>EC%eb*f_;XNKuBpjRHT#s3*=x?G*jx5{wi>J2>x-_b_*A4;dF;o@ z^ch=rz^A1emTfZ7esS#i6Ls}x2YgPSIj_Af%;V(qAO@zE8Ed^Zg?5@=m}8Ol{iOCx zWi{i?7JlCn1Rt?U@da^iTRcIv@RO;SFP{Q?jv>R@74|RE8%05JW--5T(We>)ZXu@a z>p3gtK#xe{C@L-aSbFueZ{ml~w~al|=SYXY-RoQYbBY;9)$85+O;cAbSW$APgm91s*(FPGBSvSNqD?v>t6bd9PxJCpZt>$?1lqf%W&K zqrZ-(Eu6KiODgP7aM-l@hAl5vF=ZXPFcUgfzBYV9@T_?=m$Qc)NtiDwcc^GrY2GKU zcedW|Sc^`rvD?SRFy*VBLr#Ns#hmCP)s5AMU5=eS>GMs8LH-zv#!J?wu!=d+=RP*n z9%?+fsHZCG*V3b|zm7_Fx~}{MDt&i>ybqaiPN=hKvbUW3u~#JT>FnT{e1=R6A8sjW zy<}|gu9&lW)vO6>MR$tNbzZNIGWq3ybbVdq>~ja?R&0`FSZ=|inw?oOr~1IZ8KurD zm!B9s(_@f%#1i$(>O zHC{W8eYhyFXf@XgPUm#!#PGH_N59Ofw0Uv?g3c+&=NzuGf4@a$l6BeN&1+UaNsoM{ z!0^IP|Ia(dW(H8G?w*4Bh1X+=86clFa\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample new file mode 100644 index 00000000..14ed0aa4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample @@ -0,0 +1,173 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + } + my $query = <<" END"; + ["query", "$git_work_tree", { + "since": $last_update_token, + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_post-update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_post-update.sample new file mode 100644 index 00000000..ec17ec19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-applypatch.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-applypatch.sample new file mode 100644 index 00000000..4142082b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-commit.sample new file mode 100644 index 00000000..e144712c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample new file mode 100644 index 00000000..399eab19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-push.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-push.sample new file mode 100644 index 00000000..4ce688d3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-rebase.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-rebase.sample new file mode 100644 index 00000000..6cbef5c3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-receive.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-receive.sample new file mode 100644 index 00000000..a1fd29ec --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample new file mode 100644 index 00000000..10fa14c5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_update.sample new file mode 100644 index 00000000..c4d426bc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_hooks/executable_update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_info/exclude b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_info/exclude new file mode 100644 index 00000000..a5196d1b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/HEAD new file mode 100644 index 00000000..5dfae4ca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/HEAD @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 2e009c7ab8e9c7496ed86473ede0917a3cefee01 joelazar 1606125115 +0100 clone: from https://github.com/zsh-users/zsh-completions +2e009c7ab8e9c7496ed86473ede0917a3cefee01 244cbfc832930ce0a10c2e7930a30ea985a5e26d joelazar 1610064438 +0100 pull --ff-only: Fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_heads/master new file mode 100644 index 00000000..5dfae4ca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_heads/master @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 2e009c7ab8e9c7496ed86473ede0917a3cefee01 joelazar 1606125115 +0100 clone: from https://github.com/zsh-users/zsh-completions +2e009c7ab8e9c7496ed86473ede0917a3cefee01 244cbfc832930ce0a10c2e7930a30ea985a5e26d joelazar 1610064438 +0100 pull --ff-only: Fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD new file mode 100644 index 00000000..7681ba41 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 2e009c7ab8e9c7496ed86473ede0917a3cefee01 joelazar 1606125115 +0100 clone: from https://github.com/zsh-users/zsh-completions diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master new file mode 100644 index 00000000..09e62578 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master @@ -0,0 +1 @@ +2e009c7ab8e9c7496ed86473ede0917a3cefee01 244cbfc832930ce0a10c2e7930a30ea985a5e26d joelazar 1610064438 +0100 pull --ff-only: fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_02/172b0dc43a44c5a86d81729cc2ea618aa37c86 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_02/172b0dc43a44c5a86d81729cc2ea618aa37c86 new file mode 100644 index 0000000000000000000000000000000000000000..523a4b0f7720a208d2bd4ff16931936bd61e2721 GIT binary patch literal 338 zcmbzkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~g5~OMy3eY0em+@R`=j;y=^Hy-rl|b4X|~wALu2N{_q^L4FAGmC(wkqpy7Tl$ zp&#Wl4F$4XLJQmSit6$l{jxmM>f$!$xz$yA?u)Anv~n(cb2R$-c{}SbJ5IZu>^Xbw z-E*a-!8c4_iawdLEdAL_#p>QSx02m&x AZU6uP literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_11/8cc8b544bd1f08fe71e362a0365cc707ba13e0 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_11/8cc8b544bd1f08fe71e362a0365cc707ba13e0 new file mode 100644 index 0000000000000000000000000000000000000000..b823d135e2403035fed6dee35d54723c94328b11 GIT binary patch literal 650 zcmboMZjT$V9Be37fZ7QPN!V!$?;NDUzR4=WU$re zsgFuNJHyUZw?rnNc~pEUce3&6D~6AHR&Q(LTx9b+=4##d**fQQ?>bD$xZ|{q&+x3| zpPd%zHyY+VWowUIH=$6Yl_l5pXvAdUA2m|1ySA6_KX78781Kqg)>^anH>R!HmZi8t zX+wZ%XlR<%eA5EXLs>iIjX&%ZoizXT%j`hjr!)SZk0{jpwThwsFUNKM#Vl_Q$yW3n zI#OBX_ji5_BiD{^dZn_*V=d3!ySu))IJkQCmAelsSa0@@4_&xB6%j4e{@AzN- zdbRGWUiY-F%#F2vA{*MiKHYRjPjcT>S!=e-tF_hzoZ!1XHR2r;Z+qeP*=d}4tXfAb zZoXu=@4WM5yK|=6N~W4(f!E2BYu<&+e_Uzs=Rer!8*yc(+qdYnUzS+^_rcrTw-dGeH%ym}cd4w+ zkb0Rf-(PlN^4+%+cRky5`*IB9OvTd|MCZlt^3Jk3_|er{?Dp-W<$u)T(gh4N>yAYJ zxaQd}eLTeG=G^wjR$u2b6q~(XkjJ-F-hbhColCnmY)}5=u=QgB-}7J5n=CtWQnUU% zzSOxjqVR{I%%2NUi@t8;zm&eDKJb8em-xg_{pod&{%%k9I+J?vVC9-@g-Y{Jbqw`M zJdS#<%u#`pw>|K_HKF|9+N^UyF%`!9%hzkHu1I@upJ&3f#yz_}{u6$&d|DA38>3## Rx2YM7yDq^B$N-O{X literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_12/6edad8f314516b78f33ddef33b4e901de2d6ef b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_12/6edad8f314516b78f33ddef33b4e901de2d6ef new file mode 100644 index 0000000000000000000000000000000000000000..e0c9c80659284b76136210832ba5b2d8ec547d6c GIT binary patch literal 339 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

    I-~6RWqC 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_24/4cbfc832930ce0a10c2e7930a30ea985a5e26d b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_24/4cbfc832930ce0a10c2e7930a30ea985a5e26d new file mode 100644 index 0000000000000000000000000000000000000000..b8fc7f65bacc7c78e3a3ec0d462438f2f3276ae5 GIT binary patch literal 639 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 RD^8iqbw&JRw-$~_0|2QSE%5*V literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_2d/c84783fe3a33665c1017bd90975eff43e1196a b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_2d/c84783fe3a33665c1017bd90975eff43e1196a new file mode 100644 index 00000000..f16d717a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_2d/c84783fe3a33665c1017bd90975eff43e1196a @@ -0,0 +1,2 @@ +x���N� E]��o�Sh�cL�Vݨ0��g#T���� ���Inr|޶���Wf0R;%g�����HG�%H� 9$Tҟy��(T9u��M�t�C����٘Yz��0�e�8�����+���vx�taxH9� c�.�����F��Uh�€#�8����wqz�/����&hyc(5��� +�wn���!fO�V�6!>J��p�; �uJ�jh��Rr����(~EYc� \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_34/5b80c5a58a106c2e8a33d34cdec8f5200142fc b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_34/5b80c5a58a106c2e8a33d34cdec8f5200142fc new file mode 100644 index 0000000000000000000000000000000000000000..fcfed122930c64de99f001834ef12cf8c146d667 GIT binary patch literal 3850 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_37/8d08d82db09344a7d0ef4b509bb1585f7b482d b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_37/8d08d82db09344a7d0ef4b509bb1585f7b482d new file mode 100644 index 0000000000000000000000000000000000000000..17d29c5cb4f8e2514283d13ed3153645bc14f426 GIT binary patch literal 564 zcmb1<}yX!@1snaeY7D}ou98O9{Hfh8uxdv_RUZG*(sUV&`@rX&F`zpqc zB%X~2lGkud6v>uIwrrcF!PW9uap#9QEvklnCTddbQRNB3p@IIJjk*uaR^e`1(Ru65 zFY&q_+n2v8L(7+F&iia4{X*jW3alH%0&jk}8+6V`vzu=(*!{~QC`ood^Qf|tZODtB#H`@3v~_`ZFC z8G2UcH*S`9=O0izUOh8^`m>x*OM1Rb7LmA)I zY%2@7?7ju*+Vi>wuocx6zDv}J-u>;B+3BsjS4`NmP;~Ft_dFHxVy?&kl%>7vt(Q&? c2<87$+HO=W%cx?qD(KSr=k^S4$DTO?03tsUj{pDw literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_38/a7ba77c6665931ea6b1967d11fbf27d39c9ec4 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_38/a7ba77c6665931ea6b1967d11fbf27d39c9ec4 new file mode 100644 index 0000000000000000000000000000000000000000..ddc86ec294fedce4123911fd92ebadfff6b37238 GIT binary patch literal 3870 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_3e/69aa9b5c918701a78c5015becc1e90ed173e24 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_3e/69aa9b5c918701a78c5015becc1e90ed173e24 new file mode 100644 index 0000000000000000000000000000000000000000..7efa7a2ca9322a5421f1c950b1ff17006e1e308f GIT binary patch literal 338 zcmbzkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~g5~OMy3eY0em+@R`=j;y=^Hy-rl|b4X|~wALu01nsVZlmgCUnEng0$ynqJYR z^J~${RZOOfR#`ZkTiS0|P~WOzY`;FjTzUTX zzZXxur1@sn7p@|&%f_F-G^82koaNuU{r!i3{l%MK^X=T981*H?*M*58;N0LEVm4RWFeiL0CA5Lkx9AfuO)KN6Z zQ>$E|AvkKMR5 zv77zAQU9$oJ2w5jwM#lIE_Z(c!}9q@v$6uae?3cS<2j!Zk=6ftvgDq5x7_$<9!^^s zH{-!7U7`Fr7n8PgT$;4`(at)K7^VlSC8d8C);KR~c)ifqrO@KW^Xgeu;r8A?bMx=9 zPs)wYstdm7?5Fm$dvR&jT#q+KT{>I|u`A84?(7wqw0X+QzRiAD69TRs>N9_H@5|ng z9dh$D?<`Whxa4|S#FcIh+DmrTuF&tP@#@fU&3Q$@F?cI*;;mYyVJ%A78sUu?DS zJ<}!a-*utI+TNSrxz>JiT3q{N;q#k3a*Sv4if-J$b9Ym3`N6VvrHgJ&-Tmvy`}9L+ zF2$$W7=Gb}RM39#bH$cPg}=XP{ zu47j&ytBT3LHX;J`fBailwT_H+W$7L?Ah}6YxLBg43i9Hw%xJpmHfZKWLwMwH+R*v zbGIL>9$mF=UEg-gxtB}MUJnY5Gi^LG$6?#FS%)@HnLnR#&eO_NH*w{)+m)pBi<%^!JdzG44u*d#OnC=Rtz3+1c4{TkbqZB5TtjF>6>#W4G zwaP2j)MdTdDn0%5qEO$HQ}r+YwWzjGsjs|R$M8cr<-6jKnUd+b|FsMccm)4g`|kH? za|_ljdy}F}SQ^S%#B5y(jQu**4R(sX?^c?9sDBd6_gcrI7ZFT49{z$e1uC=!O!yA6 zzp7nyAdBN5XDwSoyRnV#?3JIa8$LK?-mXu-xyAEWddd8}UOC>%`?7DYq`W#4CwSC0 z^{`y|yMQG#j&^?dqWXQxpPWA-k59(mvX9TG{rh*i==`aZA1?p?KXX$3i|4F+c|Nwk tdD1lZo%_Z5lz(Tlj&G~T+chV5_p&+1s<(f0{W)beht3b_>#I)v0|4iq10w(c literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_44/b3d21dd72a5b9ddd6b39442e013ef105d54ba9 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_44/b3d21dd72a5b9ddd6b39442e013ef105d54ba9 new file mode 100644 index 0000000000000000000000000000000000000000..ab7650e811564455f96338d5f0f647f404230b70 GIT binary patch literal 582 zcmbcd#vT3^65`4+&$Vg70*+H} zK8f%9mV4^f^6ayhmi?(Y)&1^@yMJNqUxqyzr&+pPrXAq1Yud?P8}dGg?aQL*?}8Qo zlB@r&*UkU5?ZmuHIr|q|3w=me2wI*nloS|*8ZNutYc*`S>V3iy4lOFUGNfb zKKj;K`eP4Usiyz)!_R7zJ{b95ShINV6V|=P9+lcUMk#R;>>C!a?%TJ$S@W~xmvZUD z$AaGI9zOItM0C^kUoRP+K6-cU=Yse<-;0z#3ICl@9<=u3v8S!f`fV~|cix|!7X9{q wcj4+se1|r%B%hrmR$`j5dqQbK%^Z%F1#6B^Ihr`T$>?v@*~|V@8eh!;07i=(o&W#< literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_44/c5bce3124baf897d5b94a10f3601ba1b1e16b8 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_44/c5bce3124baf897d5b94a10f3601ba1b1e16b8 new file mode 100644 index 00000000..11c89fc3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_44/c5bce3124baf897d5b94a10f3601ba1b1e16b8 @@ -0,0 +1,2 @@ +xuSɲ�0��_���Y�%�*Iŀ1�Ylx�q�-y� ��#_�ݒ9��T�t�DuYf-`|�*)A�L�,!��L��11%C(�L� �,� ��v�JV-�uE,4 #z Y,�.1AbbF�4�:���0i$qH�F��q�� �Ě ��M�Shj�k�Z�*���9��wE&���_��g�8��/@'Ђ S���!Ԟ��V*�f�� ���V�V<�&Y�v�֒[�d ��&��܂������Ǔ���5����D۞Lm�09�b�nݩ?Y�47v=V����b��-\{�X�t�.�cj����dS�h��s��2�{���Օ�^�=����"9��|����z�6~��lS��x5:�_z6%�=�����T/$sB]��Ms�i�zEӇ +NF���tV3np�#����F��ͫ��Ω���OM��=�vq>Jˡ<�i�]F�i�x���|o���]0 ۳dI��Y}�֎�{� �[��q@<s���7��o�c��-.��w��~*I��W�r���`]��@��sJ�k#|��!(��2x�0l^cz� (*�=��g |V�a�~{�lg�vL�J$�uE�|�7-xOuĪ.��W�I�2�K�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 AEdT%j literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_4f/e381c85b1517d864c25911bac26470d905dd36 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_4f/e381c85b1517d864c25911bac26470d905dd36 new file mode 100644 index 0000000000000000000000000000000000000000..f4918fa6915c17dce329ff3a1f8af686f044ca10 GIT binary patch literal 3848 zcmb6O

    -} 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 K)~lQ+_5c930FF)o literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_50/56f67ef9dc4e7282bde83309dcbbd0d84ed7e1 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_50/56f67ef9dc4e7282bde83309dcbbd0d84ed7e1 new file mode 100644 index 0000000000000000000000000000000000000000..53ae044cd8844e2c3cfb99766f20bc270ae64a7c GIT binary patch literal 3787 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_56/5d378f00c19a74b66314020f3341300ec56b3d b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_56/5d378f00c19a74b66314020f3341300ec56b3d new file mode 100644 index 0000000000000000000000000000000000000000..a5963a197965861b6545082815d2542c8bd8f5a6 GIT binary patch literal 557 zcmbH`8ClcBnXF5ea78mb7LeX^bb3~rjl>3Cv+jfczWR!P4f$$q z_tJCzmx@{|QCWpmAD3pgFmxDiIXq`#PvNOAJ_e2*i)LAia;^|qk{xn&#lfYzO-`jpvuI8`h?azlL&is+|aJJtjcKXQgqpAvx3%Bmfjog+TSzK)=m}??G_eh^d z+@bHQ@3l0izHKtt@@DdMzn}At?cg~dZPu10a$jGVGv)Hj1D+2YneN^Qw0rXH(!}If zH=mvQvgK7>uiSHK`Q@3Du60^a4<&Yf~>QE&It z$EBh7XFuKL9#<8?QnX>tl}~mW+bd+Zw~KsyoA{wa;`3EErl(zkn;&hR(=GWb)2}7U z?e>p-7dJ(>KFQl?x?uVDo%h`zKdD(+W8Ixz5PR+GU*>&o9!!t#*js$NSUT^qyNPtgB60ZNyeh{mGo``Y+36<7|(H*oqAWDIwacGwW6N zWIp`ZyW{U00glJ-PQTqzzj(%}E0OD)jaTK_?AQ3zbFgMn+v;zTOy{FYd6wQkyXVH= Xa>LBZdl&s0-sigie8`?$@Zb*slc^uU literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_5c/b5d6cb7fbcab3febe77019d15e407532a12a8c b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_5c/b5d6cb7fbcab3febe77019d15e407532a12a8c new file mode 100644 index 0000000000000000000000000000000000000000..4686e850a4c9b6823ebd6e4d25841876e280fcb9 GIT binary patch literal 338 zcmbzkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~f@Qi`m+#%Me@oZ>m0o>vS?p^|CLQ(Xj&tH-rkr{3^y=Cj24BKUvO6uRHwfOp zr0qK2c7a=nX!;Aa=g-BSESZ+_?78Ucv?tT2KY9IBe5rBD@wh#u|K4nN?%$m=<;;zo zw{?0!R;{s<;~f1mtJ3DlUC?P;`*Y#%zCGxk(UUwMPB~kEhHvxh3Fs zC|mOi1Am@XDtkM_hrXMe^>$uJ*Aw~#9GY|r%>=2^#TkLGWAsK&QZW@^sN^H=UA>1he+ztNS{Mo($pr>s5 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_68/16e470e5cee22c2b644fa7589f477dcc30b9a5 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_68/16e470e5cee22c2b644fa7589f477dcc30b9a5 new file mode 100644 index 0000000000000000000000000000000000000000..45aeb42058d5c804e40cb9cac870fddab92eba8d GIT binary patch literal 338 zcmbzkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~f@Qi`m+#%Me@oZ>m0o>vS?p^|CLQ(Xj&tH-rkvT3xvB8*W&1fwXBL{D+gDOu zW0I7)iRVhksz*F`pZvMgH0R2sGk^9Z-R=4FX;RJJKZ{D*-rVTker|qk*^9#Iy^|zo zuf2QT)ob~N>`U4wG=0yXxy(H4=mt~!FZcEx{%wEm>^kcw|JpJyE;be9WRU$gGZz2= C!n4r; literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_6a/841412854891ac53ed0f55e345468e25c160bc b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_6a/841412854891ac53ed0f55e345468e25c160bc new file mode 100644 index 0000000000000000000000000000000000000000..93383ecc557a06433565ed6fd49e0b97c6fafc15 GIT binary patch literal 338 zcmbzkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~g5~OMy3eY0em+@R`=j;y=^Hy-rl|b4X|~wALu2N`PdU*&|857z-@2Ofc30_5 z*Tea*Oq_aGXq~&@d+xmM2~XXVXU=P1J9|Q3|K#=4`d;ZL`u0}5{&O?EU9SA5#>|a3 zZ~cu~Qo^-cZEw?@OJB~|*e;0ViT>>T{;l<%|Bvsy+2#B$e};{{aBV CszkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~g5~OMy3eY0em+@R`=j;y=^Hy-rl|b4X|~wALu2N`AIs;x{1_hW{nq?WeRRFv z!|tZ{?xHIMLyt=CI{9-atK~}7nLjI!?vniZRP|@oPuG_`H#dss&$a*k=E7q=X;ovh z=-u>�!ښ`�.�r�=E,qW�� +��DK���FC��}���9$ǜB&���:�d� ;oQ����>��2&��]�o���Zi�^��#�1-�f�gm�V��'��3Wo��%����?w�.@w�Rֹ�F�ͩd�RY \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_72/46533baabea56e7d64619498c66e199328e4f1 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_72/46533baabea56e7d64619498c66e199328e4f1 new file mode 100644 index 00000000..343d09f4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_72/46533baabea56e7d64619498c66e199328e4f1 @@ -0,0 +1 @@ +x��AN�0 DY��#��4M�BB�;8��E�|�p�+��ѓ�h���:�w7�x[X�sP��$& H!�*����<ݤ[�Zp^��� j�Ng�ݬ9ST���$���:|�����z1x�m;K���.���mZ0�'� �H��A�����Oo��mO ���;�kR˙��������0N� \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_72/6b32502b75677c82baf8d2068ab0a032cfe14c b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_72/6b32502b75677c82baf8d2068ab0a032cfe14c new file mode 100644 index 0000000000000000000000000000000000000000..4f6484a7081690e314468bd1bc1f5ea1348a49d7 GIT binary patch literal 338 zcmbzkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~g5~OMy3eY0em+@R`=j;y=^Hy-rl|b4X|~wALu2N_|Amh`GXg(KYql$~mdko+ z?l@U>ohQpBw6HC&s4maZFUvEnE^cF AW&i*H literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_73/f92e35c7ea95753fb0dfed7fce60f4204df124 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_73/f92e35c7ea95753fb0dfed7fce60f4204df124 new file mode 100644 index 0000000000000000000000000000000000000000..281dde966676f763f266daa46c9be2533d3d3ca3 GIT binary patch literal 3848 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 I_Frrs0LH7dga7~l literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_92/30b4c77e8d4a2353ca881357b92d6ab6ac3b44 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_92/30b4c77e8d4a2353ca881357b92d6ab6ac3b44 new file mode 100644 index 0000000000000000000000000000000000000000..feb990d819795a8499a93724a7fc61a632dfc6db GIT binary patch literal 3045 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_92/5a81dad4094a889959fba916e1954e9d0afa4d b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_92/5a81dad4094a889959fba916e1954e9d0afa4d new file mode 100644 index 0000000000000000000000000000000000000000..1e361a2d305fe57a309d49c655f5816b0672bb2d GIT binary patch literal 6412 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ُ�7\M�1.<�� �;I]�����蹔e)��2�����W��%,�C���pC�xw4�����ۼ30� �aG�}�U=/��>!��1��������������yK4��<� +��� +�#�+�F��4�2V�9�?�� \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_9b/2fc84b4913736b44b0f6171a08f7a481b6e5a7 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_9b/2fc84b4913736b44b0f6171a08f7a481b6e5a7 new file mode 100644 index 0000000000000000000000000000000000000000..521ac47f71d4e10a0697a0d6aca994470cf53208 GIT binary patch literal 3001 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_a4/777b0cecb6d18bf232039c3bc56a57683939ff b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_a4/777b0cecb6d18bf232039c3bc56a57683939ff new file mode 100644 index 0000000000000000000000000000000000000000..a667295efae20af30598587b9812c0ee33a2a0b9 GIT binary patch literal 338 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

    6TmD>A}D-lW~Rz0JGYz A_y7O^ literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_b1/4d8fc1675b678dd89cf6d62f4ab528338130b1 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_b1/4d8fc1675b678dd89cf6d62f4ab528338130b1 new file mode 100644 index 0000000000000000000000000000000000000000..22f296bc69b71447420667e0b0611e4243feb712 GIT binary patch literal 3792 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 Bu%rM0 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_b2/5d89dd0925553f65e822f953346bf8fa33d63e b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_b2/5d89dd0925553f65e822f953346bf8fa33d63e new file mode 100644 index 0000000000000000000000000000000000000000..f93fdc0b546ec75dfea677909982d59e1cb68d24 GIT binary patch literal 338 zcmbzkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~g5~OMy3eY0em+@R`=j;y=^Hy-rl|b4X|~wALu2Mam0b^CT+(Zl*{k>XwB2{V zn$U!jU(BY9R#`ZkTiS0|P~WOzY`;FjTzUTX zzZXxur1@sn7p@|&%f_F-G^82koaNuU{r!i3{l%MK^X=T981*H?*M*5;r}m6x0CYaA AVgLXD literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_b2/933380e5fc09140355d8cde946e3c558a5631c b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_b2/933380e5fc09140355d8cde946e3c558a5631c new file mode 100644 index 0000000000000000000000000000000000000000..d756eaee9fa910db6a2cefc05a69f59da6abec07 GIT binary patch literal 3787 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_c2/62e319413ccbfb28051d3a216b151569a47d38 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_c2/62e319413ccbfb28051d3a216b151569a47d38 new file mode 100644 index 0000000000000000000000000000000000000000..1413826eb4ef8880f0348374595da81c86023efd GIT binary patch literal 338 zcmbzkP&0~71sFJ~t8TvB0M-!t+|OJFaG^Iw>;W=()(LtvMaRG>-SGk@LzsGz~8=n?;R1g+a3E@_U@i` z^Z&D}q1vv0rzQ1mHfhlM`mv8>xuaxfpb3^?0>+Lswo)VQ`F-alZ zT|7Q~f@Qi`m+#%Me@oZ>m0o>vS?p^|CLQ(Xj&tH-rkvSuar^&-s*RVNe?bk<`EAQW<60g5sW3Hn0w?}I~r_YzIx|6y%k literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_cc/91c7cc4c0a567c961918371bf7acbf4223ec05 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_cc/91c7cc4c0a567c961918371bf7acbf4223ec05 new file mode 100644 index 0000000000000000000000000000000000000000..68d0f178ba6a0c3636a38cee54dc1b35bcdff866 GIT binary patch literal 6929 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 Xu-KdWY8;H>%z60aS3QIMU$%4ru@E%c literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_d5/7ce3b635d8edb8a726d668c85f68b793531705 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_d5/7ce3b635d8edb8a726d668c85f68b793531705 new file mode 100644 index 0000000000000000000000000000000000000000..14165ce1f55080d81e894d46f92bfa8d6434c43a GIT binary patch literal 574 zcmbL2hpqfJxM$pR8B2gHZf&ZqUppG$yJhm6Vwt~IFEU);+Wv!b*QxC zQ5$36RihQDvnHqph^un0lsw|%m9j$pWXQFYqWqn^WuzkR1wB~6_O&uloWtgHmx9Nx zC7-Xx|FHTp?)78;lFk1gwLH-1oxf~Z;tb=%H)cgkf9G@E zJon{_O3hq5*Q{6`<><(1hL4XX=DM`^oi7tkz4+Xx_x_y@X5aPFBI;{h_r9`CV=85S zAy`)&y5QFDniTBI)!~Ev4ua4>s6;xP7bTSkhvxQ_-(3?Re@?`RM74n471x{%rLs zd3G;va*W8?6D#$?mz+8EQDA1|i)EK9gTFpc-l5y-F>guxM02;Jj~Wtg>omEkhSrtW z@~^Iv5H~61EOV+C%-*zJj>*J6M`y?Ti*@!cuG&${7v(W+;_>?4%B=rNb4JmA^V#d~ o|Jy6E{c!2;&Vz>^Gb?Oa>lhp(&zNO2VQXgV%g5raTV9+30Md{kIRF3v literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_dd/7c789d34d07b0ef46238e19d013725215a9cfa b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_dd/7c789d34d07b0ef46238e19d013725215a9cfa new file mode 100644 index 0000000000000000000000000000000000000000..9f13aa549abf46256fa49f1d3b9fc16217449577 GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_df/920963928b3e9e12658e2f6f4bbf01def1f824 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_df/920963928b3e9e12658e2f6f4bbf01def1f824 new file mode 100644 index 0000000000000000000000000000000000000000..03127320cc11a037ef37c5aca0221dd75f75102d GIT binary patch literal 22474 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 BtjPcX literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_eb/bdc6bc2efbd4dc30ffdfd96a51b16afeeb30a8 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_eb/bdc6bc2efbd4dc30ffdfd96a51b16afeeb30a8 new file mode 100644 index 0000000000000000000000000000000000000000..7e1d88647f55ff07cf09e51912514754b0195a0f GIT binary patch literal 7849 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

    Yxt006bM?X6vwJ79pAViR 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 St~$%+FyHF`j9YdFtN{R$Ffq&k literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_ec/3398f812b7f99c4dba6708cad99d7fd8100a28 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_ec/3398f812b7f99c4dba6708cad99d7fd8100a28 new file mode 100644 index 0000000000000000000000000000000000000000..eb3636dfe99f7efc944818081122cf4d68348d38 GIT binary patch literal 2995 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_f3/65878688541d5a0bb988fff8191f5274647d4b b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_f3/65878688541d5a0bb988fff8191f5274647d4b new file mode 100644 index 0000000000000000000000000000000000000000..244b8d46a2f3bea10d835bbcdc89f40c1afcd11e GIT binary patch literal 3872 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_fd/d806c735d51c6cd3cd467c5e6c4a10fed30151 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_fd/d806c735d51c6cd3cd467c5e6c4a10fed30151 new file mode 100644 index 0000000000000000000000000000000000000000..c85426ba5c93c11c983c9f07ce9c3a97e37965bc GIT binary patch literal 3848 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 JGqjv51pw-xjky2- literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_info/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_info/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_pack/pack-495c38ca65ee031e5a5317332f8f154c915e9d15.idx b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_pack/pack-495c38ca65ee031e5a5317332f8f154c915e9d15.idx new file mode 100644 index 0000000000000000000000000000000000000000..79e39c7de51298ac6eb4c21f9f292f4c92af939a GIT binary patch literal 129508 zcmexg;-AdGz`(@7z#z=Pz@Wsyz+k|@z+lV3z~IHez!1g2z)--zz|hRVz%ZMEfnf^+ z1H(}U28L@43=Gd17#JBC7#Kwu7#KAe7#M9C7#Kqs7#L$27#On|7#OP<7#RB*7#Qa< zFfeXqU|>AOz`%Hifr0TI0|OHy0|S#N0|S#P0|S#K0|QeK0|QeM0|Qej0|QeP0|V1! z1_q|Z3=B-W85o$(GB7aRWnf?e>HERJz|6z32IjpC49vF~7??jYFt9K%FtCU)Ft8{yFtAuLFtCI$FtDUC zFtF4zFtGG8Ft99SU|`wIz`$~vfq~@~0|U!D1_qXY3=FIi3=FKA3=FL13=FJ33=FLC z3=FJU3=FJQ3=FL83=FK385md>Gcd4jVPIfA!oa|KgMoqd9RmX!BLf2)KLZ1sG6Msf z0Rsb@0|NtF00RSCJOcw;4g&*Q1p@<= z&c(pMF2TUSuExN?Zp6UA?#{r#p1{Dsp2NVvUeCb5-owDazJP&&eG3Bv`%wl4_J<4% z>>n8zI9M4NIOG@@IP@79IJ_7bIKmhhI5HR*I7%59INBH(IOZ}iaI9ls;MmQ;z;S|s zf#WIz1IKd)29ECx44ga+44ldg44h^R44j?}44m-{44gR(44jn=44fSd44iWr7&uok zFmN7aVBoyLz`*%}fr0Zc0|OTq0|S>N0|S>40|S=>0|S>Y0|Qqq0|Qqf0|Qq*0|Qqt z0|VCr1_rM63=CXH7#O(DGca&HVPN3;&cMLU$H2g?&A`BI#=yYs#=yWG#lXOw$-ux} z&A`Cj%fP@rlYxPIJp%*x4h9D9OAHL$_Zb+tzc4WHurM(2h%hklXfrVI*fKEi1TZl0 zBr!1X!vUR?$TURwqR zUT+2l-WUc3-h2iI-ZlmX-Z=~mysH@)cn>l#@LptK;C;rx!25%NfsciOflq>gflr@- zfzO43fiH}KfiIJRfv=i@fv=Z=fo~QA1K$<~2EL;V419MO82H{YFz|h6VBqIsVBnWx zVBj}mVBmLVVBq&=dl?u6=QA(}Zew5&JjcKw zc#DBS@HK<9>tQQ#+fT_2k`uhc_&X{ueEGs4vpw~s*!^FUi&eV$UN+6^+^5yTpjh-j zYu3&{wumP=TnpyJiahc-!JsxRJZF{Z?>U!>rzfx{&2X*$Cd^8VpH8JsMyo=A3cTz~)d&Q;P1DIN`6VGQma zK3*1Cw}RiA9pSpSIpp3q&vOj^`HeO&IA?3GRQ#dwxAEY+L)N_v0Wbc`S4@g8T646} zdBvQDl?<7I3?Zcs7X1$QWRA>) z$1|r%x|ZiM^X2*17i5{;d(FeprK7-b`0^zwgGqYMT1(bWPGjX`ShFp@xLbyp)m4e&vHZ>nc4KbINx6`JjMBC}CX*E{PZ zqtZQ}RVI2~b(_38biAIQd$mw)6QfF--R@=gnZsR{Nd?Z}UOM^X)7y;N4dJT6k1eFW z1k3&Y=FC`kGGt0nCh{0LtCQI&Ct%hx9pr+s%7UgMhB+P17MH}x*#nuX@>8}4nm znkQOl=N6R^_TjA@ zocJ*3zxw5QCq!O++RMaO_>t4yygfh&=#P}4>8Z{hv$mBjpe}lT<&x2O-UZ>MbZnOO=k7NpSnQJ9s zbNpE2*4NHXr_SBg>b%GlwlF>BkEpT^n~lrl;43{bHQ^~tsUg}a{e06bSY)P`?sKk) znZSI)lS~KheZI4G z!u+SD|8DoTmK=<|y^E9S@ZZ!*yISY=nt~&JX*VKUVk9E^Rxgnm$%yP zzc*d7x10Ed_!)P-t5H#4=F#Bz8DbIU^J3yBk4!eHWA=Uvm?NXy>eTbuSj?`Oq{=B? z*fC*)A9EphvvXun6hj~N5t!eC$AjP zT>d$Q$MzEQeJh(6VJg3FxN=X;e{L9W;S`<7{797j zT$}H#ZFBy|qTprsU%t8M#Jg`BTT}mVPE%RK!Q$}v?c}Dk!XNT0%lA74msGBpGKt0U z?ADE1(hs;*9vQdVb6oIv5OagY$3f!aqd(yxQp)l9iK!F$ooQ*%mvSRTEIeG$32Ca3Xs_Egcpo;H^79V|}|eeUl29lLw- zv&xc$ov#+v$mFrSv$mgj+V_A7TaU?^=hs=H*7ql{d@0gh$*Pq7J1bA+8}nOh84U3T~?lo|F#E{3NMNFaQd>mo*&WV{*RSc=F23H&a!v$ zeI+Z5{b%G`e2`?72%N8xx@U?1lD0ETRtLS<9>^I%ckx{pEBlW5&AVn+!+7 zx3JFr@`iQFai2|BR%F%e)L8PZhQbl4fY#Ptm4?j?)KVWnum?${RM_v z&4;T_+c2-b*k0ek?{kh#i{0d~&aEBsj|8%~ikQqKWo*u|=_w!F|KRU^Ek4n*<*o~S z%R}T=vsukNBlPsj@4)QWOsB0M-p>?2#Li}y7IS~TU+VR}-31SCZ04!ddfdk5sj)Qk z)S=l@-+1Npy<*K>HU)lQ3vJ$bO-O4B!$oO_nT~9ZjOGX4E(jata=LDgx>eQ zzyDVViwdmm+!XPedkGT<+f?O+iQ2F2&EMbGwEocIsIl>1b}MK8lot<|$reSd9l z`Rcb;E6=hmu!=5mon-cBKBu(G;nQoRCSQzUTWqYe{p3lv#heUtr>y^{H--?dmUU-om}T3fncucMc(pw?y~5Bndlf-Z&+p>B)9K zFsdDhE|ijfUbIaVfn429T*MeI)eKN`E_Bd6=PjU|ivTI%J+n&EKyXyM<#sIYg_17-+O0#Qk^!oNoZ$jtu@^AI0=Lk>TXS0jl zR`^D%LgniJeL7|z91PUu=geBi?))q2_)%xo)vq!>=dU^Ct>1KN9ec_>Hl3mhL#do6 zVU4At6W--1hp}ha9~7GvXU6wG!sA5QJ?@EL<*%|g-#Ndg?ZnMgIk$?~mf1&+Y`rmu zeKMaYe}eFhWy`pZwOHK`b^FEom3@)tS&O{vFY{-fY&`MsU&Vsg>3-~6uFRG=|L2W* z&`O>bv(DD6nvhxS+vYLY73h6v!6xJ`Vk%%)V#N!4sC229J%HY}t3P9`u-^ z`jrgeLq;8eoI5nARXQSY&N-P`z%x58n{Qqh=Qd4R! zYfg&mym{f?HC5x>_#;}MIBJjC<{K`_^AX^@pZ%72yn9ZpQCv9P3~4 zDRV~|$woLzevM9#oM2S|Dw#&V&(P(1Y#`~F5 z?#FV!Eb%ZGmcuuWPu=}gZu)FpPK}K&oHtGM3LECN=|=x{zvQ?7B&XJeC-Wya^6;vD zHg4qd(VuV|v&-PWp8>by7A_`FSK?by$0aoGNUjHcPHJquUv;OvwC!Tyt* zGxXH!vQ<+}I_sG3Iq|+*RV_7Hl`~x7oY;<{vNI=IYow3exMS$Ta)UFfyP(0Tzm)rS ziS5c0>Xik2EnJ+L1=Xf4Ki-}*Qxr(u*e*X$O?(z--}DBx&Un!mKbM_k?A#hW`}mR9 zoU^tT_DON`^ltm(>3Vh5wlyymi#b=THw(pROkZ))tLfq650M&0_THSUr_EEy_UUXn zbvB|~B0ax8kaHF18gF+cj$naY@1s|e__k#yzS-2yxpnUHZI8J`U{KCdkSdfO%1+%*;j@0+|^HpC$QQy5it{&g+@mH(yl@$eIy0v*_rd3|AHt8P2Z{oDvn-KAqd2SH?L(|6qn( zUIXV3so>JMUHm&vue_bJ^T{P;cXK_?UqY5QtggKf`Pb0Kn^E{IYEh~v7sr$fHQLD) z25%Pb*m?WC_BVO?iCm&PR_El`KMrxeXF93mbgy6Qs%kE2C858~zu0p8&b@sYy1o9J z=^Z~Voyk*VCvm@=+>oWQG|!3IzO(TSm)o{0O$(FSIZt0+q4l1#^~Us?M_kb>mlYl6 z&wsV#k8#}2y!2I<*Zks&%Po9x{K>_u(N{M~nqOvJf1<~ptA75aom@e7pC-*TU)8pD z#n$>mc3iWw`1UbBd?E2A=!0h0i`RDP&S6{&7F|**|1q0wzB}WS83|WZ_q8%`Eu8sM zzVeeydSv~A83joqrn8eexz?IY_@1$UW@e+^jddzLg36p)Ra}Q}{JOng>{9;5jT%K~ zMc1%(Ub)A0@_5a!!pyL*C!b4azA56mw})Xn*Ug&By9SGSm@~d?3}k*g`{L&b)m%@D z9|_t!?_oW%FMj#s?3O=ECYW=*_xBgl+pm=@>NlI|+P6KIME5drGb{K=&a`)M+Ol`) zeU=oZxi8aVxkcs0J!2;AQ}5nTlGN?({6VH+54WbqFToF<@~65Ds+=yQRd3?da_81% z`yli(V5id4D>nC~0vD~DZxO}qUGQEsEG);f$3f(M*!fonMR;y<`=;4Nr5UbzU=aH| zePKh!nX`Kiar^IGbSl@;y;1Uk#MO*RM>HpMzT&Qw(hs=BdF1Lhlf52Cq~@Gt5BkVx{p#=TK8>+v(u*@9U%(t7R@HveXCo6mj3VN0Ld@9te6 ze8O(sy>kDNN2?$Ag;vF%uML;X;?F!?_DJ0};QjVLJUqf#S7utg(u}TYx^TGB=Y*ud zQyzijMp4uJzC%j;L(4KOKb-PmJjx@c`-V+pk7c~&^iItg$2wfrS#0EyG~cT8WJzJ^ zCEoLES>7(5n4-kPqrLpC1;?ttmwqV)=_yQA@37Ps;W1qid#b-%e4o&oQ*|8m^DeRe z^5co9S!HI>^6qKY_t{EoW;gG=ak_-3Vp)aqzq_2`ciMk)DQw#Q#Qf6^p1y4*k2kQ^ zT%2XFd$KnBXT84Lhk0i7I{UBu(XlelEZ_f7u#{BB`VTxa>kfAOZMvr5vCTO}S7Xun z!{r4$3trAT8|`*og*SYA0sp~`Ic58o^DLge$Rh935}Un3Z{l8jZY-+(na;CXp~wF~ z#isN!w;G0*?W#+>wdV5d4-YuD?s40k^PI>mCK8 zbWXo?o)^)si}qw@>CO8U5~3GcSdhQ?11~3w=$GboGwNq^T{`fT%TN4H&tYEf6DPLX z$$3txj=Vf++vYCEDP7^%ZAOLf4(_Z92xvK@XG>Tmo0^% z0(Wbxyfe;i?zHM|nI&$=>(ef@fypp6|G|@+y|b3`X7S3|@rI~ex5dR}nHuj}8)8}HEg zeaVD*`8Pj*uJbed_@r#vO5Uu`%Z?;(VsLNKJssO9mmhtUr-nCY-l=_?-z`2c>3nm6 znv{-$>)x}xy_2T@3eZA33F$@aLy<-7Mx$IwkvT$A@6d@ z3l;W%JNKMe*~mHN{XAuJp&;JnZL4?9G^~vDl>F!M+(cS;2hU{QRnyz9Gd^09_Evbq zByG0a+z-@PcsH)sSv~(dQ`@4fslVbhgJL2pSa}b39d2A4cJ29ATbIoS%3l}H?TF+( z>Kgi0x9oxPY4#f&?_CZavax>8d*bej>+|$ipVZXZ7b+y4Bd7Mbi}&e1PhIxEU*kUh zkzH_hQe2E}f)wu`*SeR5ed!X7OwK;f_oi>zIqL!+@8xIbO!f%4dwb{gWU)EePj}$r z6UgN5c30XZdx@WO;@%m_l@f|=d;;A+?cUeEywu61(6(QZ`$%G)4xidf|C=)tmCmz2 zREU(HZf!8Hz>m+V_KxITSxufr7Y~cizWH2zQKk@|@1FNdCU;ubil$|D-4l85_;QvO zUx56b{pu0Zj|m;!yGAR-c=mV3X?#I(6DEuO?&H_0-pzV_|FOTf&tK#VwJ(}y(7vW8 zq@|2eVp-NC`8S1pu^Zz3{wsF5IlX%KR!*(6(CCg0U!HF$yNr|lv}vY)_^W-MR4bhL z$9KSu(U!fi!6$R^fm-gkvx?L<0bdqd_ULneAvG#|9WTn{2%-xJPR~78uD{^Ut^j2)$n!p`!7QLl~V&v z+I#sqe&nA@IQ{2{ivBy7-!C@a%bnNC&pGdZjNEa)8As9;_||@O?Cd$x%+D>`*dlP^ zL%>Ewt32^g+3weKH}ms-XsGWlj<3vpP|aiXNcH|)mvZ=V(LE}%Gv}SK^z+sg;aA_bKI-9ymAMi99_`Xq4+BF!a`Wr{ewV-h zYq0Kz(}k<2&*FOR&ozPH(l7Y&(cSD`Ec;6%4z&6|TYbcYKZ5o0Or_SV4i|!bByV+F zaF(rZrM9={?@B^Uf$S+?g9-;O;$-`$FN-~%e?fAX$6!^)GEZnW~*mCEZn0I?RgzknFrx(uVY~RBuPf=+lJOr9{shoB5J=NLRsCaXOqT1^9OW6dbPMIXp+^FZWphT+a@s0_- zcRe%&md`sbrM*$*kp6nvw7}o9=35=wD6sL1I$vn|3G?KbiievN>TRt?VU6{P$K+CQG2|=D0K}8PpCp>wz-z4C3 zvsr*g&qYDSc;S<;>StA5n!dm8xqfqNGDm@+wvFdoZ~jYsbG~&dZn>L3OO5Zfpngp* z)5$x^2frJfy!!pg@n;9KrU@EsitT7_;mL9LzI1YRj@E-*<-LN&2TtgwZ?7!aefgCd zkNl?J9r7;)%~Nbu-yinL6RYREEhHtQ)3N@tpqGXD*F;yg^8zyu+M3?he|dJ>2SMM@ z-!DjH^6*_3{GfE}zV4}yZASzHReEj#%C zXYOQ`I^8Epf;p|ruS@*fcPsVv`YrY0({@x8s|e=3{&!n<)hRKaH)aRUE|(H%pKwI5 z{xepFeCfZMP?WcA6vgKyc24dq3{7{V=(0 zXlrKY_W8llc0a)lJ2V#?Yq1^Z+pn?v`FAhQ6OkJQH!6q5%#(;^_IM~^Q*WLk@n`uS z!Ci?r49=g?a(_@@7bp8N^VU^G6Tv&JiEOILUw^L)v2uKVXTNyOq6op4vKJ@zp2{pf z@VMuv&~+&v%gkKCS0?NKEyzl0b97>!7wcR2XD*MZ5R*3JPn)SKvv$4w>F52*+iW)X zeIeG$MfNjaZMjeodq6_7xn9B4Fw;sGYy*rKn%-tgQ{BK``tQ^=CWEx-3 zK3WkQy{31zZ#(B3q0}Q+E@V9O3radGuNn9GjjGR!X+m@4>yoEEKEs`;vwV-$%Yp)* z4SGTwgo`?F+^jR(@A7p*!7__Ior*m|C$`-8so4~^sN?Ya;8YdXiHTL4g&yD4jStHF zrgKRv{O7@!C-mpcQWj=txVukqwW>iyd&5@CU+0d^RT2;u;=lBC*@t`sp zA~wC&o$aXF$YaQ~c8YN6>+h~r{aSNuU#Bj134hpO?fzZ3?CgU{Uk=@F%Q&3p)%S7V z#I`f_!hHrCrPj;4$9k)setzOVlVhiJi15U)e4`d!^Rt(kW`%3-*SYrPyovC1`J=0o zr={tZZ@QVB!LQWTH1&z_R#sK-o%v;zAFoV*{Kv2|fzOds_*8U@;?*mPC34pHDhnLm zSwA@CCVa1JagW!XjB}iwS*#j0i^FPaJ_`Sfj1Q9AQEQv)6RY_#anb}Gxd0KSv%#nH zI%@8T$ef&&pSP=D++>#sH`80|{X%)hm!y?h0$!S5zQx)vqO5f+ca@zfPy8>Q@cdS> zPpm53yU~1Rwp{1+t$hPZR*V@O9hIjUwSX%nf@=6 z;o}oN;WY-ekB{XiwXbp!2{j7c)#=dkH_|!gd%4P!-#Z&`i$upc-buUOS(bZi@!gyw z-z=OB`9+dE)V4_nU;fc!`o>Gi>8$&SttKL;AovS!%*6AWyaO2fx4qg=_k^gI)wytgbec`*r)hQmODlBK-q=|CN zh^l^NHP{_I@%{I$mzc}V#V?C$?R(Z0czxER>}wIf?{!97_q>%A_4K&Pe4sg0<*NRS z*`41l{}%1~A?ovR@wC_HRULA2IM@or?)FRlsT7UTnrZ3H_H2d2^MCE{Uwbu_3jP$0 zZ@x75LFLicYEfHCz5ONXv=0=EX0k;5RTrrL^;b_MYj1tdo;wEbM6fAU20ryPAEwJjp&bRdnU*ir}i9`j<@K z3Ro6gxEpxcoI!N$QN}8xtDVL#ICfmS^MC!MO3OsiErt8{?f24B&g(wI`OB=tcDiYa z=+W)W%f6@oj=$pm_bRJ{@>%wLHqqm9hvnEq_kEHys+8ulh^k&$#w&WdQh%xLcR$05 zjW2E`ec?$|c^xNu`45B5+Lr06lV>EW6>@&6a(D>}DdCIh$)IvG5vbIO% zi$4DP#Hr_uomku6w=!l)|Lki1iHh-*mYQsRs`XQBsoB@7)|-FdOqnevV&i)HsdnP4 z4+#uvDH%7ruXG*~)8P@d$eHjVV}F~IB-1C`?sJBWVut#mUNeFg1uEv6eBTfjU;W(v zoLDq-;bCQO!Hxng&*)oP{YKvpi;7j8x)7RMTf3ojmveL1rVBC`YMjM-IRbvNzGvLR z{=-r}xun@C>g!#xKG)9Xr+=B=tv@?i+WM5rX7wmWv6-Q36B_?`Kkqs%!FMv>!swsi zf3bPC@8;_`w>|w-+j7NmQ-_wwS0Aw*Q;L@tna}sU?Hca*L;cI?ITNRdowvLAQ|^iR zLZOQ*t~+fO=y_+wBX;GxS-XT?Nq+vb`8l=~vr@Ny>lb^dP}g>{Y=`VxHM>PMs_(=m z3%iIt?(f$-+HwC%;Nx2xIcC50&AF%|&iM4K#wXK5vMW`TCi(UDbjUS)5N8q4+-ozJ zrQ7Ag%zrxq#C^IPev7jvG9H(nz~A*H^EvZ|m-+2y-K)ffSHwjhtN-x(Zo1fL>@1GRq$Z>g%W{Yyugu;_-dg4~kRc2*v zS-PG3^`_>}AH!Z({^St1+wygHgks_$ZQq%Sl_s)%lh=P1cT79?Z|kRSK~?AS>ACOH z4lLJwDIQVz=-~^$We;ov(zp3$F6oU~@>4v{ebLPBb!%A{KTtaRe7e{_*3Kp3N%}0l z^>UtlF6)=hRM0u$+sLs@Jfk_qWUioyyR+nOHP?N%g8ARyi|2bM?{Vu((fzAimj9ul zFULN7g?Qm=iA_$qr|&)rS{u~0V`;Q+=VtK|J2`O=gG>Xp%WHQpN}Z(Q@TEt*Y~r6Q z?sv=HIh6HP&Zu6SQ4+2#zUp`DT<*MUWko6Plx_Pws{hyXiSIJ{@#vRNu@__V>r?Y{ zRW2v|=Mq0^x$BC$QTMD@LRFLeH(m6vx&K}K{QT*26r&lvnn>7XMN&r&8zTw{yPw^z4w8Vy<(I*d>@8<~sQvc~$%&?_6E^ zw3v+UG!Y5Td>M(Oo5LseUynMk z(VicIa}zb*?#PPJPnMchE}`||3byM%(G1Sp7meNMQ#!4T2~LGK4^U=;m=?5|IL=z(@P_w1w_^F3S10VlL$Dn zTK94LzocnN2cL*_G`4Vm^N>i?xqXHu?9g>x_l$^yeR_u1(&tHJo=K2>eWAd@uVq!` zoD)G&?1Eb)X358FuX(-2s-Nei`J-Rf=$XAK$Q*2U8lBXt=uER6y>r`Vu$YZ-Q{g7Z|jTN zb(o4I-S&J^C2?Bw!b6$c)7h@rD+}yoc6;+PluhDRof~&Wmc<_agLdkjdlX_{vdc=` zj%E{_9KifS>QVmnsq3}e-d*96c=Os`?v~J1osBk=53+F-Uot-3Eb%TXX@y_3t$1|d zn!i?AuO~m;6Cuf_=JovIm-);1Z@g9$j8$UgXU>pR{ZJ|Q%D4V_XqQCR6E?>Wf&B`S zYKjf1dlPv!-SoVD)Sp4;`Ant%k{Z%8)+caYlYKLDU&55L7T51&bxG=rtX&mW{~%2! z=|kKj{;ZtkYuY4@v<_~cp?uEkjb2EaoeD44tJ{|(-JOeY;t$)qEc#Yz%6<0kM z-D5Y9{FpFFH^$%8luyU3@m5&vSudV#Qfg~wwYwb)bGPc67;QZ-d7`s>wv_Id6}IiW z)Mhojvo!qw_M)%x+(;?M*;Oy*RcElXo86Aw6tkg5{MsTZCteH7aJ$*j8$|yGoY}&} z*0Ow!RNxV{x5^(q%q}dgIidE$B-lnxSt?BE1VikC`%>C!PuA|!waES3B_kD4{5zpQ zBg0-MW_u#Xzeo|C!v<1OW_FK{zBSeV&6c;*?6_P0+oqRN`Lnx|bpp86or3&~r#`x9 zc1ZQPRN;e#ixb6*beM`$+Mi9~D{_tFma6Xe$cbU7{#>4E7=K?@-i)vRh}4uzb7!eojZ$t|E*v#3@SQZUBbAm>+0hWX!lAqoUt)ja%)pW&RY+5GoQ^ zbglW~aOJ+V(Yl`glWIKS6vXt`fK`*rb)@vn zQ!!goAII41y{+{9(x&(+N>Wbx`~}uZwvYpY)rkRBi?zfYvv1Z(-;d$mmgVz&_4jn= z%T_|X(#)E{(r<6Nul)K=>&};Xao^9DKF%&tEwjt9>M}ACw?1B7Z&zk9slU?2vU2H$J^PNyIPQM0`Az%Sq3z$(W?XO(d7?Q% zMaCnQf2*l-ilDOQ%Ka_VA5YBI=9lrE)0QAxeAL8tMoLZjo?9(_yRBqG4cw%59^J>_ zVQk}{r`lt+)=^a^;`_#5;Vq)P#-;u@d$SjOaCm)1Cd!1tWb##md3VmQ*<%y!u{hka zLnf{I-|j?rjTO3$diNX!1=?GkEo3@`O+xl5HivRd|DW}S^VIAQ`&Yq}xluHIb?Be} z(Kme$eLNJx{O{$$V3}tfj~45GeAj35S)!%kVpf#$C0Uu*7iZ2_4s=xGb(D#EXYnr0 z;a9)RpIPP35$bnVU8!HR#zSR}!F7jAvfSQ5j@*wkY(3r@<=9JY zJLqjBt9YLC*OCj$7iCmd#-6{iBj=>$eOdLnMfWp~pZ}!U*|K?;ooc3XD5I>$Je5H2 zUu7k8{v3MfQ2u5o)4yWbxWf${(wi=CE9`0TtY81U!T5BsY?jsnl~XE*wr$aEx6T;j5Evg~1=n`}2ew#2o}zcBFz z55H;REi2h$=bx;$_`q~AcTZCKubhpoQVYyv@0_na_964qhYHz!TQ6^X>AEXWSWf)j zsoOi}v`L>$eRAi0h|`pVdL437i*qlFsib-^KI>nV`8sMr_tvv=(s!M#K1L zx8ketlk&s)axxx|s|}}`ici&Zn0ouDtlg`(m2!%e4vDUnb?#wu^*iPCq;%eYcp|5= za9)6`(h_#fg;fWlR_U$~XK0esjy5fPviIf}6W8ZGB>|iErS9^Ov(%iO=kcn&yQ(hw zct>D-^|xcqa!z}fIHgbj@7DF~R+rGST}My;YnOAmwJPNJs=^*=^XkLhv6;({o1c;E z=$Ux?u(4an3GD;C>gtyNiZo*6X1-jvWRhgGN@r4r;)OS$j!d6D``4kHd}IK z+lD#EzY8dtK9*Z}G|jL+d@}pBnDkq=x-a%^F;SG;QaU5#qMG>O$Ww2&wa>HPP%OPd z?u?Ts->p3g)o0i0{hp{4#p%nYAa|C3!76E+{-fF(*;|VFOay&I9?IRj`9v{x!Tc}( zHLkyw7m)XEopx95vnZ$PqtJqu%I;0lg;$gd<|zG=`(@2HTfi@fKk?a|(~%bz9Nm)3 zF3&KthI8l4^P(SE+1=;dc&akFB0-+rqiIRM`dZUVVVqB+Q?G9ed($t^U23(I~ znqYZ#4(7{VGUw{f&OMXyXvuYU7Y#mn=Tp6nLCV{$o#LZ{UriFc?R@@)1 zVnMAX`!3$*u$tTVV@34kyLjeKdcWxwk9(eFY}{2=em2Y5@>7Mm{gyiH*(lnRaeu?| z&S{fvP2{Iq^tZ)Ct+*fI*K_Dr`yKYbr-J3DFI&radgTo3Gh7CXq$4f1O39VUuSoqm zHF1xx8N(*!l|5YRie%?smp_oUOWWsP#=+7r>N431^LtOb9hN`1peO6itls^dlCoPi zD!yF(QOHXEj8l<%gW9t+`M3}pfBvR}w=QsC;tHizAONK(z@o@WtXD#g(Y?{*bKcD-)`HZs) zojX46QO`Tq{Am+ zR5;wX#$d_Zv)T+9zNHI(l$2$zHBmTL_WJIu&i?PLtLCjtnzHp`-mcXOpYt}?4vSut!ZZX_C^~d}ji@S`3o+@(N2(w6d@vQlk;uCR^)AsKc z);EeePrLsLXuMZ)>xvLzv0zB@Uc6M%jFqf8DDo-n{wybr$8+cw@G4TAF6DQAg zt7S?%pNV07v`6cou43%j%X*jGz06YhmUTporyXxy>L;-F%U>BC?54k_o%zi`hZ=5t!{cd^5YE4EI(c72A0*pc)mCo=R)7i?(H-5=(3>(86=tZsu$*1PqJZ+RFGF3I@fX#YBP^7RrE8?B?875@jD ze=z4iIQ99pg9hHxxq&I{PnA?YuPdC$$f$PVYHp~jExYzKmRCxKwKs}vH8NM6Uh*<$ zR?C;SH@9Rcg*;iL_@-uE>oN(!N2@}myoHmEl)@w@>FiO?6wZJZ?mjtK3F4g zH+ojjR*}tt%9<1E9UM+~?SJ?;a#?~KchF|TE6SF!C2agWPPRNQZ=%C^W%maBO;z^Z z9k|iWiD&Xnrn#Tq+%-FW;MFtbNJd9@gZNoxv#TF4cZ%-4{7%|QIXdfHZujJcmo2Qm ziA}%y;y%-pf66hlOD8aeeq1lH*gY((S!YXOS+{bc-(rcYa^fqbet7Nl&YU$TVnwiW z;qDHd1naFOZT5z0bEgSxv1Be)ZZKXb|01NL_n=tEo|$`|mq=aCRPI?RwJ0vI?T}L9 z?YXCp+*ST6+^XEagTa1p(G>j;96jpBdyeu^ z@{i%oPsw*QZu2PbzOr7}TwY^l)WcW-A=Sp+#x!jzyVx>}Ie#QDH z%7+4DnGVY7^S<#pAochK&yuwZ+L})^l%MDy+4^PHPKH@ADj7eOg)go? zXQ%vnm0`KmMAsAb5kFUI=*_vMZc?klQ@1orM(ap~K#RqfK(it@NuPfzA~SN!67FZ6 z-f=b|Yki#HsgI9VtEgMGTE1sl@nX)eq=fUlt{HmEgH*IW1+H4!p>sORTb1Y6%nFO| z#ivya;$3<6|9z-XsPNYB-Eysh8n1j6NB8(J&1NYcmzoP=PNFjw|7F>#;?xz9u};Ls zNACV4@l4^nH~bPERHAv8`77jAD61cD?)(wPWW;SdPbKGh+pX(wcbe**c*0@*DQ@}E z-yJF&cXLErpI4s$=*^P7GF;aVG6hai*)%mLNc6+adTrTXKD&-wd>QuruF5IhMpdhs zb(!s_uIYbQ+fi-zG*{*FUYVNH3uaaeIeEMMnzQ%7mb1z#udYezUA8J({$Y>Crz)eQ zsDKC3D!+fu-F|qr)_cQsoQHZI{aR}G;DXBkFD?mMj3uroq=GhCUI~#sQTauc&nYTk z#q|H_uJQ^(^3zr1{++(2DtO4Q|JB^u3BS~nQw}VBBq{PMT~%#~`F@Lhg(V`-ZeRNU zGgfW?{CBGAYvwRtxHw0QDepwIsq3lK4|3wF`g48f-1{!K`f*z4Td&zqtRg4wP__7D zd%fUE*<%0wyG^rxNv!@cN^Zk-+ku8VtISj<@R^~1iAmIJ8|4C_>4u5t@EjOsw=Ml%|EVqETRA8 znF<#-;grKiR;sQH@|(Tkv~9%eBPGA=UQ{n=*&eC7uH=jNuE{HVYmRAju475|{2n%4 zb=UImC(1+>dbJ;NSsI%%ZVWy7QFXV{wvx8Dih^vpn(yqc-dwu%j*aSZ!5zmY-+6Xo z=Z%KVEY)-F>fhH=J##fe-$F|`p2vLm?9=HlCtPxvsCqFp)KtGrP32Y9!*JPzJCBsD zI8`qPoxG4F?lUL)a8u}_x=CGiN{*@z*o*QdJQ%j`Gvj*6^(4i8Y)_@Lq?%VY?mEQ$B12=1zxPZ~^$fM**TtnAA1)ayOk{X1dS+gR{LjN`HD3SM zf7!N6>f(3S2j)v66$@5QRoj|3<-p{J=Io8@+%+$!O_}rgv$)!+S!;4G&hUN1{nb+M z(v9-J`BEinKepW69_bczxXtQty}ACAmQO2=sr|Se=GjraUH`kk*oi=<`$xi72di^B zB)k??O8Y-$R{xip*u3k{yR6jt>I8I6FNUsQoW6&1&I!)dU76A9a>Zvk{+AoFxcj+< zrE=)pJh0-tx)T4FxPlz36^{+QBlCMzYwmsPQdjm?2%jC&7#3Jxz4P+>s0rORG3u(z z*k;Y&%^G@)H7R@XBg2KJPcEt_9Jse8zAN>P8$Z+BqGbmjZ#@{H-cULzMm+9T%Pprx zmmY3h7j*vq0`;z0M`vDP=bv%sd)(5uURxNO%eJWZE}o~WyRTzS_kQ~YdOv5}VQM+A zJ~7ko9AD|N;y;`lm+R*3_x4CUtbVws>yS=F$A@X+4UUYWJ+e<7`_)hHo$DqZqw?g3 zW^8y^7SpM%J7v|+J@`3$r{}XT5nKkf_T2gBuPvQ0yN7kf&}$%~r$9eRAT8LB1*v{`5pni@d|e*@ey;rcynhY<;8M1?roT`JYG&?gOae3u(w9Ep2`$8)^mTFO8#Hp!FTn{ojNg%^f})T8(cE9 zl9O@QE>u;2a))8BMo)bK1D9T4LdGxVnuTJ|-4xYiH0G4BU;CvjbtZ^)$E(b2 zt2GuC^3PN*kPN@YV;Pgp6xIJyQeI=F*Yp=sO_sd^Td#!a8Y=g%a3T$8`&s{iF{7mU|V zWYxH5yL3L|UWW9jt&Sb@w7!R2Ht5!PbkIXTf0%`&4}t)(JMy`0ZkFY_;U{ zDcnU{9+Y}K{I#fmq9*fZd%lj=)1qpVHcu?Dh-CJ-+oZ|f{Y1#AG*ylNcl7s$T^R?A zri5r}PtE0(%;!v&df9*HpR{SC`xbjmQyF9DI79XW=ik5lexcR>(%V^`nwht1FD@0e ze4X2>QZ8JZ;2dpuR&zoB@(+t5K7?=Nim?no_dqh>?Ox6G4)OaOvs16WwwTzfcWp}4 ze9KPFgCb$;-Mus}Uyis@-BREqWbN3bc}{iS(p4JEZ@y#hTDd4-(baU_49yQsuh@Ei zu^C7nSg=s6^g(XL@ugbq6`xL~cf6UhJMg>rxlH-nEHhVWaX-I5_0Cb@^!KqFUhG`u z!N4h*qa_@$jCY#t$F9}KdBU4^P1{ra_luTt*o<%Mc4t}yKkx1c&VKTe>nFdK=6Q$s zA2Gj+@2C9mH=Dvc*RE!3GSr`{7dtt=`GOCtakI&RlnM3lYd^ZrC&ZuvYK? zJ6t-8y>4$f?_yg}w>UBAhMrdcr>9cOR~7Bp|6oa&l48)I#eGd$o6?WvWc*qpH6>7A z$f9`Bg==3-wYI&Q?(txQRs2igS8572|COX}Y|`4!b>_>-)S0`2-jv5qG12Lq(c7kV zEu=YBHz+>acZX=eqA#;IZtu9F^*+(?&<2YwMc*&?KKJ?49g>`-t@T&GdeaHD%;xqd zRo-!rrtH|TP)u9YR`Qdnb!cM#Yvzg<45_uZZ%@#c+`if`xoxdWsb>6zNjwWZ^P~Q0 zOYwZYRsDCbz#+M6yKv2Xla~`rwN)p#IGjIc9y0$#`)zBjvd!hSqT0GYp3PdG#A(dY zSbhJ^<2<*FyQ{U0STxgwH(Pe>R((^o|4r!Omo-J&CY3qcdT0B7xwz*c4@c{f!XK|y zwQbyHK3t@hk#O|$;u-SU43D`NEYXfQ`}cL>`im+}*S5RPYCkw}ZLhd?TA9_BZjYzU zW-W`q2fp|5{vso#oqoJsNGk4`*vr7mFJAXoeDB+urk%$Ut)dk->8Mz9yxGjD+NOf$ zEZQ@a-uE~3PPhDa@#2EFsq!S{lSgV@bcQi>z(b73N9@WoVL;RnfCXj3wI~Q zPF7&)c>n0d;XCt!|4r2X`8}lJWcIhKRypZ2+TvS7Ck659u+CK9vSI3Nufp!&lG#cO zQ&<@4bmS97xUUpyEVDRpo^!YT-pwgi+jMk}opBDF|2gr!$CmiBrtv3x_uSBNx3lCd z-KF_O?0omx^V;T{7R`UD6Zt9Ff9r?XO2%iOqBKjMobbA+uakJ?-!X6gW3SII((3#8 z;`73UU$=CcI+_E&7IL+#74Cnd=%?{gBJ-3^=UmxiN3tSY3y*~czu$B9o9W#Gowo$9?uHV1TYVnCn<*Ng9eitndbb7RrpFO8oGpfy6eSUSH zuE0E1lMBu2>NVLDj?A`B-BPV|aEX!loty3g+lu^j54Uc5_qF-W z3C-4}ay*K9HX2*>bw+cp1IcJ#?nX&7t?p@W=_=}ScTov^?Ri)Cob+ax|PGk$kJGZ2f~*t$_wFTbd(U6=drsRXXa_A_rX&y}sbqgVN+Bl@%Ip71V~2O^G3 z4lQmhe4$sj!}ptyhv=5#w{thuADUyJ;W1aQ;YZLb<+K^U@@4N&Zw|N{dFDu!-h%JN z4`%OfjSO46{DA!0qm~wR3-lHhP1>IPP1eQoU;1y&t(PC})wI{!&iO65F;wiyVcA07 z9I=Eu!C~L@Zm-mPy7tx_efhc1PpgG_o^xZqr}r>r*Or$?ZzJZZMy7end=e4Axmxep zFDawB+r^?jPTsa8b*K79-go=;Sx!BhvnnI8&q~a_;X&fzrpkrq^f`jp#eXuN8aJ_5 zB<%C60>{9NWBRfKTn+l0f`dKxL4>z{P-kKuZ#ugz4@YH;?&@z)!f@;MaD%f0@W>Fb>8-N_lnkhG^D zi+{z6RWa%un)+F1;#C={U(3r{wmf8>Uvqzjq=tTZ^2<+Kg0Ec4?p3>zkWkBCX?jF| zc5|BK-_;+lYu+roHS^%&94+Y&`g=A9x<4_ff2kEvchTraGWWB2`uazTE35Zq{I=4l zoZ7v(Gu%Ju+7JB`0miGX9sB)svMoo5ifRSn?gN)m`hoRsXkS@_maWqZl;-)*h$Tnq?*hi}n9h{h80Vt%)V1 zXlAqh3xVfBRT2j5^B6zeRVkLwHIv?UHAnlyJ$VrW>*+~LW-or+DQ1^!zdN^Tqj8gj zflW@ZZbK!jpqJg1NY6`0cG`3`8hDnUt*mvuGsDDKOK$JU`l%1sNE-NG*)#Q~yNlR@ znw_RESFcVAk7qFmbT@XNxvK8^y0GRu(YD`Rx9s;c2#hTHv?c3^*TOKZ@9u9ycwZbi zVG!KGuEce)?@aPO2iZ4^G=+y6V@zlOi8Qi*_YQ%J7L+I1SL@=gPG42e~8*I&fQ|~y+!cl&k6UPpBv0MeX;LGx_C{G##!-L_L$S6 zK28P?53QS7xoq;gEK%0;?j(D-BcPSzTW>PtbGATN3*2&g!IwZ4(SrEq%W7 zUePOA9?$$XAR$I zvV8Eper3L$WPJ1TL#Gb$wzU|3%y?Tj^AQLC)@NM5n=-R}n&LQ&L}!PFMXXY@dMVE0 z%Xp{nm(`aqMq;|F#4WG$Kl>US(^VI`$Kcwd!$!)NOB8OdHD`+8Q9ENd@7A@3XRD0# zm)TlfkXA9+tZg^z5bx1TuHx^FO#O`6K8G#nJXrSU$Bmcy+_zHq8rd=&4w!CvI`A0Z z$ICZ4H%(b6A!OvTD&|X7mb}K?U-he2e{SBE{ldt|Z*^1;Ptx!D`*TEl)Xh8$bEf(j z1$XB6_PzE?wK20v>sl6lB~en&sCL?#{WW20uhez^-cqf3Wnrcohf%{Gr;@xow^#mm z`S4)ni*2XePd_$lkACaz!lkx2P)lInhi~rwIk`bbT`N{BJNs^uK?n18H(591x&#+C zqb=pUtAm%tO?#v)@8Wpv@q!!mSB&;gW3Jg3lp@u?V5gjy{Y#?`6K$iX!v8fRXRqar zZJyWh!lw21UgZ#Dc0Ps0FT!Qm{LIhIJtV^|>7Oy(*g;iVVwTvx{Bqs{PcxI|XN2h; zGmih%w7OvC*6Ml7v%Runjqa*_(KX)KcXyhAL_zQw2}{P)4hz0kZR0oIYHSuy-|~+rW}d+!X7}qxJu+cen0M(zzz>y7fpxQGPn^3qUFNHa>|AwEUsi4oq4~z1?>c_jB=E+hZrPTdd$mjo_ZaUnd7S%acBk2OJ43HC|9iLO z=1dD^Gr_$9h2dcG33my@rVfT@ZVkHK<}v=0YkI^<^9 zEDX=#5;65#utrtK`p2eoSI_r~`XrtF8@SFiZrzWL#vpb}(eR@giZ`6Br@wJC&C=&d zET8j)xis^@z8|6C+l8f$ndTi*ILFd%tM?{PDCfwnvnMaFEjI1hv`E{B%TVomiHoKF z^4JA!JReP$w(#l69iQuXCZ?h^dkW_H(r!6X(^b(H z*{jm;{y5Jg8a$W%`SZK4q)peTEVeba{91HbY&Czk+y^Gj3ztl{o@WfYHeFV&^7i6? z_rBb&S@!y+>0{yL>ppH#m{qmk`Hs+z;}1DwpP0UgvZ?dvymq+v*!?AJkAL&cESY7- zaAW;V!K5996`$jGzEoV|G0|V%Ou*}BU-X|-53AzxnzLmx{WBbM%v2P&o?C4`L*Hse zLq7YL$l%mPd}gL5?(TOo&WYB&U9jZf;Zq%ZmOn6a=~#NPYnO4;i2~&h^?R?K>eQ7p zb2D)IWNfwH^__aqoP$rwuKab;GV?#hz5VMv{VQ)KJ~*NK!0|!E ziB1HU+0(A4??fAP;}kcqRiBZxA#v-%RSCJ;Sb2=C{UIjhsW5?=+hW%$Hl_^sGw0CE)MBMf|`0wRZZL3pchc z@~f<%Kk zE?KTVx?SDeNOfkfP3hTPm793hzdo?{#9I+p^CbPR&E{>-ZC9%-s4Q}S>L_GjY@W)p zVXlm1?jEj;AG3{Se{QR42ulvp!C#+M*KBv`>zQqD zL?7K?JUL6?kNG9_b50%HUxO0=Rj+tDMKpKa6IJso2UbVznKSiqsqgf;M$+urJFibL zzw>I>tL^@OBCY52tqVRc^;Od>$o#FRwr5pi;<`KP%s1YwKjGTl7-{}FJipmRI^Rub z%N>WOE)8emk9nAXe*55ilH9bz3)i#!&dlA&vvAUO^RKVhv)rlc*S}Q4RlDx$-(U^Z z%@#c7(%VmAl zTzD+(^M1)+)f1ibu`@Ex`*iO7{a+a@V)<=~GM685c={=`YvRv+on;H3Ta*?QN|qhm zn4|cR^IFh(rzZ-lJ1qL1ZB^f7{gb7yuQNRC>G>tRs`3^yZt&f3UNj|AYj(5y6kpwQ zOV2&FnEUavA|JoXf4laVth44kofE!N(PEd#%XsU@A5#-}+bSQ)9@+G(?7qdR%7s6s zDXjBZ7xkdXFv@&x#)tV9r*F;rTKwMCUzXX`(fDnjXnjkw#qTwBr<61Q`ghK}ee#8d zV|-`fV@uA10#7PLY@deccHcPl;>t&jQ%072{DGl8d&+jKTVpcAY|*oT3-gmKvy|LnL-{gM({>1l%mi|vRKT>R)KYg>YR&q_rjI#9h*Om!4 zmI(X|cxT#s-tdyl%@+^eJS?+p%rjBwQ&}ABz3qC{qdgz~vcEI1?3$>-Iq_dlR&nvB zzA4%|ynBytvg}Fbz1*-=mvIO0g7%8o(0N}gE?drixj*`j#8#G^__6V-)qzv?QA&5bQ~1*o zEFa}8kY9aj*(Y8%i?8`J(pKne%UeF*)c8N9=$1Ce4e``{)wwfrGCx}Wi_pBd`VB*a zooe=Nb;qF89g|mEY450zHM$Th{UP?4CmhuIJx`t^%ivQ-MDlB^y!DDI#fv$c z{O+}9O_Dc!I_15$Rf)$$75#Z@nUWOG6dbF*Ipv@KQ>*Q%e=JW_dVl$%I&C(?(*=yv zmkU_!?O(oKaNg@VdlU~%)LXs6n4g%QrgYxw#L-zDb$&rYr|wno9{Fnh!;Jr_)vcz&_lYHc!#8t;6n$n+ zHz@hyV)e+nbJ~GEdm+solb;)Og&kZuNzv-d29`tq*{>>$4jUI~u6C3Q;4ZcLB^~Xu zKIVg+OvRso^@fWC<$knSv;3B`ePW_-+VZOX=X-^%4`=LqWX<6)tNhTZiDD}Z|D1Od z6OoSO4YL+ll;#$CxOm~#?&lBWz2^NkOMGH2^v5Sh>4NAQ&O4%;%42@(&x-nEEnRo8 zOtGdzciu1SqtA7Y%Q7!NZmpF6IcmD_3rpjg+}G#7eeZtl=5DQ0Yf!l3<96jw9qSJA zO)TvanBZ!ylWU}yz07%oO~J8zNB?h6c`o!=o89?Wek)-Pi`&*^XB>8W{@8Oc*gE!( zM|{loU1!R3wQ6(hqVt^;>a5GnT#qLyEr@#*_F#GIM4|obm>jG-|5|Y*O$yTUNUuEn zUZLsw3Qce8xnlSBrCCpSYZm^z>3N6gCG{t5*7GN(dxa=|*>mset)1y_KU>ceoo&6y zbJMMp1{QbJH}Y+snD6oLTJKux;~qglCCApXw)0l)`Mk%r_Z90U>wCOy%uTs}RKx}9 z8A5}Yn1c8=THlww;`MJOuR_v~uCC$@L1rf<7Fj=H+MUQZ_sfQ*Pp0~3ihJlOycD*6 z6&&FD{B_}%a=I>l2B<9_;es{X_zmO*b^V7$vl?z+vIoNzlu>P#kpMTtwQEZ~^ zy!f?mm(+N*?XdnE%zx{ampe=QjPy5UI3^Pb!J7O^VX zs1+t?C_H4~to&-O#BA;+yzH}+jl~0@vn$Rm4Y#ehd8m0#z|+G{xi;4GQ~z96wao5m zy}w)_#?fSP^$r`mtW;~IiphJn-M!RvQ!(vq>q;FPCu?p)j(nT1m&Ie%rLXSecYe9o zCUpM-E%o!-&L@*ZSp1dVOqIRIW|QFhnNhBLl2iRg~zLX`+Dh(A+|P^X-3~R?fotI#q5K#`T5|*_VN#H znr%`hP7}KwcO{hV{G#&Gt4G}vY07Sd53)IYbYASg2b;G#bk*wO&CR2H1{t?DNT?=+>%^Z5iV1V{uz9NcQ*2_%(nY#FnZ2(b2<_m> zX0v%_yl`D|X;1g7q+Ng3Kbn8`r`2YgH`|>oo@F;`1?cAFB^D{^-83t+`Rcy2<%+8E zpV?Dqxu1U?&^dX|0h^zG?~MvK=p9?KWr6pCI72Q52_xADaVz>3$AN}!Q)BFb$i_gog)o{9X=I&G5h`t29yO!Di=G9dzMg5jy zjc$O=@n)p|7hVUHQ`YpHAuY6aiV|^GRcH;Zj-Jf%w+BQBhvS;Lro%&&d^|S92 zRxpR9&9$AJ|Lozpoxk6mzi~a`*q_>mNnDF;*Z1#=)Y9Bvr>;I{&3@(BOTKAOY`1#% zR-X3ye<(OQc-zX!XHP_)cd|XaPfz-{QlgWjhgHgQyKIy6jt{oySo*&{VZNIZaw_1N ze|&fl*Evnw=WbpLdE1qO5B|%~csbeQa`Ig@+m~y1zGa=O$E(bLiGA7HnfE2cLT%s8 zsra>`tMP5j)bkRhr>^C=8qcxgJEP&ICfq4j_G%{k9l5=cr7!#J6b^a$q((U0S)8C2 zF{@gL@y?kpJH@p7bGCYh~%29D_t^Npp%1?)WS z68e&A=I`r!aad&Oe)0WD`TllcvW5(^HJNr^5xLC1aMITId}+LP2@Vfr^<(Vcc$lnx zyCzyKR64BPF6-};>N$(9tT>al`H|F>jq(519=9u#?Pp|o(z~XDE7d~AUH&!0#`kt* zM-#s;ls~$?TB*uvkEnwouf3gJ=$-udAZN*k`yBVfwU5R#{bu<1K zxG(#{($yWi$Zln0_MZ()emtIhd=}gE&kHAJ&e5=2t9p5c#{Z99y;Jo{vStbfohjLE zx2~LXn#r8)!b;~J?`x>=Y5!->Z@2rR+5MLA}R;=j0 zC1v-~Zql0BJ`)t-I2?s7ekY&#jy>eVbXv4RIcE9zDkGt$^ z?U+-ZD%Mgq_ryMn9J{}rE=$`sPI@30(UB@25r4Y3%*vkiO<#z5V7}$LT1oE~vp`mZ z`Yd|~`6$_Cd|ZKg5w714cPx8osr|*?&687c&ELIo_wMhke`%IK-e2_CPDau3i%yTRxu| zo_eEa6Yq~L>|fwq|NSiB;Hhk9%Z4v8LJ^fbE7|Ha?f=>79KBH^vO-bGLx$;g z;B&X#PaGJ}HlM%2?Y~XMZy%4woDMsSDj5gPLu;OB9_^j?>frI5mp(-}aLK*f z6TKqk+g15+nG{~QE=Smw1RPjpsTk-GQS`^a==$zJjXl|Q zMj{6$9&s;rh_hNPW}&vgrfA00nEMykIPSUK=}>jyqi##)=frgdjBgHD%n|u?SIVJb z@1f6{c`w$^GgVd3E&j=@_A(tWoxRJ}xJX&g;aJBZ`Fdy0B6rie zi+`W?1bkil*x}gmj92@Y%ne!SDKg)N7sQ^Qp38Li zr;S{-id0PMWs#eX3^N{iE=aKS4Vyac{M3a%rDeaqa#T&pI9XL4+4pME!Ff71Ofe6B zRXFM#Y4HBu@UMH#{1s&@I@2;N*VZ{Y$j6s_FMIbhWX*Ag4+V=$ZX8_g=vpz=LHmq% z;nlkbUUS}RldM%0c65E2zqU;8_%jK3H;RmsaL+e>(BUPSeC!osP)GAb8`e!9GCm8c)tIt-U;zC?~eUhju#k}gB|y@O1GTu z<(9sYB73MSg}Yt8#oh7DJu~x;O&>N~c3-mLONXl-|AS!1&o62$Upal)m|yXS;hxwU zosd#v$3HcCZ)fK5W`7r(8Sq?0us({D$w}nn*WAzEN4Li8YTJJ9;l~TcXBRk$#Xo9! zKiRtERn7#(wkYL+-iJklar>*(zDBo&c5SGY2|s# zGiC3RlL=0y|6(&YL^aQ2c%zeF4F9f1rxQuVLS7=>kDbbSeB;^j{8B28axpB9 zTk>~ZB&$oBRwY2y^{j7+yB(^f^uFuk$l(paCq(P?+o>5muBd{LQse8seD^&F8-$BLZ} zi2N1ct6n84H7(%x%}Xv~p3ELj2Nj=%%)a>GR?!mvirS7l%kpeRosOP2ftakq{ zyIZDJ?A=HC#hs45{PKuiwR8lu(5Z3sLd6-4VKQU4rqOK7MfUK_D$mERwoIW)yk8uyjGE4 z~I#ZFy@F2FFdy3dQ|9vO?wv=Jd1NSY0q6U|D^!e z{@Y4TVR2>LrQ6M&{T;Gq+&#Q<@wVw*V#)ZIajqFm|$)3%Hv+!$?swnszT=N za?X>UO5I!b@j`J(@}m|{;|V*KBpz{|V<5uiXc~9ura05vE0>lYsW@!!ym*iFv|YRY z7%iBRP$E>yA!oG7&H3o2c3rLY+gVl|S)}kmzP{)LcZBm*CtaN>Nx26E{QA9e9}9%? zD4cYDQd4Qt^CfEQ=?TIYgZ6BS=9_=q`76`8gs5LT683AK_?s~6p7Q(~&z%1_uRYpf z=X~Ses&LKk(t#J z`t#J4w_VtmbWao1*dLc~Jz1ckG5pg$DRvjG`uF8>uKl|$Di?43QRgK4;NDIbnF6+N zRl8?De?MJ6iqFDsqg(k37aif&zS0YmmMmUpbx&=J)bjt=yTW5-)mU1e&1J@pzDX9o(bctoVSH})rz7pgPyBTT|(_v zy)OIrV9$>ID|1#}F_LgL|Kd_%`ZaJ;?B4aiue|p7zN1rrbK+i?_N-MV91?$KZ|@F0 zD5q4)+s5YWGGT7_X2G%vZ<;EvexE7PkP&!uvCEzU0pBE#oeN7XA4%b4D^~H4IpqTUA#>{kFe<6YqTE z3lc7O@@Zqg!>aD;tDI|9X_m30c==W(Q=5!85<0(J!y>+&tx(t9uxG^tYYnT=`6ZKd zT?>wFj(@T%XmaiIjgIlp7ON~+>*%`fN?M`oP2sSk%bM3DoSo+3;VR?0eg>$;&f($8XDRBf+7#LJJ9A0B#? zeB1Sy-3K;3sY_4tV_h>3{x?4RTPDNxoVuc#NkGn>hSx?et<6I3p1iYly)IrB9kYj> z>9vJbrTQ*!r`m6+t~b9$$Ly=OO`MRs{Jg&H;bmL9m|P!yb(H?l>DFd^>WkuvEz7ow zd;WEOy6Rg@R@)VeRF%Y?y1V%fO#fiw`rmN&l-*lW%V%9Xw$`uu;H_L+4mU^Z!-nqSdep}g|P z^l28)-88)~$iH1tw&XIehiakm$=19zYuvO{4VD)~_*Ud^vZPyp@~oz4djs z7pGRYOq2X>#5>_n@ftlhOU0krQ(`1$Pq10F#Jop(k=1e^H_t;Gbvm6YqlNdIEcccV zc=Fyo(ap!Xy=2Wc`GU{0uW?+xq;Pn1-ZrBbvIrrN##q=oGwip@;i(((dlg@3>7)iB?r;jF}!72D^&bIW}1^s4-171zbUdqF2J z8Nc?Dv2@E}%W2IHycz9Qx=cmVNO~co?oYQGqh(CB&QJS!roJo*NLXAeUKr}u#1m#e z-TFxOV=bk_>OX7Urj;kUwfx*UO>XYgxfR|vExi&icbQIha_f31UHgA$&LeiV*z=mP zvJ5Qtx81sXV;IbY56*1)ANG_r<)MD5!3DQzJ6_I7o$jl#F?H8{rvxicHN~TDOA>ou zHwbCeJMmxsd!+j2%Ad)n+zzB<9Vsic7M`TMqJPTcq8I1vCEboJdn^^XYueZQF^rtg z&W6`Za^7@%ApGv+zsczh>=)dQpE;WTYg2l=+gq*e^N(FQZ((KoLZW#I_sIxfC$~Qy zDJ-wU7~A}>vHg?SxqZW=ms##oQV-PfbAPHeYfMY~T@|zZvwN$%%3a0e3*MFUJ74`b z2yU1>?@$qoyLx~^aIvuXCkGY`h4H{J|?H+R(Q3?@T$5m zEIoaG`$CVfSKpu2?Vf&A>aWRB_hmNs7yBhoYp&%wF*V#w?YR8v68BvJHz!Tynkw%5 zz0_A~V(5~JbUXJw_N6DHneRV1WUN(xR(W}ye(7QNgO_Y$@|F~5nxB4GRWE&%+x+KD z_jg9C^j>(oRrp($H^sc+-PRsD*Zqf5&tg%Ph}&OgY~ZzpYEK*GsQzYGJkdxAL?Wk7I@3Z(ZGG zT$%D*)yw{2UyJ|oY>zYZ0;lFD%CAd#8F1~9yHJN$)*X+Fr~BsIj^K{!Yk#xlv+?=X zjjN(Pt|{EvbYgPhgtdxxZOsO+re>?_dVJm;{W@{qhSbn=8yk10&CjiW5ZRVzpBaDzA*~Wk9PO84r<%Q z-+5uvyrpN9KD~YRP4A<#r>l3UYxcV@ef{3iO^MoUf1|HE8ZsvhlL zJ)z5w-824hBzJY6nn&z67ERt$6JG_^Z1zn4sQ-D3`qJ{R)rU^o$So?Ya;WjlYnpN8 zu~X^s>@`;tKm6aKbm`1@&jyYu)#*%|u3d{@tK>9HWy@TU?Ai2kipGLTyZsEbSZp;u zynK@U!rrqr?X>l(vO|f})+?T=)#-U$E3?|OZO$)?;Ptm+CWRR%e+bV_6q1Yc?2Y*7 z^S@ko=L@m_Ezc{b@)T8__FQDww;`~7uKq+Oy_s+Femq)MRqVN@XWd2SmW|v;g*Qqp zth%SyVHe|hJy5mUXQ97?eERFkCiZRK9xItVZ>q9-S#fOJntq-CLvQ`%JDb>2J)eb7 zpChI4>8;>Y6QiC`joK+ZAHA5%7sM9jZ(cg*u;E;#+xPe-Qn|cXe@@dhTk`hM+nCwf z7en0aJ&Yv0_`+*kUw5(Fh$acFCY?Lrs>!m!A zKl1h3BW+6`?Ak2Xd^jU7%GS%}74x-le~X{zgHH?3-ci|7d#&9o$m9MTwR;-V&LtcV z4|;MnY~FJoui#tG+s_yYX1xe3SoKso$TNoJjaT%JCbh?+Nw@rK995XF`9A&~(&&{j zQ@vqI!t=>~Z?0UMy>QKpou>U>nHv^49F)7d@x%4x-!5OyJP>Jh^UArMetOo&Z6C7N zNo{fMUmGxMSB_U*Rr-yK6BvJ({Fi-x>-MDl!%N?Lb$hnB7iiySIsdid^Bjq^WjBAf zdo7VuN^dBN{>taCZeem^lJ$xsPrbG_WyRiAU$y_&%D;!d`Cs4M^5>k_)z}%@;$a-S zTNT5&UP;b8w~|5F>u$a8@7|Mgm#uB*gg>6Ta+$MVyVoD43Lf4`x^}_$nC~ZZU0EAz<83H&@a5!|uvdQqf8L4OQuD7Ryu&+o$>|4jrmv=DGk@4ty4twx z@j+ql6!`-!FQfY!#XofUUEISXm1V5wohH!ov7u%1&WcqVG!IzZkN=l(#(TGd2a-LRKGR(++kkJU8q+Y`P&+|{yp&YHz1yUKpf zZrWqS>;2)agXg+sDrRZ(%~b8!h3{Nw`t8HS7JB*WO!*C+x+Zfp1Me?mZ~NvWnZv)z z$$hDkUPi1?p1J?evX*B)3P#T&uU2)X242>NBGw(5jXsulOUm znjeI^a`}k++}y9UWg}a_yxAUm_e?Ev-NYo)>~qJr{!}LCinmvEzchLK&Ea1j66&kL zId9iBg-c!gleAm*u3}&oNx$i-2yr(e2X2od&Oz zC-jQ37>B3j`UcBHwl_Gi7<5-3-PW;3QQ{ZVZ{KJu%co*{RVJQ}%)3x`ZecfvfUR$V z-ZvK4Id?zG-#_>1cF45lf>-iL5$Ur(sIZj$d??Rg*ny|1~u zw94tVp`_BZHS6{LIFo`CpS|zD)^=_Nn`ZdoizjS3-2Lye|53`+^{(@y->=WP zTka?6_Gs3O-#l7B%gpSLX6e3s=!{Eq%&=C)|Wf|9COQ=QnWG{ zImP4OocVk}-z`nkFYmBmsZY<76}kz$uHT-ASG)dE_FLF=J=ghji$Kw&`%n6&?NE;A zvi4iCDWp&RT=0i?UZ)(Typ;?kFwosbn4Xd+ttg@1`ujtF6J}u{W-G zN-sJ7HCsk`<`>yazt?<8)@e)2>>kXR`J*%J`fPJ62fv@POFDEeMlh>q{*l^NXCsvm z^ub@$<^SszwP@>tyB6=-g0FA+-niCZbk9bWZ-(FJrf)vFX!bRiZ=q%7{$eeGkrubK zHy&(~+O$#c*3nCIj`*7-7JoL}x~|LCMB-=7&aOQ?#s2=*TjI7)`EguN>d=>xp9_o> zyTp_HGbVK{@k^U2q4;^uY-u0a$OZQT{U^`5H%rR?Sn_tC;yKSO8u)V(&iPO05%q25 zw_2gnyK&KkO&K*@{~!9VdOJTSjQ{-N$v^Kqij=*$Zpt9;e;`Ea;+dA0Chuxb?3LJP z9;o|9!vDaVJ%2n^o8_0k`&zhgorANNMVJ54Q^}9Y<5(Ek<%(8ytTs34=JoeKzy8|P zYu~mW{=4OOiO6?V`J1|({+FK5JRCIbU)N-gzu|>ndaphGRp5U$e4n?7+nS2AmY-WS zM7@`lq&)Edch~F0o9IYEmYm6N=W}lme|0H7K*#8J_VMr2cJbX^B0V{kdxgks*8s!c zmqI7$>b>22b^EboZN~bxGK&Da#hwQ^pVo0P`TbgVrq}87!HwksPCQpE4Bf>g-hOad z_|DGOHevpZ0GGf|PUV-sl*ImtP;_+Amu7ap7U27Ox}k%;h4l$**GWFoD?O?=UJi)i zb2=@z@7sQFEwAu33t4}3Gr0!D1*Nm)73R%ay=bEVe|l5BMTbK`X3@fHO!hezl8-L0 zW4*byChz;qfX=gN(pSoKou|t#_A6_CDb?Mc9?&Bo)w_F2s>;5zn|6Qy86->Vcb+w{hL3#P!58TN(JB`pR4srD}dR{Z+*``yn^S#8&6 zyivHkKdb3mdB926lIcEE`tDmsvNg5c46jq3xH8~$tl%^TpU~c!rArnx*`?OZ2@(qU zes-CGsbkq}xkr0l95^qlv6|Wh3N@Ca-p#hi`Tc} zz*(&uR{fpQRA*JfDP+4YKR~w8CU9k4@cIwwE7T+v9*ObtOgp7f5g52(r9g0i<6~~o z2|hBfEDrcN?`RI(H^XTj^9GH?eY)PF%}P(V+{n2Sc;xzGJ66U|&&!*P* zW8lR}_7X21+`r~<=2rdkX{MU5bq)t!zBF-CcBqB&M*EB31SOoh{#j27VsU^X#oubG5Opt#*-}%^ogyU~67bcJZMq1(qf+@g=#}*Y$tg zcY4Q?pvvh>=Y-vUw5+At;WB6W()SjeVnK7JbaTtC-DCADkLzY|$G<-p|Evp|b5A&T zt*x@)%`KclW^w7x6>&F$*8X(dX`8AA)lbbh561^;*odOa#rQNP*p6<-j^42)}U1P z^{ek4Dch2?&1bGkmr2|dbiu+-UX75fP&2!Uee#a5E zcK;!Jt~o*P>NPkeZf^*-NwKOsxq2;22;a@1FT0MWtyA$RoTJ<{>vZX*p5wh@!3@TE zAbq`FUMZ13GXIQEn_(MLqSknqL`ggC{Q!*AC5R+9IvC z>zVaRxn>)$)ZkUKjvU)|nMYu<$II8UvmH$4S1k_Sp8xTC^^^tK*H5IXKX`MLC#q*g z@Q!0{ew}X?pPy;B@7vsSAx@(C=D`;p|65vizqy|Cf#Z~4yREO>V?7mo+re{5#M@i$ zHA;D{EU`j;?um)PcRBLIzT9-*XXQQpXnl@+SK83Lm@Afo2Bc9IlcZH{; zdhnay4`$p85x$wq|HW;ipQ7;$@2=nv*V6fa-t0}Aq5nnOQ39<}A|p zX0Z9}-Pg(MyKUd$5J&SJE>5%fq*pC*soyy#cxUkbA0bg+BroYW#9v*`+gvoUZ~y9f zm-dE4m$!f2tnoHnC#W%dU%_FeIeID~(La~49=)#_yX=3YnMU=z&3i@VLt?6Pv%iGb zwjY}>>hG`e?fyQN*&*qD|GxI-O0QeT5b#=F#YIT@N@YmpM|I{IDy?(7M0~!l-S~OB z)&#MT4k1yE$;JDZ&0a2c#4j*;Zx@qX$ebgS%IX{AA1s_?6TZhlP1gHCPRNpLkH2g` z|N4dR%fQTrD~E+2Tzwz1CQ_e*;=NA>v6KQ?8hPWywlVxf??Lb|HAcE+qZbnmxr7^9H%NA{?Yx9gnJ zW@jEq`}OwsJ+r_iSy6myq3AEb~CxQPd=#JJ9jqk9`^g8j43m!G#4G-_b@l;VtTC6mG5@Up-lOG zH+4i_ua8vf&b)5@>EN!I$D!;;Hzf5waOP5NIwH<;;nbQE#fhO@YO>Rf*_2Yt_RgBj z9DX(~@|;E}-^phNNBDoXbZ)chZF0=&d}C7+DjGB~pIgH6Q>WVQNafFhF3;xQ4wW>y z_o&lSN&alnB(2$r8~(U#$Ou(>p(%YfE7r-+r)+P}_m8PNk_|#tZk_a9^4@SAi+*X! zDfftaBa!k@-5R|QO-cW^GAo?>{Uds3=;EEup^LjaJmNnDoj#G9FVrr3VijM$XXw8B zpIl#Bc0O8mFYLgnX+K;aTfGQB}OsA6C8ds($%6^y~a&!vo)68_eHz zUL;7XBqwpDMwrwl^MJUo)#aa7Q@MDW*?qmap|Xhn6irI)Ej?W7Tbo#dQ9AQb>fq3=P>1^B`<%=@}{t! z{v`8LCiKvur>$W+u40$hI3~@M@OWt=P-Ebyv&KFwl#9>kmqQS6Yv4EAyY(S=_sQD=dzo!S>K9mpAeSx&Q0;o+#&L`xjQ=)RVF4q{&8` zUVa=__G91FWi9_CMCHxTALd?WVs+qCSQCrBMr~;9o8Jzv72UivKYp|l z2y1ro(wAK~$2Z%0vZ>m$1KF*$iea-?+}V5jk*%=oeA!uAI|MErkPQu6t+M%`rm^{9 zxx5a|Io!7FPIrXDHd{ALk?B`^Q+;;V2^VvfE}g3pVHdpP?yvB(v-$a6w(+F@BI)|H z_hC0hcAW5@b$-`FwaO(cJMSl4SXdwSG>4e z=8TOEDNO`@NKR;k1zUXZa%QE}p&fEnH6RR^^Sr$M>H;n6Tlx_r~95a+|{yd6!Rr zzi7_8PKVD%B8kD_?-EvotH*Lg-d*~5Zddpo$Hi-2WbAWx4!3>x!s&14qwQf8CUtz$ z_b=&Z2Zqe@8xcr|J&L(c4Jp!1Se}m zcN*9G#M5ezHTQGa=v+7VijZ?J5&Phpmp$G7Eb9@Or@Fe$S`j+=CLxYa?k719iA>#M zJ1?2}-rop!hA+Bd93qz$`0T#FoaAt7YK(3~VpVOaNV(F|m+={`2L440euXha6ijOE zpBQ+eeCiqRil0KtZ@)CokLdCH^;|ncW%8Om_o9!Sez)vQsba)Ti~lDNIZjn~W|f^# zU$Z6fwP=0Bilc_5iTT{KL(3+tIxE$@{~G7Qh;_LY#Y^KBAGAJN6QT3>3HRBZMs$Gm;CxBpLxeR1K}TqLXjf-jk<(|rkvn? zSjYX}(P-L^tNxLaEH4)`W)vUT72%WL?~*QRrRX22P*Cu6X9~wvr4FqYt%rSGd8KTT ziVbr;AJr^-+kV)Jd~zV9p1WRp!P;}TOC!}M9qVArKll5> z@7y=)+7fgBuV9RfewJ`7;P^9N(Z{x&3k{;*dwe6fpM{C_47qo;1) zwZCuvbn$LG!fn_axuIWZW_l#^>6U^mle@~_yL?xg8u_!v?4wWMqfoQ=_onVGjrVLTzc)HKI8q7(;O~$g0Dn5$|oL|oN|0QV~C*Xk58H5 zw@+=3ateGAT@}{gUsE~#(MOKiyuw~nqr5igImo_wQtRDqU;5`mys*aE$5DZ$EE7Yo zeM^eFQo1$z|MP1fPsT*0O*?uv@|C7t@|ODOw{zmKu*82M_N`&U+IrJa74V*JvVAW+okyb zyVIHE*me8p>@h~ArcK~SosF8^Lp)E1_gquysicgNlC7F23r zvUj+AH)@OYx|`|wpIoM!*m4AiFZWj{kdGGKci_n)+5S(<9j`nt?ugj@o6kI2UiR$6 zB`hEJeZOozsb}_^&3cU!qm|^O&aX?#4XXV!L#D^FVdWYf(`e1S-PIf^5993CzUDt^ zUujgkVpg=*R~If(wY@o)T(c@wPwhCd@Acm3xcRq)(mRgJz5KDcYsvWyJw3L4(FK}s zA7;K+E?u~L;-O!*ZVd-p`=e|0xAIpCZ4-)~S8~Sl+|z_my9Lp0Jb#39T^3r-Te~HG z%44gt`>xK>OBj;PX0E9T+}M3ZWAcjGtE$|tN1yp!-BNUBvw*K^#~XFo1v^sM{a?>D{(_2brQ%QrYJUp6vbej=iuhhUKSta7B%gQ**Tb zUl}iHR~3$nF-9qyC(eHI`R|&({^NCR9CNSBvcyEbU{B;@68_e^Zf|$zjy3CqnqI}E zh}%p!zxdDfsMzY`M@{XR1+oQWDk4lxJ~8I;GX8C2xRRdn=4RZNnD$Qr?JG9Ub8^jy z_+g_V!5aH~ZcO*O53*OT7wB<{+A6gQE6OG1KZ@zwxuAuW`@6$I%}MLK6XxukCEydY z{7Luwv)(C>|9qbC?`!LIpF>af#T+~=%g5MKD>;GTh{hR#%;lE7-Z3Xm)x=+p;|K}c zA~xA0W2g3_#d$GjCa(2S5<9Y;XR6d(CA(mIoc_CUHM6 z#4?^`xG4YqBj1l**Ps8{yJRkx`NLS|H@{NS(qCD&9p8U=d+DRt{OPM>x$TcEF zE23{$U2E}f|B^1wSVJb)M(+3Pryg2+D|UfM#u1+@A7V{CoNgTHUpRY)joH$L)6c9D zD}4}~d^o$wZ%&foi?c`M4%^PSzbx=;Y{itaWjy|C6~EPTFEnL(srR(CBDQgAH_wi6 zdp_F$k!y1`JOYp0dluWiqg4CHZ z=`*pPOcUZdl9q`*wyl>>`_Gle_k@wD_x*yno{DxknK@0qvmS3`U$j}kbCI4)+=0z1 ze_kc`tehQXbN*Q3rIkSwo#O87uPO*LK9p{|h3i0G==+e(dphFoZL$|=IVe&ZdtTm? zwY#!5=73P#yXV1&r+v1*)y%$ny;!(|Mr`)%c-g(@EO$3t#_*q7K{N@U#-7Ao$q6(1jF zBblJ8Czv?t7_ZSQ3u|}vqL%nr?X5ERUj<4S1k1mexxsq+&TiZIxT3R5`+AkP{qgTV z9rEp3{MJ{$&wy?Le0_{I22iWbOhjz1E^`EZ-ZCY3Uos+C201?p1|_QjtGd$^?XpIUH1 z@@x^?6%RIVerXeb=Z*CHj2*wFu4)L%S4`UW{AxsY0#pBzq(Wnr&x=y01y9{(ed^?e zngpem$T`-*yzd=e{1Tb8IwJDH4E6-8H}AjBeZaqb{-sT78y2r#aQ5ZO1nWy*9+tZX z%$;Y-z&bDNbljS0_Yyo7R)#;*nd-3OVz5ETN=0$~5RruPz>ZC`=N?up__pTL>mFT+ zETg3fm7g=Z<7$+V zYE>!oyq4QbfBWy?x|h(Fwf4KkZ)MYsTOZqsZcnn_5M7us%`+@8>E))5a-aGA<}F%( zzbx3DFel|&P)&G_>9Ove{I71fuiy1CBjI#V=f5dGY|k9szo+GG!(Kmm#kPc(-(E&O z`noE5UYq~XHL7Kv4$&zIFaJn#Y9`;$Ra&kZGlwV1Ew`gJk%_H5ysPDpNaLmVdXigb z6xv_bO4Kob|G(0H=BG11SAKd_diwo`0P#da+eD5VJRf$lwjS;?I`QB6&7puq|CT@T z7rwFzirKUY@9$Z-sPS-EVl>mg?y09vT6sL`#6qa{_mz6 ze5&SFIc|ylafZ#zC1qOi&vw6FzlTjS_-kC^lpl$UTo*F1Zz~M(Xy1M-a8A&{#KkvP z{myima^Xks&y%%9Rf}ib&`Ml#cxUK^y!Uqm4Hoz)JmJ5V^*JSR>(<2S2iF|hR(tmY zAIqf^j%P2dN!<4L;9*n!0>5lql`kem30H62P)|IUu_!CyP2-tY3?Fv2=KtLPAmC@> z^?x&J{0~2yetXr|l7>E`g^jCPl`yTngk$*)v9_-8!S zmpguMcRbfRnffHrd$DsO=2V-kTwirUZhg5y_RG&n;*0I_j)@0E$#_R!etqoYvVXHh zl9aS1nbuza%CA`}J@cEWzG?6el_YIh6N4XevWrDtF!6a$Rp!@KJ(gtuee22G^XeDX zD^`4woioM7PSZchIqP)S>BF}@CyVH{YVL;PTMj&XZZ-U}Cb&DmOc z4c*fe9nLryOjzohRFof8d;cy^!(l!PfA7*D(a(CpciboTf5#bLJR z&EBta6i>1B|8h;EIO)bTo9`Re#a+1he67$k&s9g`=CCE*`Chl^OH%5T5B70pDf^ZM z@kr?>JaIzjx@Zp3P^~IGJM8DRXznEY8`CPKm>b9w2 zrm6Ov>z2oG=ErWl+UAyQw`8ZCq{I0yMIH;-gFQBUslMTu93*EbtWf)i`=`z)KJL5g zI%-d_CI|OUpA~mcG|798p>Ov3gKL;qZcVP(y{+6^|6^6>$^$R7bjPsIrnNR(Ri`2XOYksYYo5m2J$1>@5#)i+|lmC8QC7JzGpLf-jGmShYBGo;y2h6IX=xea9rdf{(hN7C$IW5eSPuH!qMy&~D4L z`zvNTt&&Z-mLlQ)p{rK)OyYKZpV&fAN2}zNeJN_kp2Zeqo=ZFQ-e&LrJ5uv(R|==- zKAXYN@wd49MZSa})B58Y`}Fsx7|o7~DQKCrF6A=w=jC6lY@1*HN->{lDP?qSzweXR z+pV4+uVR0%cQeJ)KJwk}2meA&Yz=3qG2fMWll@|f&-x$ov+noxL_E@8Id9i#&*oOo zlo;b^Ud1)yvu0#!%nZ+1CaS=5C?#ERb$-5acucFHW?<|N|4(Hdt5b>u>u*?xPTzN9 z_sp}c^UYixI$cwm4;)@-JOB0UO$$%k?$}~*IL<9IWrpgBg2>SD3t2)lEf2dNPmLGP zO_`JP%DB34Z|nE%is!Z?YsZR2JX6jFRiE9< z^*Kc|Zh7F!ipe*U7XL|kShizsc&yBp4c8Nxi)NoLu622z%CxCNbc(}`joZYHnnDG` zRUcn*PUR19Vt=)2yYY(2noka&>8br5X`Cvca&oQu#h+K6O}<$9{&MPe+e3<}(s|Vm zPxotyY!!X!{eVTD*~#Wcs*XgO)3hI9mz~emXw6Rb?rrQYN;SBx<{bC8&tBxCd;Kq! znNJ?R-k$0d^j~qylgX07_x?0~{jXc^c~2(QyQNcn!jgol&3`t|TE0v2huH3nRG&!} z3M%PQQyCvv*L+jhYa2NKL8|YyGyg>9srB6c&GX&n&gR`O6M9o~qRyslF|1u563ynnb`YwBUOTH`bysdxW7Zy&lJBEb5c={|>aU*7Aq zfCmA`pRG4d^IEm|o0IW7>+hS?(t>uCzBCM<%r#vmwSccaaaIJQV_KZP=DCm;%O3~+ zdT~NfusY8Ds#;p!>fOH1thR}MUT14_8$8yT2I{6QKIG50JawJsHQmbHRVH#T*gt2b zExx1@JypyOKL-i}PnLm>x1iT)ff3>zp)f8qv z^TzZ%*)r*n{vG$8Z&^Ft#MZt)Lh?m=otNmkB>Vcb7Y24>%e>CsX#RaGeTwGX%Rl!n zcD(Ta(dnY(teexmF{W>vlPH@bS@KglrsY8}+qM=Tg*E9{p2tSKD z-g?&bN4e8-TnnT=pSw2qnf|r z<5GMtw6bJwf{M!dAeRglqc7aX{tG(XCp5;K%sS)qRJ$XCCAaxH>(&_V<9a?tb_<1` zu3p8G!Br4_Y>v+^r}um(YQh$Gmj?-mW{4lppZ&+yMOu3oFLR}fE?*T%cNz8pDoBJPS~S+BqjM}es9#I+=(2l=1trgam2Gv#q$%I7 zhbYWyvn;hSEqt3b`|JO28H;ni=6)vcq&N`?iMRLiE+#%K{(sx;`MIr`LNQa7KK}kXCw<-j z^~YN`t&{Ri%@jNEXM5+HQ`Je=d-hu979MB(@0uxDw^s3R{O?N=ABsBO?f?FKk3(ao z%7MAZwR{sk3#x9uZhq*ih2Y7QOq)kr%CE5gW?jtk_EwJRZnit#GMRSFXRpsMF#lX@ zs~>ymq_;!hBhyTe>q-~yl|eEjBt;)KkIC7S~8#@?Cy_Vd#U|2=t*wJtL=Q!5WKWG(WD zoO6`p>x@LQRF~Xd|L@Xau5E7w zU8^z|omlo$Kx6g=vEXEFQ@1bdkJVK(4~iUPJRG-aG1-*w3zEoLWTudZ2Pru^Si6j}p9Hz@h&N+O{s)-Q# zEIun`lgoL%|1O*oU%p;=l+|{op8K)-Nd#R^Ka(5nRJ}rLxR#l~IdI)_0?8(Pmagn=2XG8{gd5`K2xPJnPTS z&7rQjXD+?C{WPFy#f%^BTCcMiw|+J3x%c#Zu0BKIKFLG1OoA5KY<=Y{wlNty-hG{9 zbo1+yNvmqVW%G01-K65MKs{nb@2-vgjl7}19J9qzLr%CPTTauTH>;q)amnvP64SC} zI`rlq|NL#XXvJ^tMNc})_gK8jR(iEWQ*H6-94U#d$-7J!p0a53$+pNmYxK?ZNciP@ z;d9M|++W(v;>)&4){|oGNe+7So_)iq-c@G(2UcbKDL%b3^VO_xJA$3t<-Xeb=*^p+ z9eeTC`LoXsJ?^qmGGnu~`?*NzRCeB51Eww0ie{R%{n&48f4_2mTYh$9=DEwh>jhr_ z+sfnPpu0fpxWLQop5&EW^+gK~`qaq=PTr}WWTB*(-CHR2W~GMS>>a<)UhA9hy7aM{ zMfTRVGBv(d{@sULpS+ciXpFRQn4Z0TAKMg7H;J>Kb(%ZR+1lQ}kv}W@P~iWM`eonF ztS|YQbi!o8ZLRl*vhTc>zxYDoP0!}JlYyfE!zW6VxQ`MvxcpQEeN z?&sxj{S(cvIvJQ&qu3@W($Uy3z{`=$QM>DI-cZMDCjSbOEgxvh@Ja`=?Ad8WA9 zzJ32=U;2+(cZC`iPUc923WOzSSk*P0zjt}ZCd);;1EOyZ7;m1m0}N zGp_zQiE6TwZ5Ma`;J4YNDfTDr$I)d*Ib~-a{#?oDVyt;}uUhM!1KRU99?fa5>5^2m zZA`LTdg%50X8{k)WH07Sei_W`T`i!v(`B1dVC!#Ih(b%HXmvZ?a{cW&n%LX^ND#* zijW&?#O(Gx-`Ms<2`MDy5fr~Bve%8>h{Pl`T_PWOp=PdG}V`sk!e@ScPuWjxK(` zzB8fBy*Evtr6>2de92843%z&_%fK)J+fQafO~JXpAKi~kZ@H!L?%wX!u5A$!J&wzB z|65-a(Nof7RDQcrQp?8Ep#0*UJTWH@jrL;8Up=2P{)VhQ?^-F%m#3;%bGjhXT0ZU5 z>m3*0Yr6;cIpsN|ovQ!x*PPR~l)a~avBG-Jkb`+%`<$G*&K4RzPpA&`~C7f zuM=|oiuTXuPAV=ec$=_CTgUihUg%{R4bk|eJl&jyxjX$f*v#B&m={&GfwN=Jb1$(g ze;(S}g+zVc7n7HgaaBHs`HZ_df3CJP?S$bKKP=H04>^XiuEhr*Nk^SupEv8>tBdwFM`=%vNmvnM1+Zplv-T5gn_^`^tW^msO8UMLW1IPiVx1FPmu2l*uL+CLS)sL5Vn_3yb>)A__He;;nI ze9K&ElXbmo;W=2>77+p&)|cl){g7PgU>8s2-g+Wo1@6w|zk* z<6$;Yk9@2CH@jyXc)!C}HBYf1ZsHc(b9;@B1wQ_yAYQ)W?c$Yh3KCHjR!0Bfe zt8(>6^D&!W8U@J{*Cv^CO@FsU`^VMznGur9V%8RV zq`d19<_xwo+aA~yT)3`#_ulBg1@+fAUhs>KoyudGzv=7lm&N_r0tHQb7qw@uR&ROz zbi3O(E%y-KNsa}*lHdH!w>+B7z0M`tb@P>u0&v)Pjdq_3V{K3!aPf?RflpwZMXJxt|K2H}6P!l~>C)tqU*i+GVaLsa|4W$MHdja08P5n!K49H&W9GTyLe9@3{f_m5cEA4|5{s)k zbGg(ysZdV;xBE($xT%x<1E-X~U(L(sA71EsYu#J5Si$?(QkMQ&A@*HEQ+GmP=yuKo zCRWqeOXvRia?;;qmigl8g^BzH3qOg*-aqx4+xdOH_mXMTo)uzxS9vejm}kBCmaNThR`ei)FV9TVKVh?R+K@=hi;;QrwG|=L|O26}C0} z*m}~X{IifE+r27&zGSiaCLy zYGw?XJ_&_e^EZ8u1Q_EToQBoL|1HP$+Fs%zfbQJ`D_ps6lM8&|BG9s z$sd;!OP_5?E(*KlbnUK1u+1W+vS%A33KywtT38g5dd4SShbOm9`2NDnS~rw6UUU_u zZhp;He&$>0T65cu#@Xu*E&mf#l&LW5werc}q_Tso_dDy0-0rmPEvn|5_5ahH-n8wz zT-^GeO`lPse!r;w#z~pOcNV)nUcP>t;3eg-LU+lco}?mq<0}O#yE+}#DOpTTQGP5} zG@U*1YN5uOMy`qNi4T76m6LPYQMBe!!1t@!(-+;(;uV>6uX6K@H6HolV_~!{@ zz@|JAu7Bs#=5I|XS|7{t@jxm2bw}p)%=2a}s+2#owP@px9|!j&JhQmjyyWGBk1E1n z0u~fqQajn`8EgNc`E96dw~tKJx3&pISLCgZ<`vln?fSj!tSVcr%eUIhqGyF2Gq@Ja za8;Z3a9MutezUN;6UA&fFE<-UvbL!k-tC$^g=1SiXK1m2pYaB(`)_Uu-(OKvcKr~C zR8V2D$ZFerfvGpopVG-{i8Oe>HA=~%SZ7b;qglt4wy{TPOmxW7j+U6*T5MKkC6zC= z`c~v&xBDB?{?1US%qg}jW=gmkZF^<;b;e6C)g(?{ujMTEbUHI<>w>rt!Q>(%p`z^$ zH=+!R{oj7~SoG=MD#?jq%}pE(dxbVB76-(+XDpCfdhl7%7W;e8%H?04d{G=C?YvX9 z(ye{f)oGkBb&Z#P@3>eT^Kjleo|QGREAsc3%;k4DCG~k;ajo$4@A-$T9)~?${z-Ai z8t=EQ|B5@agwoop+myq4hK#Lkfr0QBsn^kw?^o~N6;k}u zam~MmhVEzU&kE~ByK^q&eIZ-I9IF~)=r5?t-G9zezUN4B?Y~JS@_X!7@Of1G9tpSq z%lqHs!=BKoCA#`D98HeC+7(6f<7dlB$u2v=TH zs57T_X6U9)n5eX@;H>q%No%=E{7#kDh;%m?MpriJHomWYwek1Ck|4*a^RmjBb?*d< zD%mTY|0o+ISrU4UX~}t)Ww$F*3Kh9O-`TTV(X}L|*6MB0-!Chp_2&MaJjeUT8#ASn z1V!efQu8!zhpXfD69T!EgPIv`YSM&R%l(m{pyg z(2UG`k9XhXobaJk^Cr)VuUv;u@fj9aB|BcZ5)(eHR7>e)d3H&0PVwSLo_##|R`-?) zlv>?Py=>GKJ05`X<@x$Cxnd;v&xyfoa8xivDJ$e%Fp~=jOOSYo^(e`xokyi|(!M zEA@Ap%%-n!?(xUN;Q>9HZ<{)G&neCDnx{1VyE>amZ7<)>6-|a&6ONQ-^v!#)VZoGF zR$Jn>#2l)b?X~Sg>1@fZzP~(9B=)m-*RM4XPMe@BRywDlOL<@CkJJ-h`XLo3mekKr z+E+T~am$Qrmtzm9#t58A@LT2G)Duy<6T*`y+!}k zD{|cW@|ES-j<)(!?xov#AO3VWVBUT{UvX}#!=E*mv=@}_lAPhXHrp(VA?%>@i^ZN18OkMoz@5L;PVdZD@2=+CXBySZh}r&@Au zMi=YymR?(JmBw-Q8p8>%gT?;NZoB(s+DmWQ<_oU#>CdWu@~}MeThDi~+~cKB1s2?p zjZpC1@PRFuFT%2|Dd9)yyZy(MMdnMbU7E?K&6Bsm{efse>E{VA-&N~4>16+57wA^o z-GAe=ahbaN<`W*hU+k&{(nTiRSQg4G$6J=a;omA2Go7z}@vUb)*4&KTS!-5S&zf}V zn)PAErSZC1JAW6q{n*P|HnsK5W+&m0lz9^BdlR01JomFQrEJj+b*6uXCw9NBFD?5e zw&d@JfX=dIdQCsy9;*G1x`)}2+ePX(5^$+v1lZgV!vTxe%==*bT zKEA&=;_IU2We?R@Rbw1(O`0yXD(dP_w}{UVu9m$&wdtqXKl7-I0y$T6#FjIfhuW4i zMm*fVAZWSm+9_NoSFpBYzuQ{V-WzNjdAfytv~(p2fQ@ zvlrT~+$$qk*;6jVo^ev(xYa^7gWZ1u+c)hy8aA!m&9~w6{`*I=3V4hY9lz-7Rq;$J z5AjNVb<5mlP=?~8Z->QGUJ60b5Mwazn1ykP# zcl|dy>kPG6c&3z3*!^dkwa~AlOG=Kcx>l*pU(MN5KI!F!JKH4MEQ$_l#r$2wdT>P` zU-|3=g>9kpWvss|8mPYQSTuK@zeV|+vRaOJeU}sd?T?9Y!km+x{a*|K7bsEGO9ACnrM@qT8$C{ezb@!Z=-yA+mf{D1u4+YFKU z+EK>k$0Z`>KmFjF&N@@*P~n{7{WoJ+%kL|#%nYxY(C4u4Iw#xKs^_z;`pO^5PPcd9 zW?T28f9nF*>p}>Xt8;Jaoln|EGH)*{LsM&sqmAs%Usz67oIpkY}oypn~X` z-Ae_ZO|Ce?9T2BB)AG&v;{6%!9Q^&UQ8E=L-fVxec!tqk7SH*~s%#%}|NAgkoV4d@ zNR&9M)>693b=$_-Z?={+SKKIZb4s@FW0pHn`)9s!-n*4~Gb>(vnjP6cu~y8uu5DZ0 z*0Y_QB8Muz{!7bbO|_WP_o8y!U)`g|EnHVB)w|nHot}H*No~pJid>D;SXSU zobm7O^jmm)V_U~OM!lmVzbkd^gdDQ01%p=iq{kF;Y*$}5^>bwo%hNyG9(_9BvqM|` zOzy>$t4{MO^WSS#@+nx0EfH6X?4HKz_&tA9WqIpi_mWF~b`|zlk12<5`W)#ox3d4X z&VoR`#fQ5N*IPC2KPdjp^iJipX?>g5)*nBb+I(>7TotDmy&N5tb0_3{^^-E}b~^u* zfpdoZh0A7Em2+Qjug-aCSfT3pEOT3hX^;Fe+sc(0Pan3Z?@WE`H>+WV-~30*A8)C= zn!o+QuNwEy=QM2DPf1TScTi=kyw;#5De|FV!l^n*Rg=FrH%x5&Rr!8Tuc>{4eb|Y! zkLNnCSfM*xZDr-hu&-z5^A~C9#>Wi;sT}>6nfUce zZ`Bov?Yi1^pCtWqs<;*?NUy<^zY#8a8CTxF~AW}SxqTlt$))%$7-Cox7Y ztf)oBJ{#|{W& zKZ+5njamN0YKc;5RcrQ*a`r>pT)9^GZ`&7Raw~0dYt@8;KN@Q~?>ARRCMV9~=M|2z z*;F<8heqUYzUY!f_hS1f;Y|Jl^-K1{ap zp{{mS_iPXEi>jYozW;>WRAr0$%zxY8Rz0(Sut+mL0V7Q(aJuLPJ@7gXr3*s6B3|IthHSxm=%ZL4TZtFG!6)0?yT<#9LjEej95 zKl!fu{k`h8ZNi(gm!20{chJ}NLW)1H&Xm{H{qwvY#Q7w-gt`O-#koo^N_tpZJ!#kZ z(m65w2dDZ+uryxKZ<7g;uAcX2*PJqT*IO034NDjBya-E3G^*ac_@sjQL}}g5Dy8TU zp1(&Uet)apulM!Xy}}E{UH3>y8hU+V9x4qehqhx{#c0?m^XYVDT?sf9CM`lr`zj=Prg)NR?18M zpx&yhasP33_5c4%AE<8O*W0n?#6A{l(Syq$GSvu8vMU$elzkweLTcGmrT$#2XO=Z` z8LfN#*rteut(Qp4snq7M7f`5CZuXe4Yc@x*p10f?(_1Bc)q;0x)UMt7I_sc|yrHFJ z#A_R$K;A~F8pET!cFfx+C>&=@o?`VXHS3h(y&BU{#oxczJ~!L9i78zAp4hVmsbrlI!DlK1lIHF4J(e@N`!Xq^5s zN-jio#rti%KWY{}lwp0N`Qn)LId+q#D-0W?j^3_W+!(jVcVXs(9`-65=N?VHsc(~O zj_=eEn7U=U4x@6yFUi^GMcP8WYaSUaDLsASv*y1gTs~LVicMNrm0hd7B5^|hG-bo= zwl)_Zum0rM8u_)Rjm`UxxP8%le)ePFA%?#-%ie#kb*WtQjs0AvRHck!;k&p+ug>%w ztM!xn>2a+67b|1e^0g0+UD|dttg1FQG*ZBL)lzwB4#gjWDdp2cdG^=#`&lM$5;AXl zsj?;GZ_>FrmriKaPO}iXt-iCrV$!%Hs7W8!m8s5*V6XreA&X`KJp#Lu>E%iE=fIXvOX2pRMxlB45Df z$Zd5@LMjE?ll+ptTzcju+<3MBL*M^8p2o8>Dr?(*>U!0-drM55^zvCpovBF<%WKPB z|C}Vh{ahh+`?Q{cU|kU7*QFc(%<&!?_s75U2Bv+m>b z^?_&W68(SA>iig$wU}pSSJ=KENy+O&>uTirMW*lmCOqrdnc9L!)l1){y{}vKL4J~| zPo_%N>t75xFYA>W3bxm+muR^yxkRY_vGW*LRcR86k*(;%_|G|sRi*q*FnAM#T&HH|CmC^DAZ{qX96*{*Rw|dt7%C2k| zxV(w;eQ@t$Z@KQ&Pg=9;6=UQqPjVgHV}5DlU4_K2t7l1?)SG8`OsbiuA-vJ%$M=H2 z(fMX?mez+YIsfSK!8RrR$vKfHj)i8cdluJc2?TGutNPTer&cCs?}qv3FQgu;&-dQ{ zCVJgot#e090(|HGXx;Uft-g3Jzx2(Tr?Rz9Q)ie@I`qG$U`Kt4)2i~b;qI+*3ru2V zGY{PMR@1Go37xg*d)&O1Z?zVu&k1Ba*~XnwU%SgdhO2sM|5FE@lF1+(ou`!~|Gkrx zrKrHoAP`=^_O5rNk+T`g!gWv5*43p7T-))q{^FXBH3fG!O1z%;)44$Vcz#^QxB3V7 zm18q580+X=`syQ6ciTd9!ms+*nSa0ClJhZ-QmQzf>(5}#c&4}h>q(ZoIX~Zcwjiq@-TQm|@u4@o< z&)jILws2GX-^-a1#|jelT74VzIoDi$bxClhe`Jof{UI~$tTQPMv8B1En~N>(?(wjQ z5Z#f``(R;xL+%xkKIZEOV>im3&=F32#45$}t6|@xD1{j@5i*CYZVR|~es>ew-`H@# z_bb?JI5-7(eo{zzjoBIhEtV%PvtB;Ckpb& zoDwatI>vs>vEkzFJ&S)G+<(!RmG{`3Mc39z$1G^LBhFy8D|JiY*Bjo;%AVZR4bU%Y zc)Z)9HQH~Zo6(n;$yJK(LHi9?HoRHzA%jiqOrym%hUuUD&vzczaBui1{-uD{bZd)J$)1!ek#@bOs>#0WDL(g`z80d+_XGBCzw?5?3*|DtA?fimO4nB8J7jIm|(ly=KxcB1a zMsMZazYl-rnDk-Q>RtTv{a-qG{cH5CmAn5w`Q|MVFSFJf^Cx!tXMZ#X?bv^EUYl&x z`@^TQuIrv|zW=7WG2Vh>!SCo)UGsH4?V+5kubYxB8Z*yJnwI?G{Byg}d-Lz=4o!`j zT#e-mA6i+PvA*~x(I30!;tEQ-#@}CWGAi1h`7Crh|HH={teMUKyPDXGR#-MZYI58qck{fa)$e7U^DUcr{)tS# zezGN2@tV-VNpX>}YZ@muiRbL;E7FjU%X$@lRW^V({a~?Rll;f;dg~|7Wc}5B^j!Ty zbLsTDqfHt-cU3eCo{AZKRLM_XVG!iwAyI02DotOn~C?ljCl z`@67gXH$f^sP5H0xB4vpFetm|?~XnDd3{riwc(|ew{Bc^?$uYlcyYokqxA+&IntFC zpDx8}t>G1p=wIPldAg3bDW5qjWK*w)-IdR5o=0>VcH1@GXsU_&{>dXRVbP1KX0>@t z4TdrYzBF~&7N;C$zN>L7uJ6=}m12#r-oI~}6d?7`WVvWl*;c7Zc}DU5lbc>Xcv`J}L3YBCiq2+* zk38n-3qqRS@ZbMe7p9lP5HmC$g$#PqzAXpqicOYtzTe zYMcJtLf7&Z7N`BYYEElT$WLk3Tk+RN@P(xw%f1-aqD>bMf4Fv|+2{}J%^$h$=TFI8 zH=AWvBmPgpq}lqJ_<13_x*s=hGkuAy@wjlkIX>;CMXQlWw=gw2#{p?lf(r>AH9B+DpTBbff#Sp+UW%^47`CAg}=CMuR zY16WFZS19{Ma6#wyxCXu&JW*rW~Fk=3Wen}I*ip!U7hQ>-}S~v3mEdYtf`YdovNn3 zWz);!$66$Q8S^^+ZCRHqyF*V;IQZxthue-Hy&Uy^Ol~S9ozl#NX;cV2NveCe7;uRa#T4W?o(jyf?6f^S-L9ztP0;^TJ9c~n;>#$ zGUNCDNuN(mlMD0x658^u;WdwSy?}(NY}G-l4Ckf(A9uC<`q0C&Fh76Fs(2Zvb&AIS zs`TcyvKb0~oM0!>lAZkhDre81&O6C=t(<#SZF4b{{JSSmVV|>E!Mkpo&#j^}e|B%b zJ<;O7)v3ifsXn{^-?D6#QU2?ocruymxsRoIL}_F5wLs0m$LT&(PpfvnGH0@>)ZxEs)xw3mZ#J8~xY%m?vasc? zK+yi{-_A35Gv2=QA>eMS^#d2z6&V3sM`vinAI|gAJ-lgetKG_TFP61!mAELY^6^Tg zYTxYLuUegE1Y1u!?9;YO_w%yDf6mfw+5CTFk@1FDcZ)@>5ytM< zyrq6+m%l%kU6rtQneKA4*6!k^W}EL$WIl4LvRun0*WsU%UF-CXza|PzmrgpAxvW3T zSS8EB@5U*~u4M=PItfVAxaC$D*Wn+xA~d*YO>Ot*3)e zoplmF^1MjH|E&M56P?PA*{$c3Z0lwy?<>-bpA#0surZ4DoMh`|zf+6&RPxl>v)AVu zXY!h^T4B<8M(5PJf*>Pw)4J z>1YG1=w^?M(H@%*wd)kv>X6Cvjfjh%Kd};IDmdTZ>(&uQo;?A?}`^EB|mzB2l zv|BCKjhe+}&>lEnrSO?$?y>o8Goys#dZg5{=l9>gFZxbU;;rAQwmFY1zT31$JU=FX z|Hs3-3Ln@K7ql&E>0VeUAgCMM)A}&(%nI=?r~J14j{7o0OYgr7+s3)=-`is$)l7wL zx7Vs2b`}d`PZu^|^)9uUEDWXCmDy2#nIJS#TdD`~>go<5;?;PF= zW9N!y24me79~IjLe|~wc>2P6YO7hV>EtiSGr4#qHYn^2|9AXnt#}?x?Go&rYyixsC zyYCjaxSM<2-#%T{qo}gy>%y;s+uEl$-a5y|W%*iEPLOc-~OU8WuAcY{+D|vD5pC8nRZS|?^*kc?umv7tza6qBNd`$V z%XmcG_US%vc`g@nNTI{pY2%iKdzR?F^5Imtwf6tamH!`g*c~}`Wto$^fy`GmpO4cR zAGq5&bvOx_RQRnH4HCbixgg4Ee$gMb(hi>=uKu>}?a!{L7M2SBh}W>&)6x-I7{PYT zM%LPC-E8h9KSOM_bK^V8-yG0Cy3ldej%|_qq*ofoD|j62sM*n1?&yCw_DXa)SFzP~ z`3KxfI~Fo&^7d(Ze0$OpsO9jBvu`gy;Qtjl89|a6|%><3?*4#Sl+wmY%aPkzbZ4J4f&Yxkb z4%OLg@7?jct09@QE_`P;Z!oj`&Ra(7Z!YWPSG51V|7_~TuN-;D*SyRMY&ucd$#2f+ z+PlgjCDu`Hy@g=y`AsdCIwkz3*75or-55Xr$zE5UcDFXh%b%(?0Qs$0BlU7gF0 z%ZVwR4>=J#iFfT!*}Jo*vePd*Ab z{@g)%QKpOf=g$2{@A%wbtmk|y=Gpt>?e&vu_AqxI*qCc#Q^WIR>p%7_D|y&oTwLVc zd6{wbDdj55!sSQ${w@*LXx}6-xAW$mzrLQm>-auQIBIl!HMhy_S=&4BtlOI8_vY1p z$MXmHD$hKQ`CFvjdH4Iqy6XSyoa!4VMHm0{$PiVN=zMnm#KYR90>*h6QPX1P8x@xPUNUS#mn4(Ox}c1U z>v;bC+H<@-!m28JUzfJQp&xsWr7hTylHAB!`tgYE+526FH|qlvZtU|5h+j4@EnJ5^ z$ZU6)`=-0oV~d-1U--A=pTN`Ip}VXWb;U}RXH2X9IRAb8y{#ACrEvJ}UMO4iG6)7dvEnG3NQvPM8`r3+T-dt;| z?_KD=)2(M^vCwM)smOh!zFVE8*_@zm4 zy42z&wRYj>rChX6xV~fS4m0em_@kKc*YV%^gk;Xr??QK~yAuN}?%q*&to^@#|J!df zmNQPAf3rI=aBk4nh{=ayT|C!nl=P}>@^I=-`MuO8sp8aZflq9^mL7b*k@cZ;cdA@? zP32|Fy)Cyl`WNiDxm8TstUJ&C(3Wr2PfpzKos>7N?R0$n0h8|haIce}GT*E1w~!NX z__{Q4)tt-SB}{Kt9Z2cPZrpkE2+OVeLa+O6y6eo>oa+y`^tD$(ZsPQ5(^@sJvUb;( z={7Ezb;B#Ie=k$}ylv73=1;rZ%+Bq}p6qv)_kd8C(59nRm%K{5JMYdFc#$mpW&Zm6 z9WO%or<>#(cW<`RW?%dD`JGeCE*!li<{z*t_gnWi_gIVK8y|natG~xkc)#n5P`+^Y zA(^v}rJqe$JXL#IkgPi7`LnHUyWjSTJ#JnUshU%> zy8DA|2wBlzUZ(* ze501K{Mm&foCkKc^)PVE^Yv3M*kEz=1INin6Jt;Iw)HSqJ$Mm(Ol~q;s>%t)K%=Mm zb~k!hb{wB$*SvX>*`rGjS6ADKeZOHD!(Tg^gP~GB3UPo$|5AAg_AYwF7;(&OVcSUU^kF zSj?=g$63DYm8{62l>1RKy)Aq1$}U*CpvNuiIE()K=Z5xsrf}|--2bJ2{kxvP!@;7i z8>VLNtY0@p{zBJcd%vkY(L$z1YoE6z6~6pfr+;*j0ki$@HE2~k+(|dj=jYrhECakgN#nSjIrz@!s`V*JlA^zZ_b~4G-BrJ52uf( zzG>k#zpJ{gH^t`F(kZ8MOK!U~i7oeK-uFmIskfzShfn+Io!o!UadhrHrf%2~T;1Dp zYT3D?&B1jGD-WDn=4Hr#v|({?&+EX@f3nvl6LTtG9LTW~Tb1M4J1s-wvVO0G*pm$x zb+$V)ZJ8pmrgzT$qn(2P58T)uDVyg$J=fi`zoU0m%cuT7-SShTq~e-)oDTg`DEP2< zn}ytejniVCS^lr=S881QXXbgW_sEVV6Bf%y@LxKAPP%sH);&D4f_op|!-EzrkuGU>wc(wBeB3JMq8{#w=A@#9aQtdi;b6>`ol z?K1baceJ)VlKI2bC%dSii1_tt(lKT9pDq&Af4N1e{{E={mXB+mz?_F*vq%(NMJxgpZx>9clirh z)y^0HoU_o4FH!$aY@h$1p6)Y->$X`XZ(4im%*~^j?+p5a8cVN8Rfwp}j=!gTFyAuy z`_8+4;V;}?mMyrvG`C~gLhIsRwX5vY`ojOr6~4UWTw;8uQ0lCcn>TA^)b_>h{Iika z$<)U`Z8rQ(+1)n%$gIe|xaEiEL>(?IXno-$e8%LJ3coUQU&S>x!NVK11g@;MND#d6 zGkhlNj=l-8wc2+VDs-L^bdcV1aK89M)d_tIZg8b-`}Di2W@kXH(|1clUfDH$%S~7& zczxPE&p3H&*NZl`S00li`?mU;wM%&(@5^t=xwKwmDz8v6d*6u@M~@{PK3%RXT@rCl zvh>oAlj(hr6gwy8*(AQ(?7$i7rcf$vYBa6yW8tR#!hw=mF-r1|O}F)0ins3QXY4z4 z<#^1UE@4fDr5|r5ZvH9U+0VbjaQnV^E2lRrf+q)VUpw7(OJBc~BbSq#W3lQ6Nwzav zSfngcW0&!X?8nQdR3}amFx&E3gzx7r7ul6?SehcCF zD?4-RFU~h(dHnJ4QW*wyvwqJ)o>@=Uo7Dt0tJckovoU+R@lt;xhe9CJ3M+|~9;Xi! zi=5m3a+Om5633G>%%%rR+-8h%x>NdJ^G*4M{ymCo6JO{&-XZ_cIc@oLJ#W+34E_82 z=WXJAw@Ak3u&x^Au|qiy5}2>`Xn8ai$ZL zQ!C4)o=*^Y>bLKs!WI^_s&csr>T4YtCoVi_vhZDXBwOj+?djW-Cj@`BJ|A?WHbHMm zve}zinfkB1eI~>`NLFd(o4>OlyWHdM@fC*@thFbk=}puxJ+i^3Es-zjN@-r4>ZzL( zYIfP*+$F}uAG#sieMJ(dsanvL2@B(M`8Md!5zLj~Xpye(;0F=5rV%G_J&(+j`X zbw~KWIMY|P*L}i1!D*h$5-uNAJE*+vi0Cx7q}#tIoO0SeXHWX}FNY3U%`hlC^zqoT zs}pYLGQJmM;>oGwSaf`6(z~B?j(?l*w5#~=Zj~0}>*8DXC~WbLez^AYgpa9>7k#$v zzdSWx=i&~XtH0}&=T2n#+0F?Ymh#8YeFOm~%7b)ZKgc z_^e(SZ;Ib=(9L4v>fZaV!3$;8-Yu!AElO%V8F@~6;*R9h$_4fF(h@CZ*fm=0diY9O zb>g1+w~f*cmi9<#9a>$uozKDNk||8E0=>vV7uGL;nS*zqvcFf97)Hg6`oMhO1 z=_C&-r`Ni8?jFMUn zr&_z?@fAl}CE62Q*s`U~bl4|tx{-V3pu%I1=}XVPJ#=lso69--CY?6e z^ieN-pWDlmmXgys*oDvEET43S+f<#$XQ{1UtUl|ne_vj$<~Tg*<7|(Eaw>aQccpIs zHh=vLUPI4}$($>6TOPms`sd(T&X3oevesU>;W$}{d-MSo{%PH0 z8SjdTQ&aQZ%`1hB<<}qE z#kk*bPgl~ry8=~)lXqu?NINk}mw%{Sw!|;Y+PUqK+2mv9OcvrNm(~1FWZE9QW{GBe zUg6~bM$Nic#NM)>ZF4%f(;I5v;})hwMZmMN;+>fQ^i{_WhcCn0(2^grL7G`*%+xMd!Dw$SaPc7t-yH(AAB z|E^x0VrjDXC3kYhh3~xSoNwgjyxS0}IVElalc({F>~=oOHBO#r#_JH!*7&EI}&jmNjCY=`!&U~WD;Wy*Gk^uDL;db{6!bSu1g zu7V};?vz#Y8_uOIkJ!%JI{Ev@m6Zn{SKOYmX41>3|AMlA)E964b$`#S*`6=vPg!ek zv`fQzOO{3vdyYuU<%ktoB2#W(x!@kYK-wf?>HePeG26EV z$m*L!q-T!uJYRHijlaBB{S|=BO$)8<4e!azZ zwW(pQhqN`Feb)WDv;C^$)q*QrFO8;F1a>po9dGb^byjZ8u9W77pXD{Dwm;caA$^SD z<5gQ3zY7nNbu`#`rq0SZx8Cw)((9C22^-8bjCbg+jhnhkO-BEmxA+IPMX_hrT=(3t z-b`@ndLx08UN#C_nZ7?Zfg_mJ$>rpx+@ccn5SN`UuEN= zXg@up_^kEz>A^=oD$JgGwg2qpCr?x>=bzdB#!H`Xz8G`g)Ca5nTXgTeqEN}+cqvQ% z$dl*qmrs4j{&Dv^r_j#T=Cy~5-T&^idF(j#mAX#2!@vIzEB3tpe$iIdID%)w)VGQM z4|NOqt!ay^dD&3$?d~boxT!xMy59TpMj-d<6h)^kx}Jxg_(o0rn-~9s!L2Uxepx=_ zoRn)mC%y8falYQ6_A|ud3vb!037$q_^*+B@r*UuXGzxsFfU54OxDVj=s}A$NbOj?qh{%uXnO7;|bjIFmBhPm+RG+HYk|J zPy11Qr1xiZtDa(d|C|TM);-9q-ZJe^hgaXsUyoSkZt2_b%s{L9WcKmtLY@wJI~6s~ zTwX6Jx3O{Y?)){Yr^{~JuyBsn4Y?kRmXGW*i?f)BSh$^B?xP z|8tYZ63vh;{K<2AzfX@eomZvVlvE`scXX=LAxTZ{-7(XnV~QD{95}eivVkK$Mq4=K z^3l7~7l#OaeIWB;&K$-4zke*h`0dex(CO>ECi2W)`X01?RRnUb-B|I#~*mv zbtLl7fh*dpdz7PCqPZESzswE&ezEMCBXgw!%(XF zz}bUw&nkXy-?6bZD}C)-!x@&BCf4lOX_Z~Xy08Bsd%uc=)RGxKYQLq9*Uvk5s`Y-( z74yn?m8mi_BCB=XKIHelUSX6KsqcHUgRhJpH;%^_k2ozf=@%4cC!sEAty4Q8i=$K)=>Zhtq6$Ps6{_DAHw0j~Ko z=5?yn9=T`qeKkkWHBauQP4C>+&e+f>IZ?E1ePDY>r_ua}d3okBO*2lttXf#BuGZM0 zEwy%u6VC&O8AoSaYDibkQP8d8Tj2iC{lt^wT1OdX+lYZlo<5UH>r~BxFN+;=gsLe+vb=J>#91d;ZyrnO2^rD+E`hKHT|be&1f3rT_2gx6brxcgdR0 zRP_&37{w-dd|)(rYK=^Jd%h!X-AZZbic|Y@4 z5ck4wOD}Q6pYl7yWm2Qt+hj9~_nxh%$Q_pjXAUne+vT@>gKO=wS&A`|KKIrizIf@6 z;L{xw1HZ1@J8PDbLuRw!icb>`>cmIbIh9XXe64ks#%xK(eR^pryY_5XHQK5w)2wi5 zmiGV2OWU>^O#gT8XX=W>jC%6gXJ#2{9kRcn)$`|t`Zt?L&W^b8rP-**=4YPchzMPB}boMj9_%78`Bj|_a zk)yK;*E9e6m;bls3E!5z66N>h)XGd}ReudjY;g0OY}DU7ZT3p9jW+~+XSHnbJGw^1 zwnwmHTaHl3Iw`GE(U+f{#<*%Gp0i^?E74i`*yA4OXsY*`xaW@b`(cXKgR|{^!%qU9CIkRk9!8ERV5#abwp0zb~1h z_N-|2*wkht@3G95UHLbN8)>zFjNjb9mp(opn>@qv4IhNdNuZ*99c+ zp7{Jv-FVhBr*AwvcB^;%WEFQ>|7;7llUUEJXRYSN{2BefXC}ME?3Zqs6MNy*Y)0A6 zyX&{Pw_m!t?*H}LnirRsE}N}9sZh}Mtzy}n;`dd$+m|h#(sF*bmBR1La88di%x$M+ zjjeVu+rMU+?JjpOW6I*QMjcmdl62lF_56(~o}F+a;e7_9K>3-Z3`y2^?8g&!f0;e4 zMak}U!HtboANd?3jt%>vb>gShB`<_LjTBS-~PUeHO2L z=YD@Xpt> zzeT$%XM4+;D;94F`LxYqPf-5DIU)(E79q12ZVtWMoF{YO{J)>ySI-f@w_;XhPQgYQ z8J`afanfIOH>=OlxyXHH$IW}@SKM#!|M$JesB<#!9R1_`uTDvAJG^+x?nUR+D;J&E zJ84e(nT`A{+vTzY;;r^yzINqjS>*t++dibVXb=W5t zj_sd?=B%D@e%eCqGgA+w-d<6A_Ne_ji%oMjrKB6Yyjrs(uJWVzj;x?P8|1a-Y<8Dk zbLd^%yyNmxQ_7XQZq`5fJ7@FOLswN~wniLy_thdG;Cr}!%<(xp4&6R+C^Lyaj-7jN z?$QIV4;^)xvsXJkDPzt}9Z84uHG!MU{+yJPo^ztI{bOR5^Y@OGDz~4sH*9fB)tYmv zQ_)CqUZ>{tfUAsGGOcEO{rYas*{*{U-^1U|-+g)6lmAXtJp3I;=Ufq6eURl`>-I~R zOEwnf<$W>Gm7VkMLH6tXsD!Qcli$hd{5<-rKR0~NZ--0Y&GH48TW`B(!ZhJ6gZclW zxq^Lt){19m1ivep5|B69di4kS+_{pI!=fMm%zu7fz@R=oR(w(C?6q^{EEi8-wQBN` zy~p#m9hCI&`!YXZuJ*$h8`}>qys%WZdD?=#m9uN5Lg!lkpFCUSef|M4yF21fb#hKl z2@sh(qiPCY)}&YM7jET#cX`(kEb}IF?y}G9B7Yt9j@*&1o82y+ZyxKB%vmIOT^nFui#OFoIpEYigpT(9k_uvuHPhn-6_x)sZ8~wgZ z?0tEwc9)+dKI_4QV+oO>##m-E;+o|hT273Ow_azz%t|1|gVeBT7KRXSIv|K(up zQIEdfvhn5I*NQh*M%;35cpb5LE89XAJ-u9oxgT`bIdd8Bs5e@6bIE_@8?Uc!<(d2W zsNu4!2hUt$T798LtefM0P-oQKUmlw;9O_kmYxMi;mNnmGKR!H{HIE_UiqwM?fnzgI zSTYwh}zYhEk|$&Hg^&rhiI7EC?-uzb(;-1ABEQbL4I1#A9u z3DffVBE5K`$>O4rd8rmhN`J1Y=qhh?`(GQld8HX!&b-!s{fBoV7A*en@GN@q!=sIx zcg>$SYlrchHM?Y7O%~ieSz=to@#gvGd9&XYq#adu$%G>5GGx`y;ImFWQ?#E{=|L^T}S@ceM-n!ZI**ydj#blN*%dbAP zH1k8U!n`f>8THH}_vh{k)_%+?;Cbq{eb>B$bARQ;Y^uz+o*A!{P^qu^%$aN69rvq? z^|$bavZvMg?Ywg0xQ@N}ynBjavYog2Lw+nwuC-{*Oxz)~ao&$hA382G{eAnZbLaUR zeLvO2vTEit^SK9HF?Z`pnUdOdNYbcd;rsIWTznI%-V0PJ%@6Wm^5-iM=U$>dU!XY0 zBk%IEKivle+}I93Ui0rU(|ql%&w{(Zm9Chk^v`n!(*hldyGHZ%UrlVdFV50hAKmU` zFrj98-jR$MkmwO+XKj-S=dxpk_8&s!VW@q)?IU`x} z*8H{HsaElmccsV$w0OrKZMC|c|84#*%Qh3e)i;lpWY==BUrs$xAY(Rv*K#ZVBz23& z55F8rkKcYW`TGrRvx0BN6||?7{t28WB;KFaH~;XjT(e~l4sUn;x4NITUbS6U zF=zgz5H2093FhLf@|y(K{a;h}ZvVvjH$;BO+a2hCE%R)GK*-e3%R+zF&%Y@war0H` zr_LG6SG~Btug@fUSJM3ZPM?p7Z#dE`@O|&P{X4>JKh8^@|8(`u3BI3Bbls0>$^M{! zeS_xT3-e!Xp2^e0`Xlg~LYchT<%GGf|CY`F@9|QjQG=&u+3Sr@<=!=(y1d?UfpF{E z!>3kA1o9dj<(YDB@}wj_TSGlgL5YS&BwNJig(=+ed%_ei- z`8C-YUYg0cK!ZK_=F6=~{^isB#Wv{mq%IeEwZKToe4^u<>{pX3QZ2;S-+ORCHef+% ztiR2<-#<4fI_fe0Xj*j6aevQ(iN#Z&_PjhdEl%7=Os{@|!7)bD1-m6xd=u_5Gfdw9 z?~r~=&-n?8hZlT)c<0Pf`|fQv!LeD^={tk&S1w=h<%LVg4R&sR%f)i`ucLb-92V_c z@Z;gPr7SP6oHzLY__4tTzZtu=!WN1zHcI}#&wX-lcp`~G@kxB`pe2|p$;LZy)Un4dv`v3;f$H@%{bCO z=i7HIpETjrQw8IV=N2wgWZ`gJv$w49V4UZjs}ha(8Pyi9Z2WGy)^~zO@%N3Va{I3^ z*qUuyxN3vS-V2TUmq)sYMm^-I`t9B%uyEZwFXg+^*YDh(-&48Od8Wt*vF3#vEe`wL zJX&%`BBs=aE7|s4ci5eU=ZP_KDobfAG5?a zx7BeLPZs_v&se6flNvrp_gQf_tM9LHhXV`$)q8|XhcDUoM{-lttXESqVwN9X#PDfr z%8%-kGGVp1(%)yx+RdNbu}J^%1kPajj(i1&2+sd6=3Er_IX{E%JJM z`^Af0VPCHWq#L!*`O5n1o75t2R<+ga>yGBTifw%*8Zt39(DKnD@2cc2n!i`5?NzSx znY;7%zjqbci-IbWelDAJ)in0^o1Bw;F1G)_|6UZLa`*K@t<}CC67IYTu=mt3+8(_q z<$!}eM{oZ`dg^S9f57iV0&N@9~ z&nebl%!leWuYa~^tJAl3ksSqxk}mpRa*dJ|xElU=(XJfNLemC4*NoR&1*4{mSI)jw zzG#ojvTxkS>J*fW_VW}PWH(k%ShQ%*XU$8|>n^U&aQj={_tWdS7rXMJefQjd-CHlS ze(v{Ty#<*s8axx;E&4URW81v1GxsgZi#YIW+s1tb{L2>otNoz4k>$GN!tL1-E?*C5 zU$C}Yte2gV9>{S_GVR6oHQTD4FZkG=U2JsV*~Nux|M9gQUb=)aZSF?BH_H~A$J}PV zJ?Xit`iqj2cUG}Pi78qw4tT(F-diwH{O|U6h7rzpthfKnTO1pB`S=Q^Pny2%zb1wx zrLs=ac3PabdHZP}p88lzUj4_9Ix=H66#iXYKSg*&F~bHig~RJ3S{8rF=aXBrxZ87; z&)V$Mn|IdF+!Ya#e*778_2M3<-iWz(px5(_Q zdawQe;5Ej@3$u@{db0YtrAUg66Vv2P2?CLm7N1TIE;gPvtDBj7L9L0ZR(Si||BD}2 zuD#W?f^%)MkMXSFrt*1VC!`j?pSZ5UODFw#UHaq1UoWm{{%W1O_}31pH!GH=U2&=Z z%5VIJJF~bvdWlfd9g7q5ZrtDFyW0KQwZ`L*4|OgPy&~!3u_r5Rir3n#xb@GX_!ed^ z5t9y`x3G!%-9y`tmH}ZKcg#5Tdx^63bN$S1JgukdT6Q+y&o0|IFL;Ui+gD3|Rx`8Q z?hx^-aWwA@J-={?r#`>x2ALgmzkdDRXJfU`D8;R8NsM~J{$3Y-1v>y>O&XR|N4%fD)?>cp zAGy;rjU(&c&ze-VWQw-hHP83&(kna89y>WZ=~1f2;w96+r>3qn_fnYqYerR$1>>!x zt7c2K7ij)&?P;HxT(-YjyE5nh0q(g=4qUW2ze?|%?9S@`Kq_sf5XuSeJf2o+0Oa} z*Xg8OTJqf|x4ZvoVwAG(iwTkYZP%{e|8^LblNdLA;;OD`#w$*xx_oiTwnsvs--hzEEWr?MeY6SBd%k= zMXI7mKVj*N4{S0#fA7!UwduMi)6Wmna#Oc1ogZVx#o#K^r6M(tZH~Br_1jP9mo5z| z7kS;W?bF$HXT7if{=nq+^xo1P)2A7BOq=<$do@e@<-qXTtUCUshqlj1Idf@Euf)|o zSuM85Eq|S@SbFXFyd8f!ro|NRu$2&gFe&@OJfo!#uD7|{ELHh%;FnVj?}_Bu~8iVE2;Yv>d;665~QCeTPc_W%|?lD$f7)_#YFqFQ+Sqja|O; z?J|RjU3adD^z>y<$|H?7TtT-DA3wPcB zbkWL*$wBGZCI1DNmnATNeo&)uWHl2*xzY1!^ToZ@ZI%^3EZUv$ZFTNZP|1dw?~0??!C*^*XzXe zC~tdmK-^O%_txCGQIBhv+t*A@5ZITv%*X%Pwd;)smR;{UygcOb$-Rtz-$@ka)gE2jeS^Oo3n=`veBKII;WKBV9pY;(?~Cnv+fc{3WBCGC zwh}}2$`w^{`R&4AcbisuyDwjomKCk@KW=_|?6e>c|7{zqULRS$ifMnXn#iI)o)f#& zgBEv|mM>6Ven4qjbV5#C#`K4O8~(kt78X8zWckhajd4qM_7)_lPBXrHUFiz{l9c6d zra6gBO7r;Z&8C>q*Zb-S@5gP+-<|s1@=``pXhxrZe*FYyLHi3*%Rf7$a9>$DZHrRf zzf-)-=MO&&n6~`$|NJEj-BliFRWF!YQ-AK8#u1ejLha?QS1unscPDLysl4<|&cOPd z6*fH^9tKy{9qY5^JO}M|1(ykMdq2E@;muN zY?=4sj8_v@yqapiB9CpencTU;`_<{wl&^+7`NAL~u_C`cGRyYv0ls8*$?Hz9qU#&d zY*tim-egyEaJiTJqNr)xrcU0H)t( z@P+UASY+5eu>IWI3Yyf66j z+fJoy@6(kl{)P5<6rb8GIQ8`dzb47q2|zc2C!4Qd#cdxgXAU28AB`;gyp#lzmi)Xx+t%_ zAn`EO=HrvQ2IoWndz{}W-?VZ6$_tCmF6(~Q8+hftrjW|l`BQh=JzRNp6K8b8+GVwG zvzJU*0l?`+)GD(d)ZRm7(sJ8j>p^|@S{p7QV~S4(>8gHPu~iv zoVt7c;_T2X;(IT>d0W1!ZNY{h3F%3PBMiD7_D*=A-MPVH)wacak0qbHv=6`Vei<8= zh?3-=XRD4ihQ^=#xoh=-j?KFlxBZgkUM92Zvb;-%gp=D&(fX&BRdT;u9>gwPb@^P* z@|RkVvf4hGz5l*D?5)|BNvobOdVgb1SVB>**~afqyeh}rIL@wmb0E(}adjxy_k!uy zh5Fc&i&qD)W(=@@BRx&&X27vSoJ{Q2dnRu!UCkE$f^qR>TLEe3H7mEo9(-i_P-L}G zp48H&y}yroe4eF#U-`%#Z*7Lv;@g_`O^=>9`-pCQ`@yXb8(&!mtX5rDI#thMHpim{ z9c?`q)Q+ib4_R$g7Pz4@A%#um!pHQzY@Ex*o^4od_UTUS{G$v%E_N*l;6J!!NA23a z)rmhWPCEp&v;ALGl)lR2)w69Ia#v^WU*MQlZZ0#IbK%F=|GYfIHl(etd9l=PbKj=T zPlbA4UioDcp`;+cy7lZf(Lkk=)lCa5^_AlGvldkZtZugsic$*dIN^1D#wtd2_W5#? zr>vf)si1vW{-eQk?m}~yiOYkzR^_c;P#EIM^;V_Qo6Ada?gr~=0sQkEb=jMDoljW(ttY(WRDSfP&aW?jR=0fZV_xuZ4UdWEN%Nwfj2{U}*L*&v zGhf!QT*JFviHFfqd&azkq%&u$zb{rZzOshD;(YMq^T%8N-?BDgQqS$nPyVn*)*vOs z!$q;>!&Dm?yUnZbZTsf2MtAXs0I$2+XFGJ%G#jqFFPBQ*y2j|QUh=g4Z8_S$x*s<$ zG_ho~+qK52rFs*qk=vZI%U8SIw?F!0>}Nr;qB5m67%797`VdT%V=(T$8^|8M;qe5i(~wYee9jHDVjY=U&;`lE$CO>>Ov*8Jz#cOoMr;+DpW z=%CAsWzRSq4_V9Z67jXHaP!ZDHkOv3H=Lf%^y2PXk@MT0^L=u0X;{#16SHl;Vxa7& zwbG6E0#+>9;=Qdh^033=4aRlP->o&1iQ3yZGjzti<4)N!u54GD-#lAuzG~Czo5lg( zE)I-znxrTtlP9lTaAwJ+=`LZ3cW1Yku`;jr%-jEO?K)o*+20}O(qv6nwDKsq zRYhx`S$peqR-B)g5Qk*6)Y{_1z3yB72CjXYkyReiQ1h z?UmnJ_gk!TV!ky-yyJYa_RE8LT*W5#PHS3rRjz6JJcsG6_&Nb0QI8a^Wr97|k8JUJ zdGN1F$h>vpN3Fd34S1f0ou5(7u}b3ofki*oNv>A-Dppf^O$J^- z6QYem#SP>eu<2U$5!d<{*?$@}507#h?Dn8FPI4gZ%s>^LADiN<=NITbF+M zsOq9kyWR%IiRMVhU%Rr!Uu#|F^vJWSacUYdr;VT1ZWTSZJ-vBd?uO+j?tMMLXSQL7 znA4r^Z&C&V>zcl8Dwtr`X!T_NCc`(g4Xow$_|~-*)^1rQ$g5(u=ZomU5MS=?9M9Kv za+h=| z>vlR#wAyp;(!cn)z3C1YG{VIznb+M5KT&Z(@o=Jb<|L)Lc9&G2OG&Q#daEkJ_4ea6 z>(0NFxipzeyO?vqx*xwZGg^B;>&uEX&ERaddmFO0eci7$tDoQK^3L_VIlI62Zp0P& zGbG|QP9f!4OwFAHNutN-;bGir*OMcl+7v8f4(1C*Xu>*uZR>9 z+~{V*xM}Lgh+Edz%hvnb-um(W$;5oap!7R?_MESff1k2G^u^}jJqwE_%x90>bXL1l zF!Nu``gGaF|IPjT1hlkYFM2$Sao^_D%=HDVXYbihEqkQ-X|*92_mr;^*;4D9HVQeo z&14X15{?#a4Zm{ZYZ~|Zj#ROj%q20a@~5)>lD_^-_V#hj^?gsa_u5MI)^Go5d|Y~` zcg3Dtf7j3N)5-n%*4H3VV**e6zxR=g@BCfAInvdj`f|Np=c~Yf-JZ?CrU!1WKXvBv zsR}2*mx8}ug}vS&`1PFBwDo7hrW|coN!hE!n0k6S$B72(!yndPeyVJ6%R+tohm1## zOQf?d-ceh#{?_NW9QQf(ejc0tx$In;*PE@%D9ff#Y0X43@5!7u%J7ERrjC zgNC0@`Mk$Vvx3+cy;|^(otH0W*9OC>&&+Nf@HDfQ=*f*q%yBIc)7oI>xkG%t$A^;l zX}2uPcX}^Rs^Zw-`XX1(h9Ptgv*q>0vi|i~B9k;W1Z$PJKA3%NDU0_@zK@9#x*bKu z8z%qQJVAeQqwUF8j{Exmzj?m9xNgISk0+up9$%p3b+3IZhj5ruafi=_(^}Wv-`GAB zUQ{8pZ*|2PkA2HmZ@8WIFHMVQ+2*yaGs^BKJ3qA9uD;>HoYnS+>@FEzJn%cu^R~%f zriVK=JS?2#_lVEp(VIhe`0b9r{m$^|Bxr9yzDj0 z4}SHI{{Q96C+R$?d7?L8|4c|8ZH9a;#)&4>H#pYB+ zWg&%s>>IgEg}tUdYOm$`7-bRsP-pV#_KuDG=k9yIe*4s#<5Ab;eN#NMWB(u7sQE2e z+080mVq->Oa(UFBO9s|)8?{%cd}h_{PG34}_l>VB{;f}*EV$8Zv7WTSGUr&24FYN3 zrH*GZOgy(ScE8WnPs{(^`C=^avRf{(+?M&YAjfs##tq)RQg>zrr98e> z_Wg>}t$Wq8|8Cqc^|Y9&kk64f-RWN@Ci8#${_DWTjZR5C+IB~OX`HN4^;;{^9J(rg zaTsZ!4wiU3H#}`?bHFJ2vU(O`LS7OXJK3Ynv^Va$)a({NA?7M(>-(l_bln^D22OjLux1 zmGr@TlkJtw+iob$vT^vhMR;a+h|@lIp-nL_Em-61e&keqT3Dh`G12Rq<-|=XQwox= zP7pQz**Ev_y7=sCst*D;wX^&?qQ@Ik)Sf8cbiL1a-kb2~P0J#MDn7(*ezxaS{w01l zk5zU0ott(wEnatRg3Ff9=ViMltq?2_b&uJ!PwL2pC!z8xUsR6OP0RUgtICnF>Ci;K zox;g_Yb%x?jPlZ$HFqyt#HNc<`&-QZuF-y87#Y>3%M@0p+p$@?u_B;jec5l$Sxu`q zJZtm!&)&XS?`K(i_$J1SW}n^!)jFj;IP%V5v+dR!c*GVsVnb_BEwArU` zv*ye_-N8MfX<<7Lnt8oOWvS zHl9^e8s^U7GWg|NQDU5WrQ@>r<^xq9-TFIz#ms-#U+|XeRrP<7FPkr>mjwpw`5;uT z^z@+byZ^@*f4sl>#=G{VMHfAlg>HW_wy9Ey*_)8J`JJ6$e%9oSw+W&wGS*+b@4juh zvW4-!$UaTe-X`OyKdcN+0WOC-*KA=u`RhsIs@%1jCwmul_|6Mai+#6+!?di(NbOzH z|JHMn*SL7ZKQ7MN!rl3RyI*!|o7b|sqbq*5#GYDuev9Obz1#9#+O%eAc+K_-RQ`AR zZ^{-^!{wgm0v#8ImU6HDx4GnY{^c(v-e%p;P!w**uPmM>Ql zNIs^0*m>m@eam+32V3&GFPy1+m0vKxR>6!Xzwi7yvLI@Z_6qF?WbcG6f$V>d_2^*pF^4}yL!ucegXZ1 zf0xO%XSBSvH$8r|F{W_K)%q=(c7p4@>J@?u6=oaBY&v&n%U3<&-yg0vzIr(6-iG6I zG!+`F*Khf|*ogU%$nL{m7I;3MIIUvQwVC2uxvu|x*}YY9pHjSR$=rtZ3#NsbZxy;) zoy)7;YSz_|@kUBmqigb|^sS1g&bB6ATPM5q`pKaFsd{V|8gFh@j&t1I+g&Ha3>5v%P13UXYA>-4(m=jNtrw>`*Zcq{;eH*9a48&33@u5{rAf!n61fzf6Lb1oTnLQl#=~9 z6*w=Ho%)qrXE}Fk-$|{hca$}L?>pgXSK=(*G=Km5tt)PyZr&^DbySGs?1Im}yj9wb zy<68Ti`Gie^mN*8Q*ij}1djcZ2|`;puM7S=iPz^;{*_|)jW;>Gj(^JCdZA(GyI-z3 zH5XUQCVnyHf4Ir!!qyvMD>Jyn%NIO)KUewf#^+mNjcm8x)Lr3kc7>6j?Q+eFeX_f* znI65g_1Rn-h5yG@el+_e(=?bq3r!UL{r}`P&7QtvJAD5C_++*6u2sQ{oL{xKx9RI(uRr5)J=6A0Yg5Uim1hG*6uGy3zAAgX{k&tK{G%41$zBYXCa7p^ z=c%7QQ~ue~OKmDTQmpe5yTfmBZRfeUOgyXm-@%1b88fw*`M9~ ztr8nT-Mk+3t-rNhG^}(J!-5K(S+0J}J2~A-!_IqdH)I#kuJ&-=pVEHm-Roz8d8>8*)J(T~-?e`GQeUPp zLS?0aEsL3hoIB6;GVmV&F?QzH8$8B<8No$+@=sU1GY%8nJQwdIC8r-si7l{ek{*L+9xL>>K^ z9}-Tn9#EXb$@=EY*VU_cPxL5ON*PI9Q z_;2f#MxDsm@!FMZp8V3|J^7zMWaSi!EvOQc*ztPNg@wzCEd+doioSh6%N4y{{PT{l zYG)qLfBo-;{oM>l!MnTsKOQmO@$K(IQ}-f%sgwTB!m&Yfi=P!P-O2bTboTcJ)wAa) zdxqI<;d0Fpy}grV^%TcLw;!hO*limXWG`w@# zjhzSEKj;3p*lT}2a_aB&ULo1TzV&qI&HnTIX5~Gx*S~XOXOPSOc^j7I z^)o+MGT}OB-p7>diaVoAUHIx;pR6rdUpnDw{E7d5a;ta7)IQ0)?f(69$Ne3}%jz<2 zzpa!tY4$P2^*R{Y9pG`%U*W%rdxGwey#e;+c6iiEMjR zQYXKjs&g@3!eAHA;Yd-PMaQ#VyS_Q#oAR`6x50~D;o9~?|(UZ*lWC+GgI5Syd2A4GKy zt&n^gwnyo`kwMpyU2!@`?sS)*FyP3qU$kUOpRa9<%&vsp$qMazCSSX(+hNQ&Wrw%y zk%POEcTTgjm%IMors{-3rrm;bOMQOsO0`&S?6Z8Y%#MsHi#JUcWakg&-&HQ3vOrgM z?yJscTH(jhqkMv!4ICH*;3L%$nrVZN79@)dQY$f&Ybk?%nOUG{G+R zduf2(t~o~ng;J!%GN(`0+`e#*x>>r^r(N?TMQXSGEA37?$5kxubLwc&y(_!sZJQ~6 zyY);>_M~?|SRd`S6rG^GYw-!KZDG$>m|yrGTJOD9Y?kqn-MjX99cz+^__{~t>hIFK z!p=348ZEodDQU;CoHKLtOul4%JuD`v!s^SetAd*aC7YxKZt?9pd+=NKqyy7xb~9hU zvq4$+roL_6++BC%y)W|id|fwga!9zXoT zc-psIpOpQ4yXDz1z@vJ@_h zeevMRmNvTgIBK`i%hwYwz5OF=NZJzb6LAyx*eeJ%eDR(aLx7#1j z+3jTfEn&|y<9OC`4~HtQJD*NCOxW#Nu~|00yij=asl32H=|)B$Z*=XBG0}No!Fab^ zYSLML3B8-Ay3>?)C!W%p?)t9OjY;O@`|Kpo`B@J-cbD#78vW12;+mhn&Fa9YIcD~^ z_;>d*d8hvUYsa+EYP;7hZ|2c~A20nM}t%w!RPh zK2szlZPV0)xo!^ccW>OcM0Rr7f&+gKTr=3Y(#+sb-JIRq_4~x-E=^wbAoSysjO(BN z1Ri(ZePY+Gisluy3;OxDxqj}O*(yS*z3$2XJQ}n6QnZIf z-F{Q4fZ*I_}{v)sU1hUMX>CYf4pYt)kJ~VaqyjZT?dxBDUDkYp#Vg(>{a$@5fn}KZ&kZo7M2p=H12gPkZ`4hK7fx&zk?i z#&6l2E1wSNA3m~Yv0$~*VQPcpjw)$o+xJBgFlcN7l9 z+5Y^rH*N0DpAW8o-^Ta8T46!^sckZXFZX8u(%F>Y>G8HzUpM5j<1wyz@9p-M9`1Vf z^=}sInZEU2XC=1JG^xC>x9iIWi;hW=9N$xW&$|}K=Iih+-`kgVnt#HgW9_G9*j_%} zeP^}mm6LlXzG6P`_SCy=mn$EwR~LWx@Y4M6dl!7&tA4j7PhrDO@0x=3-Bw|=PYT|1{^u8A2#`^mQ_w;WIkyQJl?WACPH=RF#3D;YP- z%wM{4PN0sNAm`q#0X9=lZuQ1kt?bo%1U#glzFX_BJ=#yymaL2yTr->eYKkp>@aQuBNdN2D<(`5a9ISVW&v!&k+ zHsA3!j_G_{?%cZg0;$K^D$ez=d z!nn)UdcV$tytn(<=GSjzy#IpZr~~(lGL`-Id!9CitpDcHU@)OgWW~)k$&N$&BWB#+ zV>sP-d#j?jUgp!V zCQarwDzo;dJ?uYhb5V5W&S2jKQx3n6dnS5ge}O>Ky(5CmFZceO@S%6Lw574Yn*Akm zrU@ZB&Qh__+MB-3H8^JTq;G%e&#Uv_C@r*OKRori=A?D0l3IfMC!c)t`*#+cx?E`XJfpZ%cK*h5GLx%a%l5w%G;KI-&z-*S zwS|1VC1WNdtLy<5`&ru8CJWDXIkM{Jri0H{f1Ve5KrmAzbcNrlMZ#N7Brm*@7kjkn z-T}3(XIU?8nKX0Wl(V0hdm2~$VQ@PT{QN@PwE8wNbyL<9~ z`Rf~A1B(uvG&X3vccWwX;z<>gO_oSD-#@UjQN}-2 zJ!RrvC8d<`aQ?UVi%uL^*Xwp^>fJ+}Nsn07_s+Rc_?(&Tz=jo*7JfJpnyS0iTKvMT z?%8=7@dvg&dMePHqatdwQ)l~~*pDeoWRDy;V3!{t`bQ|LS&*k^_GZn0>mRBexGDe0 zp84LHKSjTPRjKRF{$!Iq;lTZC{SE01N-d_xW?S9N+rY2W?tI|&>8IJ9|E6X1_@C=o z7xjhF=#JBYcenmdj(f`0x^4gMLpQdrPI$`Qf8b|Q@RH{r)YEVAN57n;Rk3K#!M_KE zc(u>=E_6!2J$>qQd*#B!WmDF2-Ia0KIiFVjjeBg(a?sSMCu;l5qOObO z3H4_arE|W`k~wH&^Zdt*<4@1ZZg<{s!iN9R#U;%Ly)6r-Wu;{8dZGTZG}3JMwCbvB z2LmND!i+zc2~0eGP<~R!io=^io*s+eYl*;{)s*{{6n;QL)- z9M0u&3Fjn={@C{&%spc@_g3ABKPmU$&q?)U(brAPI#?V~<~2(;qmApKMjf_IQsRt+OZj$7$^)j;P>xx?Qbm@5` zew%{}R~!*OdPw=_S|OeVN3&dQSF>ft&SDF>OWvu#{^D_iNr~TzJ@T{)855NB!>G zT-!2s96UbP)$?4T#kN?VZyWx~-)2aW{&Dcu>@Cmdq&Vxs?Mf@=98%0Vw5ED(`YE28cbSI5{q8k?HyyH?QDYmm!7$V`Xr0XF zh#etkj^-S42+Usf?E073OKM(4{tq55b33kj$X~xEW8Hnma{_BSn(pTaTk-7Qb0~L* z@}H-2hO;jnuHW*^N|32#!-hk7f=5#}gi7Z2FF)&R8GoWPlRflMo_?2(*o`FpbM;Gm zs$b7D%V7I(sB`rt?|!}7O)V=`V&&8?z1Z1(;?P81rC0h}uFX+$@rj-Bp6~e;%c?^Y zuTNI3TQRRjZ-4W$%MGiFKFcW_n%eoN`TFzC54yj<^Xb--6*V+?_cw`ugDKwc?oi!2h#$hg0iPzBEtpX*j8KWc%@#oA)db=suil@KR!1_`;{lzob=d z+0CD}eOcY%KDWfhe_a-LZ#OfNzkXkR|BGjH4$rX9?YzACy2=6WkUhB^ThH%TP(M8T zK9}qHAop#%jtk%3U$uF@i}Ja{TcnMh*`Pe(pElVEW;ZQvM;ogD&CtVWNp5=7&tuZod?>v)n z__JW?g;Qr{>si*{%HJ7vmsM+(;t}Q-*+18*h^uI*W?YszE~XXJ`|AkzB(D4Ce~9Zn zwb?lRzTK7G=_|92$lE#pEs0W9(`61)ny4EczG}w)Bc^|&rSq>YYxXg9Q9YXeMR01E z>k-R)^QxKVQ?M&yF`UB=LN z9TMke#%G6y>paUjl4dHqriGDt_3gAz9Lq~*IsOoqJ<^!HYUPElYs_9Jt}};*`pjcp zzVS%AWw2n?Y10$4Up-mzI`LQVaiLpBI^MlemD4kpag^XP@?5%v>1^%YBb~XrS%sE6 z%@iZH*yo(cOuBj6`AFY|j5oU0-iH(zG_>?O!@E09PChcB+135b>Zb>9>{-Glw?1hr zv&-Ql+rEi#Jl(zT=r2Q?30Ff*X9-TZc;w(J>9x`CH2B2>uZJ}0`8ZDDzJBCTn7!gb zu_PtC{NgQ(iYs3{Xy1I~%;s9tebkw>twr`M_8J95e$W5o;qI1K-B9|u~`SzDf zBJ1a`t|QN-&YknV(^4W_TatFG^~|Ar9joZmosfqKj8F|DJmN=n9t)+YcnHv;Q(blfls>%QTGd@X5uo63B2We z!FM``$D+!8`^uw7_IxuHpYuHFjf`3<1H)sF^t``EkN&GS|6P_7cx%$#g97S@TD%)y z9=)c$$^TQ=AETC_>AdmvK511KvX8ztd+1V_sjPeBE7z`=+|2Tsdv_jV`F1W@WlH$- z-8x4#+82K}EI8|aOk~ZO3DMz~*{APb@W)G0{zwqaW<5kNWk~rr}1<)NdU^ zbLx+&%uC-AU$r`7#msAy=K5?uxxoLzF{{{VUjDiz=ao9ryUi0>98@cw9gDr4rs%ey zOkUW>cSFN6zN>l%eUBwcZ<{o!*?4=NR-{eZmI(?Lvo;>f%9c@2So!VYx=PKh9;U6& zoHAz~%TAS-*E_%vu|MqA>{pGqY+k5k9V<&e`spV}Me)C;kOfEH-4!*vlXPrK-rKM} zVaL2p6P(qWL@Y$@iyt4GCB?9?J!WG4_L+N^%WPa3qDeb$ivV zYfY~oIkxM`@03}Bh7SzVyfqG}FJH0srOdItdomwpY`J|`_1R-RrVE~zmV~`OcD#Mk z#XBD5=d?@}-wApIUy*p7ckFB@gQ5G6@=_0h>n$~cXYzZBjvTvj=_m`^pZeW7qGuF2 zE|vx*1fMwe^le~>^xj$Del#6Qxpe%un~jR&u~(6gn0m6k8@C)?>^JV&&;W|UzWRA9$XqLbM3f_pzJSh=j0#1l$JWSeiv_hikXt3?6 z<9;`T)3<~j|C6%$u*mIs$6qPGdUQN!+PyjJUz;(cu|=K!G&wTmI*Z})vY$sMZ=cX2 z9Tu;Bl_MqdYVYB1$IF@4MD-T>cs*Mv(btstTuGwi^YMl!MREq)Pv!o-^vpl0*ZU>+ z%vHxXc>h+rDkpm4>%m%wX}a4U@o)Wo{Oqr_wlxNI4-@-@?{1y0sii&d?C~4D1{Hf9 zwtwcnch)5%Z)Vv$#h~LKmp#qhd*QI8(rWoRu7P{j+`5%`g6XSCw_wNK856w!&zo&< zt1tg+&k3co>`Rj;&wh6E^XES8`3Y>btP@Y@p4_2(Ny*^&o8P~e9%F1;!Fcre3Cn^@ zZBOn!x*HR-HR+g7QMc*L*b^zG;-BMBrl0Czo?CU>X0MIF{F^7HGHAYGbS}Eu`LnH6 z{bTlusl_2DmVS&$*rY6eJM|6|>&q~Otu0C$PHakAcd(b`;aSN^HI|1abu5&PsXnnQ zw^D0w$dl!7XNs(1PJQfV^;z}ArSrxe8|0dNBY2H`R9bIi%z_5oA`WjTD7>uCEEzi*C(8g;v06k1_I3Om}HH zDZOZh``Pg8YkQB(yBSv@R8&`W{G^J}vHTtCR=cyhgH!Zsj&SH@-8pG$V!3SJWj70U zrvgzAAqS>ghhLtwy;qgy*Xz3GTF@lc3UiakuKv|09fR#|&%Vg^WohZ8sTT{UvaSlx zKIyKxCPvwz_z+8X)?6alN}YUrLq~T7QQxo{w~pZr$B>#*U7HyFCSGZulO^wZo1NH&X1Yv z`^8UAiSd2SRJ%5Y$zG;SxoJ(4PJ{8u1yQWBakA$7PAV^Zn(M#j&9dXdC)Yf!Sg&R2 zdm@AX>DJ!;FD)Th2q$d@{~zc^ioVRy;qqt7aG9gf_O zPf1Tdc{5P=OC@`>sKfd%a-wzG4oP2bpS)MrtU577?4kVf-VNf<^s3ta2A_PVx=&bV z-L1RNgd%KR4Hp#0yWBqctM42hcEjY3uQRTEJmoVz z?^W8%$(LPMp0<$6&^=MM^#7@3i~16dIe%*ASgcvu22R2evJqdtc_%G^6)*$1mhszLnqoH$Yw~=i5eZWrn8>f@I73I%ewR0A0?R+hklq&Rk&?) zYO~|sBdSX@T@-{?&((P=p!{;W^Qrw+^XE;up)7KBO<8$L$)gv`J^!CNoh+1cBtyAL zR4`v`Wnl7^+Y(bxJ=vMwws+Tr@DP5@HQM?+QI`3_ou0q65c*Mj_~D7u+%A2RC(edl*;`Q|c-!UY-dlS0r+b4|*oP_ZVRo2MN#W7Ymlw`!6+VwlKn@c6U#=If_@R9-P0`kp!URg34JmAWpO z?fo9713FZUo@&fGrMOr};p6KMOTM2dJRS1E!Y?i({YB7So8K=pWdy#xIC?ti-RiYV zIXxtQ&r(XW{wHe}8Q*m}@082-zR4#U{dE_xbk+8ZI|0+IZY}oVD$ds_ zogtR__jH?vzwPut{cAn0tvkH+hDiIAgx#k*OzaYB&+S_IZFc|do0DZ@rwU4*Uc{sO zLRWZu`E+j%Hr?k^FO+Q7o?hox!2hmw{(eQ8-qStRC7bZ$^n(fW;_P=Thsj7!4c7Ci+Lo3+=k%i; zFN6&rUuiJ^vSsSWZHtPuWqeM*ILTjFk#|NQN+l??_PUA94XyX5zn!mpI!*O3!$P(P zOj{<%p0ZuFdnT29gx0QdXYyZY-vT4_PjsVNa zd1u!2{XG9#Eo|xK3B^n2?RTm_d!*;gRwF}!>&bgJxhmJEu|Dcdog}7yW~;r6{DEZ= zTJ^d647qR2D)h5kcxD^3B}eC{%#st8Z(m*ceQ93*7qv4xb-x>~643wVld_pbwIy*T z%X05ChxUduA80w^!PR$%ZNkR){$0#7&m0$1`!90x%jExalT)_~O}+R*Rp-N=nO!YA{WMA%L`CkF?K(UA zUWMBgC!23t<)x0ExBjpy*@c{4AlG=~fY^jD5-sYdzwbHtX0FZivx^SCJiYgwmdgs} zf6qMil|CE$eLZ`u?%E~gMK_KfZoj|Qq=9GZ@&)(Kp13plf54K|Usuk?Ux*Sa*!@m) z(b>}vXU&^wIx)Fb>Sq0<7e6l^=2~#}*2RJ;$u>2Uqc2~0vvtnPr~hJ&&OW)wT5yex z?czc6uxY=0dTJJ@cAot({fDc?5yl&TUerBQ4C!a6`73^oNr=zi<@5VF46&zYb1&Vh zF7e6x9Q!`ibup`-2!1m4wrn^M+xKjG-Z}1d-)a^sRpbh3$UE*1yeGUgY|1(5qZ`r< zAEEVZUvHMNs-^avD)ZdOM!Bq?WM+1@y{hzx@eKAmr`3D(!e8qS4?7+n=S*EY*+jpEWPDvR@0396h+b}O6H zVJtaO=-LE{ML~5Qzl$!O%d7716u!gu_g-ClYKP@zMW1fJbEV?e2V=#GANX?dS|>*P zX*bBGohuVpYRjG>T;Q>CO5@Q4caiUjkIvP-{Crer=k@%bi&t;t<^9Yoay9bY`ft6d zcl;aNV?+Au*S5Qu22Ei-cYA~K$pva+UX`*(ulFgwH~v(vbME%Z?M`8%7eG z=Ns>DachW)IlNrGTwqW3P1W-n!2&z4heZ_ywdl>hGu3vPS?|*GrtME+ThhGNYuHcC zUvxJ}=$?`J`LLjnN7>uYF@Kfle7R_5@XpYUzt6|=z2xJb@vq26ves0eZ4TGw{a?@L z*xAGc|MJ+K$Ky6h_?zN~p3`>ctA4s3{Fif~Y|TlwHg}oj=!p>%iFsjXxbrKW$yAnqYImmHGUgt4|#>H_31B2^W8a)iR#BcS|oVzTogWsIkvzN$VCj(~mP; zXJ%{d<-Oo#c%-*#^ZuXg7iN_$+8y!k)~>n>0e4ugSlAany(RT!detYdGTz++7lN!U z8r$+qmzN$WRCy4vYP0oL-U}I@TDx_*-f}%|b69iT=(6wDS)vzm?Ms(__j%^QXvXt5 z?9djYFZX9$=$+j>iC=uZU!UpXgVQ^#&aP>Ac40w6i){Ohc?b7t@)T?CRgv`i%Xi_< z?PNW}74OpCc{N;3ufBZ0bX~%Q2jQ=jJQmeT*Grl=Y4p6GXqzB>;oWuF*(D|_Qh!9# z+#a2B(w<{~>B3*m2%SH|UpuV6uIK0#mR+%VX8lFR`n;PLz8wC$gL`)IxhD#mCYPKq z%CLPuZ8e{z@?`6)mm3#5cv*2=xF~0Pw6`*9-Nc^TOWd{;FR#^PxP4LO!iVXz?)G1) zmf5nu|5EH_A13Ep|b5o=@5oAS7Ro>&X_ zvx_dTgfF{u%>KFbic5u1f%N(bj}0%nD`v6vS7%Fk`L*6CvXb)Kefa0apu~hFlc&tv zbzn*%ee9N24Knmw7HbA!=g zV{FjHg7?D7ll)foPi#Kf7h&+)!0;x|#mciWdv~^elUx;0wARpTuIv5Vw=UMczp1sh zd*W{H`Q7ilw$3n?je2#l;op-p5541Ga_F@=TR!^B{;PM%#kTkJoc}FSvX=_Jd*`_O znU$wFwp^TFks4)vDz5py|GMf2i$BDQd=b8QVCz-h#(Oqff97%T<(S(ZH%I#F#e@5- zzP858XBN1ZE|yzyOSJK0<;61=zE7`p=7s zo%|-G`nl_R{E!vn8>DhjC+M}pxKH`UN8MWzWB?1J~n0Pyp*HACvSA0 zdnt*1fl2C$qf5#+y>G4+$Se&mWx150pZVgB{n=SniVIS?F1|}TwtvE<(o=I?^8QZU zc;v^v*j~TI&R4GZT&g;fQ*h*x@l5H46Dj94r7xZGn|o=pZJaHg?bxx}IB-ogHd%nmkx0crE2}?1~^^Va`2^r7xLJe?| z+^nL))3$MAvtjg$#%U}M6z!%yyWG+%aQoP4wl^D&J9C#j%973uy>_|X)$Z4qq;=x2 zqwc;u?WUbP@0j-G?k=^A6IW#(Pjhwp-58aB&)}-?<^Ds>UP_&JDh&>#8$XGOIC#^E z>GHJKjjLBLi~G2XP2r8$*+)82^2aaFFsS^dRA0&6U>n$Ug>|3ELtBf>3%l=qSDmup zMnvD2>d6jYY~wf8UtUyv?tVpMMv zd*S`%1A88I>M;tqJ%3cT$k$e^?(7A%%ZKmt>$QDl+Q4-ndGhzOQY&32e7k(3H;Qq- zcw1?#^tQBC@vcv?d_9-%JKr~}W)HA=nkl~h^RueWb$^dtej24C)yy!v?AJP@*{{qJ zrajV&xcn=3{-%x_|3B9i)Y>Wg`Rrd%SAK=1J#+Jl3hu?On%ve?4k<5wFwN@ZDAjY+rkpD}Ph6h7$w(dp4~?JIg#`X9oZPp6B{KQ-lB zh}o~t^U|&ul^t`w_oqB;{}a*5o7kG_DI?UVQANVe|3GG!s}YJtda4|y&v z-1%s)kzZm+;gyAN|4nAj_jF*`eap(WdprNzaJ4JTcmKA0cKmxklN;x)jY_G3`<7q5 zvOVc~XraV`&gBk~Nz#G*I&HVKuAE~MbJyR+$h<=zyzd6Eo?J7z8a<*eRSB65Sd z`^r;)ITqVO9-&Y3e(dTxGdryY)tIiQiY|b4rvSn19v`W!RVs3k3*j48zuO7e1HvW1ocUkwz+hQ)? zLiS!wSpL=6aoKwgrjQPvdCUvn#UuNGJIGps&- zZ;A0bC!b)kty_+%%(}Y&=yD}-|M!|t@)B3xPt&?1`%CNUh45WP!keG%mY8O^=hc;* z`2~z0ufAElY`@h>>95YZzPtHn2LI0ydU1{MdO~cpcwp#S`46{lpZoUWZ}_cijJK`r z=SoYtYB;~ncoLe$VK@KPH5G-~2UHI!2tKs$GxnQV9AX@^_L^%BPvnk+ViND!URfnb z1X{+sC|z^QS?XA!Gh^FxrTcvcb~i8ip2c%5RC)XJgGSSGtbaE8?o}=LtFo)=S{TF6 z#b#>DdmG~q-2c#BoFzZA`&yX%sU=$vCaCncJn6qTbMu7Ky_MG@zAZ^v*{?TYOTfRQ zChl*OD);+cix*y+r{dkH%^2cpZ8q)twuc%_*HVwKmwvT!vCE0whVic(q&6RVy6oEW zO^enY-5S-S&R_MoTYl1dsdJC7-Hn&+Y;OFsEo`gvJH9zgf zwU=5o&bbV1k5Y~aO1+S~Y<|m2>e_p2p7pW!R;vemF}z=V_s`zc>65Sh-LCLxYwz8Z ztuehWCA`AlXa4_uUA{w{LGH-|?+vUQb}Q)^C}+xDy{`OklGYZR{1a2suZF}JXBn)& zwE4PD;;YSzzZ7*R&%P^nB{e7^(46nO(?JDA5ksr*^P4>cEk7mm{4tcjUh&!2rh4kU z*G;Qdv&3vYx@zN1(d(65Z|*#koZY}~e?m{gqB7GhTIG73uNjYgXR-CqgOOEJofnjB zd?0(hEoo-%!_Qg#6DGJk{E>D+i$~e@`h>>Ce~fif_uBrytNuOmi6g`F`_~suS6=A+ zyhl2rBxs35)%$b&byu&iGExl*(Q3W@{p@zW-Z?7{mR+8IeZ!vqO$)H7oyOH==og30Gj<@f9;oIc;^HZYD zy=V0%Lb^8;t}~fzSlNHrWmh6&wadZ%HA*22>low&pE(}9;k(f=CQ|Th;}iAMYkq$}*ES{Z{S80um~UsNOFGU{ zXR`}_dcSjl|I-`Mc^}MX{}T8S^KO}_mUH#voHq+@~oV3S6*>nyZ=TR^VPG4Kc*;ezqHRo;MgDDboQ(pHC9g@_bva# z8|D-7B>Sv}&Q@l}8(niI?TWD2_2Np{y1>_=U8@$PpS;m~YX_@#-Lsc&u6$3G^-omg z3uWI}^wNL9DYGB*&m4Sj9vcCyr58TmDjC|K^*(&j?(?g(dJ7D1oT=X2m+@uiW9!5_b1K~S z-(ci3x$)ane$k92UJD+kgcdfrD@XFyBN z%WG%W7o;Stf1a$JVY1ofCeQ16^USiI-)!(*617WVkK4k}w{8mYmCgMzm1SS}-&~1r z@snoE{C4W5^@BrN3$oW)-~Ycq^6^U7lTy)3Z@M$T{qaCP-~P>nbEb7Nj~B37Io!zn+jyeegFz(fOU|MLb;s^T+m_DrpM^ha$s^Nj@> zJ13oN{%|%f=4OBSUR}N*Mh~{#`jc-RXN`X&+;el%Uap;U{?=^XD0WKQWUtc{-apfC zuFQ8TG3og}FJgM1fsxQVk2#31(VN|s8aR^9aSEud}Xkkmd)uh9A;pL&tX(zWvmHps*oqc%c@mqaoG9Njp*nGa9&XVM(C);!B z_}W`L%7Y{fgc;2LHCg~CAu@7d9OyyW)FfAt{` zrYSf7UDk8k=FIkwYMV|!W>L$}5cnzjqdkM~w(kYr!?)VZ=liiXDi!`K*|5~l;C9G| z#7#=G1(`0kMfq;H^Rrca&w<B+7(&-Mlve~AC@EJ+t*&)Xf%g7c@$in%lCR=iJB!ZR=Xx7%*d z*4psm+QO~8%hMY)e>3U6Q=0em_5$^vQafHfvgGFSKJv+A#-%8i!rM!1>yp1$T)!F7 zI?-X`?E|ao*cfiFd^P9hX}{{0{Zhg6J%3G7ysokC_Ufxsr%pN$IN|wX+nii)Ew9z@ zm)<`0p^|@NYI;f69@zzap@H|8?0kIt<{^sR?0rpZ zju;!=el(%1%JeOJzwjeJssFR)E)y)VzQgd7|NFCkw#15Of9-$l{xjP~pXUxoK}QVl z_KpiC61!)g7ylK%x4`m_o-xC^BfK*&c6Z)<#(HscS$68pJLZn*U*=_Wnmkydv1j?` zGjY7uMt9;Dr>5=Rye~gjb;)1b2is4Wl})%adFibLzn=Y%_x$>p8TRe`g=3`_cb2Xb z=IovF?78yCo^RzW@5{Y-KHb?8+2Ox~JwM^>I*#puEB}9fSTX<3fvx`T>g+4mHPrH7 z>I-U8k1JVx=Tzt9$pT)5>(=LPn459k`0c-mCU>qMv#~3;I4)q&=p8C!6fe2+kKUbU z0$i*5CDt&k{J*-p{A|IjSIZ0Uiq99g{&iK$mBu3*Uc8Hn$!xHndRO_ea^LXV2Xj7nLo)o-XV# zWS-jn%1tiGkR|hO=E`S5YxyTn3dyV7b@-R|dXskbyQMQy-m@-_b)McJev#{nL~UO| z!QHYOY z`?u<4?|D>k>E3Zmzq_J9AgATg0o&Bb+#=;mcNF+$tK4156I|U~e<$l_(64I&e%^~1 zzlz;GU@rIUjQ-SWu6fVjF|6A)rT*EyyQhSo%9uTh2%a<3>ENmqM}fzxhwt9>ezPri zGsBL|#Jl}JyC3a}JofnREz5h8rpm2N;Lfwp+Ut2^_hp8jySHDp&yHq%7yWMfMRRAT zzryeR#P0E#u9bgs&?W(#9vPD zsGT0U>q%dN|MY^Kjy4UYd&ZrTo_F_NDCxd*_2e_2l@R5GL8@u>tx|(Vo-pTsxUVlU7O~DmqG2#t6FKx{pa(w7ax;JZ2 zvfLa~o~tFvdEvjO9ITzCQ+{vlok=BOP zx~(^-+jh^IcW*bR&;plxQ4tDz*1o!;{k`;b&AWT&i?(oxNIo+B(PgeZ+l1qN0?WI5 zcONUaMsJ#E^Dlxyl(pua-KQxk_nsbYn6`fDvnzAvnCcj;id{Qx!Nq&u-mQ&limTeP zz2)`^)v76{x4#X%_nV35;pD>Oms_k@@~_QYA0j@>;yzdTImy$zSS~z}j@`U`Vfc*w zU2pI61$4K*TfiR8VY|aiv8fP z)XC=EbneiHV72rm1@~n-RX1{QIv>7aBXm}RRXpVw>#qAMb1H%-{|oldZ8BQ*s#bo* z^_h?EYa8c(;WIx|bWYdu){>dr7O_+9?|ZuDo7Qkx%$|M2==pHm*B{C?ldvX^JE zZuNh6*Uhd6q~EPu(DUKGzwEs*eto?OP;yts^Oaq;Cg_sVsz?=Sp* zY*ohTZ6~`87IfTOQnB#F6Qlc^UoHA3`Q*X;CiQb1Qs3iLZg#!7e^DcPPvIriGiS9~ zn4}mQ?TG|AF!#xAH@bk9se=A3k+*iq!q@B_@5dnVr6GPT8~ag3tVq2kvv< z|CcdcTXWup(>?xod6<4qDpMA_{(vuc+g(kE>zSTcz2}+!cG$wX;^_nVv+eTdF0_;f z>(}*HYwhkR$=Ucolfz`q(vN{bmoK-3)KqaNt#>JXpxL*$;Pvv!DVzrnKXPMsKeDOv z?E`zxpgC>rU!HB@D@!;x<-Ame^OOh9wU>1craUiw@ap9*zf~2p=S^Dnz}03`#1h3V zi@T<#Y}q*}{5s#Jf(L0b(|hl(s*rkFo+AGF<>TDb65N?Jik5j!7<<1t)H%+7Sa56?wW#O zfsK&l+6NChP5&A1`P=QU`FxtXuAQskOPL4Hc?B!x#XERa9Q%^vtL~e3X}S1=_fH)S zPwo#r#>Er)&__AYAhlca!AFkt2kIQX?9=}_nlR-a=#W32`cQJwt@=Ni9$U}rEc@`v z^TUD5?FJ8}ub1skDmT7=+p#EYS@_Y!FTU;%<#)a4Q}$uyZ``M2$~}40=gB+vJXE(@ zy0z9eYd_D~<1_m2-ta44-||pBD%fp;qhpC+)ZS|)FmUNEhcQ?Kc{zQ`Q(RHS(^&hKhXVo{=&bxOY8H*W^dZ?aF0YN?=+3`>Bi># zKg}QH{`PD<`S4hj)NJ#2xlYcZzM3ul8IsX2{y#jy6g20LMasw0@Vt2A?(1Ghzf5>| zoiFY6jrF^3wi!Ds=xoU{*%a#V@WrevKh`w~+5HWC922t3{k_OT`A6*BOFyo7x8P70 z>zl`4ekuL_o^<4qNulE7cb1E18gDE7ype%*JtdYu9%|v{)qZqzn}+4Q z9)~f4X@*WBHj!$I8w2ADhxF^w`+_N`%4Df|VvckFM-oANA^!v*AtMyn@-4 zzrz=I?0j^!#v?j6SjPCrGV@&f%UMTfbcQ{;&+z>DxwXAZpC;$NG=KYag7>xck6s=V zH8`SqyY5T;{F8=3v(`4TMm%OZZ*=~lTVOgv{hFm8j6dA5ZjgJ-`CZA1FKw`->UdSuAb=3p~hy-n)g zeDW!V;f7((S z7xl#b%`NF2-lqROf4$!H=(433pUB-Oftx;_uydBYS~*kh)rlI;n5jkYpDYp)n76>b z*TrhZwvX8tUtYbfx&6tK;%tX*j(Mtn{UTkl>eVyu9nX8RD$OIM>UNpa-7wANAz3r? zs*cA#*-$Hc$xtHuP~#saH`Z`-$>8&$Pj=M3(C#xeUn0da(JtZF;`=$*xt|;~WnrH6 z;$QpmbF9zL*X+^V_OJZO$*|J-ubFIRBoA)p^t5Qc z@ax^Zub!M~)_ikz+Ap0=((@*S)##bBw~Ie{oK+~Q<)+P&dVCx6Ck_XpCCaH!1@)I2 zDQ^3idwJILd6VP5B^mknJ{8{i+c_?E%h$b^PvzbT{@ip>BmSw}%#BN7#)_C(}t35LAJ&RC+=IS z+_`I=KvBcqfTs-$<7b9QE&aQr@_IqdWj_w9GxMIdCoL)c%s;JUGat``w=wSzW_?n9 z+B-j9{zU7$=T)!PDtgvA3V3g&4j!-@kTiSytR0=TlE-M8;`{g~yvX zExws)pVPD0lu7pKB8^BFfqmiBf`-jyfs-s(8AI9Ap8h$G{srozytd&Ryxge*(4 z(C$?8JG*+qq6__@Pxmn$e|LnX%Cqs+@tjE(zozp|n)vka=le^`9x_bLp5T!alyj#y zNcG**i>`s|Jw2k|ELpM2@kdeO@|5Z`PoLKHZrvc}dS&Sv&-r^yKKDG(y7lzc9M^p} ze)}ixoLg+;KdpFcag63OmR2?E1f}YvkF#}tTr1<_xm2R|%pmTq^H(4K#S1UE%{z7O zg0yV%y=SI=obxVA7OcN_xdnuk`-Adg!o5pXmE%ennwN z54`Y>W-Sq36C!K!F~H;Svw*9DS7s|b^)$8HdiBVyRo+fQ^3P(~^HZlaO?a95$NTsM zZv~IqSe0jKy6+U#Snn+IuYbR|^8IU$yweMwWuEPNqHul5?PtCxr!!uf@}$oG&9lN~ z0VyBXZ0a=N_o?{1ro>lIaoe-1vr|J=%r@)G^%U&iw6I%LfX(aKe2;FoGh4p>YEUQ? z<13qbeNu&$wQxp^ckB46A?gNfzDk=LT;cl<7FkTp07iT(`m1m8n|4 z_PLSihx`+W5U$xl;ER(C!(-!g4Evz~4a>yhsFPf{GR!X`04_x|>S!@Tj_ z#3!mUQ78U5*3Zto@I2n_L`>%TZzUD7e5$2io@Mqf|Mfgk|MJ$G=c5ZW_^-M0pK@L& z8)ox7@r82RsgkG)u|BgTHCG#NuiKBFC#~d^Ir#l*!-sh7&i*UYLZy7^<`lyp$!}3-aK#R?d6=~@aW_APn#YYd`&szH2cQ$HC9e)oq|>DZ}citX5ZqE zQ~7=F`Q8I8|3B^hSFUuqrhH;+>uWAHCgF}DIt|{Mr{wBWOu<_>01zBgg60|2CQ+cGE{rp#S)&DoY_5^%7pfX|Q z!qA|`#;ebN^{rt_{~L3oXAAeywOPI$HA#vuIAmosazgp83jA2c`o~@9A@A*5FT^@7 zEcn&8AWrnXId|2U<4dIYuf33wJHUS}S$o2+f+mM6X{?=@oeN&*^1jlX`|_ZKd6~JG z%(bZ3Nu@e349pU;!cI^6@+j)9fLnD7Q{9)w7Xch`DO2x$TGV(##+5ziVxs(g{}(~Y z`dzJlZ*R+W&8?rAy5t7iu@5iG*_0OdEZ@Ca=fTZT>(>wGnmo{bQ6Z(OSGoPiYAy9T z@kHTQ0*#%YUUXZZU;d=DY8ubv-w$p6)R^Zk@_VtkV(t5>OTA~sH*@k_yR%vRU`Bgm`QkBX%H+Z@J9gT7*y}RZmf2C%P;8B-DPCQKVyoV$A<|?wk6s`)Yd29Wy za*@vcd#|Dtw3VC;UW$lu>##kLcWg*s{4LOvcbbRq!c>3n^Eem;A^3X5kiwep3UW42q1p1ZgIL%`dY)A~A-Upl?~A-&Y0 z!f%SN5Rb88?&%QG#FydIx&wnu?l+|{ZoKet=55nWr@LMz_(>_nxK3RdI>~mqnAYJ+ zj^?W`i$2~FU3aCSq<;UzyXOt68T@j0ylmUX74E?N_T_pRnflP654+x-^?unU+?1Kg z?s@awlZ|yRH(d>}`jGo_x~S#WH4}O{-Wsi}eV;mkKIPogJTm*NkkE#gr}U<}o4hs|Gim$!M>2JGIX)z9nd)Nnw(>YQR?&dV1sJ}U|AsLI&7NK42yGfL(8;cGA7 zJUfuHMsm@&U$f237@rhflB-O5`LT6rpiFYgjnnzF&&_tZu=2}{&X=Dxodm>IE!$bb z>U#XXoxX3LtMSXfGZ&sIc%y$TU+-tj-~8aaIt?nX7*DD0I=J`ur9+{1>w`Tvb2Pp^ z^va|&^ViuQ0-51_ljP(Y)E_8|o_=L#X>`WJXW6gIiHE%>Y`XV=UFOs)r@+%Hhac!2 zID9Ghm2&9)152wCU%8f@z4TpkQ}lTb^LYNkwTxEpF23^8yWVs}zfNdWm$pB8qT z*&h~}`eFTarG|e?6F$9~V5lW5kTg$Wvbd;*fXL!09VvdV<_R1=b17x}j>TW=el1mq zHW7Zi`_(FCYh~~Hb*+^K{MNnnN`=?)ChjR69d|#x-qNdBY#aY7e*3e{d#$_Ma=QerULSbC z>ZlN=%*}7}Zl;!$(<4FgqSx1MzVSW5sWY>=#zr7}^4q2u$)MNQIkqp6pDp&zoxRq# zxprMr?#A}l_m%#&Y*lMlWHylExwN44a>Qzf*H4P`+6$#NcfHJ(+R81&z4;K=s@GpT z{v^DAk-D(PXoAvb)wQ24&iMI;>5^m6)pG(iI*Ha7KmDF_LgStP8&=arp_|efyR0{C z4qvUyf0@lq?2X!G`Qth(-f1S!e|dHB%-c6NDl)z?Exq}kx%bz*bDA$*b~zkd=6+cD zjahxJz-E)ndhy@$xTf=}nNHT4_QrZnXNZe$ud8g|*3wn1GYyyjKKmw5_pSW{z0fny z);e!l-&P%6~7*U%uj)c7syM5eX% zK{wAw99!)zrL8wDSaaW7o~qLO%x5;JEOcXjd(h=gNw@csw}K2GsusR)ot}GZ>wMmW zyj;n)%ioFx>4voJU$%Wp|BbwJ#VhvuO^bXh_U7)9FEcILl+y3}a86R)b_PXj8%bRVbJK?SW zR|{|ERpn9PS58LsbhI+4ZP@%asG&`>e24OtvR@jXF8q%DoyqL>Hv84&z{MQ?QERSc z$g@STa{Yat^0s=xa+#RPY>zgG%0805adm@8-?g_>KdA0dWxcAfzWZTy)KzDu{}1@y zPIC}`G$FmFEsHfyM($j`@i)i7x9jqXb&a!oj&I&^Zu9n^PBptOWxZX$%=wqx3C6kh zXYX#jbxhlTf`ri9Tf)mf9alR0BUqqY$~bIU0PnOzZy%T!9NDzT;#WcIR)!Nb;`f*T zO1T5Y*u zr?1ca9S?(@ug$AfekXrLy41-zU+DIN>yIJXJjzDLc{w}H+z@V&RFhuwG))@%0;JSd@E%?otw2|!lwAI?^+kEEiw$y z{@vego)MyVpSNL~`n!XD8FJ#9D}rB3&rJ?EmlLA%LgC#@xxLYw)2{x#65d{%T6jE- zOY7geKlGqcmnXccC#V&EKDqQkj^62f;&+h#9FKhh2#AAMSVy&&`do5e#TK*0HUQM?vI=Hj3 zD28e3&iC3(m1;7VR$P~`Ih-#Td#N{ti|xH(CQnD50~g#_ z)S$v3IVX4Fs{=J?whQO#xAPue zp^~w0{~Fu(DLF@1w_U$tGr_9*=?BKjyP;we-gj*DVK6^h!SYbf^wbp&Db?eT#ol+B zG`OFR*dAykcF&@F>34st+4}zDN5&^&1@lun z%NNuxG|I3NJ{9#r?jH9K(W(b$H*hg3i|6av99lBBtB^vwNgJlc#)_Q9qvEQ4!lJwPEtTi;?E6ALg)?txkIP zJ#pXMloJPTUe0j&^Wej>9l2}kH%HYT>U+n)ZPRJI=JLG{D`NS0b9Gu1OSqrpWCpvh z|J-}#!*1;zHs^moIJ9)*UH&sK9rQJX@0fF`eO0n)BC4=boSwFzMwz*SKuwT zoxjW%Z&EAv{uq><5(iUF};dWL>A$PV^S?)_B$BY+va2 zv0rk{46QsimvZ)FS2pyBP0w7v`{SIKZVT$eIM38;wiX5cKc&-YtMKuf|HsOPoM)?i zPsvO?$r>vV{39K61>W=KqX5go`Q^h@ftfB(l<7T0}Kzh7os`s~z!N1ndfB}K{~KU)TFx~a3E zteC0l7VG4P0vrDKed3zPRdRHe=NGqf!^;P3Tuy0PWqlI03jWj9)%)zu^_&l>pJWUs z2TcDY>+)1wV6o-l@7r3#mVGQ+R znK5h5`U;(x?$s7uwCPje)#bN2cNRKaW7@IJf~Dp06j$y~@x4Eo|IW3$vU0I_pzUp` z4d)rDi zkJd*`n{ZU!Fu3z|;=OxMKlSC^IDM}6yiQwu&g}Dj&ogG1@_d>*OW9J(|7&_zxXi`* z-!C#x4~+e^^xPrFpgH^6tIHU8?kgKMrt*LKw<*Nb`XglZpfQng)vsgiHjlLMdg-(@MUtM=b)doSCq@8!3g z!@+u=3!TLzSx+hNiBmVf_3J5j&V(mxKi96Eem3ji;?~pJ|CryY)T~`M{ov;%d)K(U zp7x8Aoqd~a){+;gCMUZ;uL*KKUu~}~|2)b=LMT=G;nK`2pEq|Z?bl2$)ARo2p|srP z<<`x?e?ISecGg`qUwXY}XO)KjcGfTba{oS`%J}}U(WU3E&BdT=nT7jjXa1=9d}V(} zkXW|GqQ3e7WUI{O9XwCJG)lAKG7v?k%(1(U-lkiv9Dmoz?ag)gS)KHTmqn z5wR(DXV>x1A7giHc3j?i`{azNv!b58J395q%+Fsw`FOM6oc(rXM}J?Mc!}GO`4yl4 zntL`oEwNdVdh?uKg4E8WJqMnAVO4pvNGN7Q$BH#|D`p!0t5*Db^^06#iJD_|@3nx* z;#T*|?*5qVI^&D>ZiRz2`Z7vc`UUEZKNj~C2qb;6b_!B?p?y@tu+L$iOFOU8wspI| zSQng+uDkHHSEZQux5!bM>qdH4zoa)VxGWs^nVWT1RH=rYN!tRR17EV1*cRWC{TXzo zO8j$rp;C|1N6jxer5lP4AI&S4Xg%6IIaR27ZG+;!Qm&3$ zUviEn&rkoO;B0K7%y@JE+8Uk6nlE`L_x-*jer96_%Zv+o47R&BzIOOhAR?)^W6S^5 zSDHU<3t6hpWVprPOV#w4(^9ito)uiPsk!p_nx+QV@h|mYjh$#*y9i0`m!R#{z9Ru zaGsh>>O*}??StC4RKA>NdE{U#uj;q$Md8^ux2+DSFxh{($o!^fK7RRXcHJgho zd}Uz4)mx?hcPjs_FJgUU`Ze!Fc6n%d=?~N7AloZ0Yc9Gh&HI|KHQj@Kt;0f-9(C=i zr?SOX+CRTG$@LhvUK15mnA{pu${hG`?Lo7zoeMMTTaF$oz0mS4#8fpdWN)MR*I5EW zGHFt#-2K~axMpqBI=Rui`s=L2>z`B_ztUc3n`xX>v0}}I(qmue++TM4=Jk;O^KR4~ zbLMwjDzNa@*X0_2&&u`68``gb7Au@slEim|`Rj(1PLHsv@}Deqy99oSO=JtwyZUwS zLt9zFl+d6XNgtcG9|?GsAENX1gu7h6exV-+W9IMV>?dnx*LCgw`rBql^d>9uFvn+R zyygq1X+GLJ?;Ed6)T0vDl=(W3Y!{0?UT4Ms;QBX#?jEOrurR>|-C{m}PsHVvz3ccU zx^Sz+7hb)*sImty3ui2MyOLA(&2+cgTczC_H|+Mkd-tG8z;_4dxNqKq&5P~a_4};1 zWIunB)X8RlbKke56Ok1*_bT%bypd&5u9^D9EBE!cs_Z>3Uo-nBH%wi2xBn|^%&heM zZ=C^)S*F);ot=6)H)tKdw7hOp>$j;pFM4z320q@pskDy$Mf91+v(A3opjh5tv(QkA z^Y46RlMj|>6Q@gl+jc9>(*1_Mn7N3Wk>~Mm^X?QM_;!i&^}eHQGaLNMRF}=NNDr+| z@c4EwaaTsgteWJm4VPd4eRXH!mPcjZ?){zGwk=U`t=#V*uA&nTey=YTetVE}acBFa zqAR;@3l@FzP?0>{6!`5O7f-*Z?Bn0N%FV7kcR3RDt$Xsf_a7N0jM@I`nv@@(?64=A zS8S{2xBu1G4mYP%&WuZz;*0HF74ZD#neQyK)o+x3ohzuYWnV?r!jlctZUlelam=r+ z=Lm@cn|8|C)n4-<{07wBip>-;%BOc3=H|@1B0vjn37_E#DoSZj|))=ZkGR z-`_6(TpV?NanPrCALq>MS`%)3Z{_!o8xyWM^LI(ld%yn@`-~foyIc=`|CF)$>kmOa z$;_J%qS`wat4LiF`oSR0qivG2+ zc9y@mbW~bnO3ln|KP-R5xt+>OUM;d;!t=P~>*+h)nLYY{`-=O&S^TI_Ja=Q8R@jEPia3)c8;kC(RIjB8P8>Q z8p|`>(4H|R=b@o2kt)*Kh^Q$+`aG*VLNJm?bkn6 zDlE*Ky4pnZ$IIlBhSdps0xs>jymevutZi#o$o>?}e4od0r+hI7cj@<-pG__myYheP zFQ2=3w#@VjrO0J7_Fj5=`ALY~&*0b2>)-7Dxjkg*eXTqH*tT32bN^Wr&U`emYM%9( zmmfPcvNy235RY*J8I;waoO`&(lT=?iEze zpTslM=4*n$pRf>Xxu56vq<_hobmvDsdBhQ~UJVxzb*}?Q;@q12Wy;W#0KEQ^eY0 z$rx9%Q^Y9V`TVIVZTa%Q#D^+zD+YticR<5h!i^#l+Bs+`Pc1A+2s5C+vRO`KTkbuJ6YlDsZGDx6AXK07@fB{ zoC-N%@h1J|t^-lOr9Uc5cE5KQSoNni^30P*4;J55_^t8koMCo2e zi8sHsgt#5DPtCM@B^7hmry_Uvs=wa9b-qsL68;j-s3~^tRnC+HEhV{yzvC~j%8IDI z^YP66t;~K&%+EqSs(vRvzZdPOrSGz4ez|DU^bN0-Wa@rrR8`G5eClhQwB6lM%fE|m z@=r+rooUN4r{w3>bv9PqGM8ul(b~AZ=66o%mxmAkNPnI1S1r-{a}~Q6WBc!#<~JX? zF0XvAXuaynskyT@)yb~^-L@-P*sS5J(6VsJxr}S>p0SAM{@s^g)A(=JveFfGdBPTV zTqhRDUHd&H?5xv3!5=Wea zV$Q6&cjV*$@ad}kK5OyVX2ZF)jcYoOJ3hD{|3}F4PsJ(bkfl|nn?=u0yWi&9)cHs9 zOq8X_RyK59p?T={+R0DrPfi?w9i;YpQ+mSE#ZaTAFX^=A)S&-+3^jV zG#W*iC6&I_{n2xpz`t+;PuTZrPKz7Xg-5&!ga4T9E`7CU|GIF~gX`wLl@d54vFX|$ z%aYunpo{{(*^%K(9~S7&cp_2u$7$i?s>Ss=V)MUvtFfN2d>qvL{g2Cyz*qO(*KX1K z=*|3<;oEkVnM{AYCjV;wdtuT4lP$rMlVc3-sonHjrk?nQ9 zj>i>~U$^hRC0aH0&(ipsXVpx0G6|6nqOLn?&adA+_s`mrq&y=wK|&^I<04Van!oVz|M0h_xjOiNW;xAl%3S_e?zf~+ zrso~uHJObE7}x!JmevsW*Z6s-2iL*A)LX2Vk3C6$`($zO#lLnY4?pa)c_C~N`+?Vb z`lm07%(;KQSr|@sN=lA*dv#0p} zJN`M6KcS)I=po0ywagLn+;2Ku!zz1AL$;ee3E1}SZ^MsEalLn+hzT_OJ`=y}-gJ3} zi+>wuPHJYI>oQ5-Ok&;=FBhAu@3jBUU7>pLCwKU>_EpL6J}sH}A~)y!->te5v*c!* z)O^kR%EYfTvGem{qrW?s6`pbp5<6?c|Hl4BRJ4N9y@tO#w_W;iLRzqy`PFyHCDF;c zzN+Pa4^Hw`S#CCe)po8Yp`R>lJ|6rqczXgHw~wPZg5*+InT zNv)|=%D)_uX~8u%>cW$oPp4c+Fx=;ULFZpn=JfrW=RMNbO6pj`arW1gwqtVtnx4jr zFr?eat-U|%<38>-x3<$Z|N3U}YTmnk_|2XC_O!bTW?fw-Vf1h5#4mEk4&G^%Kl;>g z`;zV}r+M%F+jZ&o&a28gOu2XNJc&29%x0_l@^7z$vvTZ-Qv!Z}k6Ei~#$9~KtoiT6 zIvy{hwo6?bcYQ8>^>5FDnzH@>?lC^9S|p}@TsG)L?>58z8^cSP{=NNZwv*?~zW+>n zo;}>e_0`GO{pf#Y&&?($dhLIljs6$<{bRd)!q&?Ftj)DM4*!;s7TY#ASg~_s^xs7F z|H`Ybu}*pSVRPt2->?NPY>gGc4ga+``fkM){J1A{YTnitzKi;v7A*L$<@V?4jBac5 z3n%*D%`HFm=uxlOf4ylhi{EzkxpL0-_jFn$du)Ts%KwH<@4p=R#eV)>jb^3gES=LW zb#DKocyr^Q2sZ!Y^M3TF;;GNw#8UPDQCjbBWbe8aBE0h^x1HerN*m$3{}VkI&*o^C z_tN_8r+snqqJ6p#ZvQX-!sf4C|95U+N8|P_DXj9>Kjr>!s|;<*+c#;JWZ$AJo45eI zls3`-T{;Xa-`Z5Rd(X?A)ts0S(Q~zJ^@2{5G z!m56B_w&tn-b+Y-DdGG7`Kd%dqk&Eq@4mBFHazv>3B0oU|G#)a|J-FY7tOx%&7Tya zoX|PFNUz!a31_d=)Z~@EzdS7O=f>{%w(hZIuda??Ky9R3<-!8S&3En@XWYtlb=nhh zKxd=P0$=skr;W;GcFV3Qn%}YZGrc9Fw_fjMvFV+Hv%Bhe*ydk8*rwSoWwnT>#7{EU zW9!NA^9|=`B+7=pHQ9Ud*-E~614t!py7J!0_kSm&%UAOh;mOYWHMkuJ#t;liB*SwofY{#$7tE!0-IK z4V#kse!DK1fApBT?hTFhSBebBt>68+5YB%0f3lppiQDAb-W#52kAmB?T5taC&0qNQ zT&zJ+Ldo_=Ea%sqXHL$^dCD@;t9SFp$kR8sY}~e_OD&J1I7-pt^Ev*NIq1<+lB_Nvs|%wS{7gW zmF&$gE8XNpW9Oc{amTuO=B>HUqGB@Yweyva+zGGcVT_!#`szdFyq!FMEWGD=guMOq zL_WC2Zfd5|QOAHq$3IFg&<*K-R?js3T_Wp455dG|h7$FqZr88hRc=f=YV>MyuD7u* z^UI!j&mF$^=Fh0`-!9#=Mp(}^;LEJVT@${WtKM<9h}E{(9rHkxM^Nm5?Bb7Gw=yPb zsZN`8q0(m2%%*F1g3oYu7SMFlbR@tSA6TDm)1GRNsYxytjy1`g-=+s@^G`GBjt_k<_1UH!##9c|)n(#KB zai-FpR*h1gtTE#Cv+2y#o zWLEw9X0!D1!wXkkjW&ob@$z0~z!ez+g@_Q`aLxyzro8>`e>oaqGz5X1P$?HCQuOpg!;lXaH+p#xi>%`2NU=w?Ls+DBH5jD|| z?d(N|*(`Vub%pD)S~4F#*r~(2uQ1Tue2*#j%!(@~{k{F;WV#ooA3Ey1^w6TS)vIe` z%j4!(E50{gk;XIoU99LL(>qcVC02$wTcod_+IxxJcCNfsaPJqvYgbDby)oh5w)N)S zs~3(PyY0ASnQlkFds9W*lE9hOHi!3aP}!=tDfrt1$$3mZ?;cKPXTQO>VH!(T?d0yX z<^N)YL%SZmsxW`gyy4L+E5C)wxjNZ1CQkX|D6~K5{_7jS+XQ_;0$cT>WUt{nr~lu)GzDGd$aU!N=sj z{7r%2IU0HkPHnZ8b5XaubiE_@Oj-Yhw@Gc@KPOIpoX4^3p~$-lVm)WHV+w>FK6gBS z6PWbyQ^EiJY(0sm)<{n{rpNho_x$Z^D?>Y<3*GcTq-S;ILBY<0pS|Wc_%=Ja=MN58k^e)Wjh?(*=;538ql!;FQNX*sSH zo^^mhpn1i9p6NgQR=hu25@hqme}SEQJX7yROD>n!cV_PUxA$l~YeLAsUH@_q-Ff}> zfc=cg*2f>O5t;qyWSYlmrhbR!N7mNAb8=q#d`=7(u5nEcTQfD}M0QNT-R-+h|Gqxc zab-SO9p8--6g^LMJIl4kg6)9fI#ss9Y0 zKjG^7AIfHX@Y`n2qV>i_2Ua^gwe4Wopu6+Z{7;O4 znS0(HcHLsDa_Fzz!oT@;HAhzH?9z#n`^>VD&rLHg=1YR$?tLx~(=Sf+-I(G~`nO`! zo9Zt*qUS=cDF#ny+I%GI4ELIz;yCw92ffbnzfcOl6BQDmb*-vsrL7Z-XKsQ2p*LqX z>ggS2pV0j=PUZmHO0F%LE|OmQjXcwfGGA-BT(B`@{Lga#Ou?7QF$L+e1@q1w zV(b$5KA~CvNmbFqt%CaQi%)s&dV1BqcrWj?E8NK;_7f!b#Q(Hj`8h>DHm^u)QY z1-agm=Ph5(GYYwqUpZUh`AVtWukIP=x0bL^Puk$8yNUnP2cr!i-mWz+Jo4MP*Rid_ zUvl;*Sxerq|0kKQnr>PSS}|O+`H-5+!OV3Y*+3! zU0xq+x-Fd1L+l)vtZ&pQF1afUkH5PlB2vZi@DPLcy+=<|oP$ga+<7$Xo3zajK1)4i zZnNHP(K6=M@jp^y%s&Kh8Ol#RUcEfIcXvZv{d_%}(+{qCnzR2tY_Zhqq_%C*bw+uY zWrsFP8Xfqbo5kGp>6@~EtdH1De(rQr-NdX@lA`B)mp&C_p5?SmFz!Oq#f!ZK{F&lQ z3Q9e+E|~M#&MwK66gxX(k>i5N+>8ILF1^`zZRvRrsoh;(DK{q9owtb&m* zPS{+G}PE2##ZTu*tX|AIAS+4AokUiy60edzp?|Ibx^2ZJ55*vMsb&_&_xdUQfByW7N zyY<;g<7d*@-Nrn9_p>gTx$L;I^6S-e%dXWI>^|Jz^H!~DZ$E$itzOwy7d=g%O-Fz3 z+^F^SsDHe%Wx+3ho6oEYVo3rr%bmVOSikXqrzc%O5IsTmnjm-vA(U7 z?Z4hJU(%Z9w)5CO7k9nmxy}7zOJHNWPLgxh zSs9~{sZodf&WIQ>NWWas8RS31M(>&VT!+8nH(GA|oN_GOSkdc?t-3-moAp(J#nu@G zu13>b&R_1T<+!wV`;5E#XH}BRj+%3NS9ADP{@a%Q;NJ_S|3ZH_U!Q0HWFBT&9biyl zzi;J-rRp{NcgtSdJ9oF1bllQZvA<>U?u!>GHwVkUyZ`o7m|?~d`SX9TJLDaI_+G?{ zrCuTT$9iWCg?7cZ7Mo??3KqPO*|6Z9^@F|U9(!&vtxn4e=1%NuQ&{w8$C@L{4pi+r zbe%`}8jPRw{#zN&5K1k-P~euw-E+GnNpqjowtk>kcYPFbiV{)F?yEgeLK4Oyu z5-Yzie7pHb*wxhO#y+1Oa822E=QHEREf-T1goV8K|8!&t-6y=vXY#F^JodE-)t^|m z#IN7QGEm6`w9#AQ}&vOl)=e&XdA1&`mU z`I9TXb}eC@)aa)*l;KO)SowpOIm4H1AV~ zZpUBYH*OXm%I>9ZE4!n6#HmAW*}54fEV1+K%&U(i&JjA)AyfG2zQ0Coymq>v-mxvp zOzlrkwyu$OS=+oilXL0*h4=1%n;7NHe7hj({fe#`d`}cE8ya&wk7l?V7rL`a>^%Fj zg=?60v0V3B8GKvD%;M-p=i~{8onA}&Sy}9gmn{AAZ;OgfoVnz*>8$-_8nXW_Ej1pq zIUia5^7h}!454*X`RDIE_P}ec#)G>@&S$=oXNfa4k63j6fti=e!KhW%b~-J`OR{^}wbX1o9Gk-AmMP}RC#%A|?cf3e2aKlSb< z8xyunKj0;NA~3k4;X>M*=7+r2y$|>1s&8J@ts64uTb1CxAL^~zoj3W4gIvPb*~A{i4^8NHgO_*>6UDp)X%Is z83nI3ee`X9{NU|VxNbG`ykO+X3~Ams6Y9dAr}e1u?K`#m*p-4$j1Fai+j*4p8&X!p zKH9u&fA*_O?~}ahKEL_o#nHLRVD;udxv$>%1}N01+`V$+mVZH9jEjrXz2Ju&DZ=yEvl%ETw-1+Ir1+KSSy|6Vey zo_R+|@kg!;UE2CvW#4*tF0q*FA2;Dfx7|CNs)mF-mhTe|9qIR*Z|`d&xL z>Xw{L*y;Z8*tDk2j0Rm2ZU?^~e*LGge%_?lAA3*bEUReze|Gn*NpDh$RL`+%*ztZ% z%2{^leEFiQPh6*LSv76PiLb97M;!5U;n;ukjA>D-gInOu1rHuR6x+ri`E_sEq7%WI zXN$KgTCQ`PWyWz*W#NW6Rqo&BA{k+fd@%`2&rI>Wxp9Ws5)P)xN5hSrk`_g9*a#)2 zFx08+pXhR~ptseZzjxoeb#eK5Yg-Si?_gagQm?bR@#~!XfBQ4fa0LG{{c*GX+!Nc4 z%RaRJ)$BV{&lz~)`hioWtefPrR@(7uOV(K)Qaq-<)voXx>xzjlvX!!K*X6#pXkxl@ z$fx^KvGDTTPml5sOh4mkeb)GXwZy->^(oVydsn}>r?7vXyy?3I)4v&rT`~*XYLoJ6 zwY1f;S%-Y%#mbJTr_GrCQlQCa%Z4S}1iQUVrY*bHUz)ZrRwV5UyL>ih(Q7fLnRd-@ zv|<{V(*jbv`MNSBc}$Z$o^|_gPttmJD?Ll->-Q?bYXt}W%hpclzp(TDtfQ{{t2FLZ zv(@cAw)()o9M<~#+dQT?uWxy~>$BJep2f0kop0GEFN&(KNSaJ0|H{PRc)4PRn#zz1*~^f8W=`mU*{WuO1gQ z>s?~s+p77HnW22;ieyfg3_a0;qH_oDJ~eiHtNd#7w#_jsbdSZ)4SrxX{i2M~4wZd# zSLpf9ejj&SHCeyriIzdebf4KW@%qzGNC??o%xtzjz30-~%N!q-7dsxD*s!4?=(TcX z=X#$h+#QaZ%XTeaS}5hWCM*5M)U>B3MbB&yxqCoVd;QcCFA`&C7yn;6yYWq*&Z~-F zKb!a!?(BK4xA3V-0d_gCLZ#4an;U3_%r zzk;*R?pv(?z{wNV^5|y6^yi`H3u9#?+*C{$y0fAgwy91v`=5J__nl?%n+V&&h<*H# zlNQbPWy}3|P9~If?ee$=#WMzv?D$r(*zHl*w{Y;cnmc9wx;;rZ7k}Fye5yO}$yd>t zx@l7HUQ4^nw_Z1KvGqHkDR?@!@qu$w$sF^t9nKa@XUkmS`BWq=pS}4VQ%?QU&K>qT zDVZjfkJr}TI~wxT{MmoY4G+$xf0J|H+$6*v7qQg;=0u;|iTzgf$BG_473z}LEhF^pEO$Ay;zUN=kP2Ei+puQ?BKku*F&dQCupr)5LV z)gJ*&)~1TL_v>-Iy)J7tM{}#o#}2>P2T(J%p8M0ewoSp-CE^$jPJu66KXOlDmxE%OKUw=wrP%eOQ$V4(*K2TUxVB}W|J-Xt0WIb`t94^ zw>&a5PI1w(c15i{Z^V~7XIEU*Ppb`Ef8|!kI_=}X_nO9=skCIyd_$i_hG|zO z{YpB& z{&o5LeDi&=m6ksOgU_GR2%WwD+?p-A3gP*y6lSrd>+2W%TYP%Ujs1a5G56YLi?U{Lvb1svd$|n9VYh5L$ zDW|QMXOrLi(LTqkHIFy*Kwg*eFaJc}1gYK5&gHX1_vE!VM0J-Lxjx{Ye$M`2LC51h zJ>IKgt}AR4Umuz#S#n(bobt72ZFef3{eQH|DlN})Muy|_^am{K4?p4;$Tcir&)qlm zYRY=^$v*8nSd+V6pY!_Eb?89)XW>IL-WsHzyZrv{Q}+y)8m14kS2B1%oxwNlU0?Fd zv@>#&ajo~4cGiU?C_I`H@7~1YwdMNGGE0^h_wGvP*RB=0$@gsGuA02_XRaUUW0=*T zu3Y%_<%3U8dd%N{-?3bN-(T&eAB)2Fgz5IXxfR|JbxK(M@=IVicjVs(bM)BC@=wl; zDhs&3G>)r@C-&h3Lzi+LrysonXWw@FTsjkSNTK%ji6?iK-+j{U$a!q*tLVVlNB^aq ze%rL~-zvLD^-skXvmC2??aAxr?~PWQl6Rj8;;l9 zf7Zn?>+N)~-1&@u=|-Mw2eyRY{!k%XJ)NaX@bTtnISj(aky%I2Xt>XR)&13aU9+54N!^oKHtQek zJdxek@c3~-+&3=mZ8y4_%Yri$1DxU;Jf7Y;Y3IMItllDH^~s|Rr{{e4DGX2z>+^Kb5Yxg(VGzO4J*)`TagrQ+`?Y?^=E?L_*GGi5!JVNEe@ z&GRR@hxnawyR!TDg3IAH6aDVB2bay-v!_$alVSk$@~gOWXMZ zZF?FeeopiMu8=%`o|lPZgQU%b=|0J;3$5QD5>a|K#b3AX*(^TxFEy^~Y+{bzHVgJo zI=b#!cZQlSf6LKNdl;V_ez5ttb{=ntOPkimV-rFx_f9rG@s?9pO=9tr!fi)QZI@VP zaD9GgZ(mV*xv}WfUdN3O`!XDK*g z!buws#az8`a++babE4W~_a70v>+E|@MAmTRb}qg0KJD^}eTJ7-ZrS?3XwS5_f_h$R z+gcvax;pt<{ms^iu4vL&#^tW+~4}XaH#H&h&Hobh?=*qjOGdAbu6VcaP%+ltp_cMfFPf`;1 zP1tpO7NeN&guwX7zsa9iSlGHZY=2^*$tJBE_9pg`sD0J6tr?&BT0>`kZ4PC+VQ{efc-W@Z7rNb2fe0btt^c{NHKct!dYy7nM#~a52B9`R&0e zeklu>-6hlx9F137Uc9;@Fv36I|LO{6;eSq!@n`Ew?mUr=lvlX;<=*xQUnPFsv05=9 z_mv6n4ypNR#tSz1p7m=zDZ}*M=>2q-HAy?m&E?7t)a9#dPEuidd*tuh=db_9-&MB{ z-mAs9%*nEkSNeGSqNb3_y^4HN>9R@2Y3zr(61^qFH=Igx{uCL1o=xZK0~LpYFgKx# z+jnkm?(JQ-werhVhCTfGAJ-hcGpp)dZ(Z;1{U^({qw-hWfBsjCJE~&Ew}~=wQt9;% zUfcfjZkfMr!oSF-nJy;t0v2#F@ujYteERIPL(i`V+z8mpKJ)69@UNnaxzA^RnzZ_N zNuMaov8C6xb!@)-qwzz5nH`6wk^BXhQlzrJ? zzb!<1>9+|7ech_xa-`<-RCeyXaBFU-c+~BSoLWwPNsBToHcg+y`l)I|#=FS%1)E<_ z)>`Y?{hN>f_0Dx?=WXHrq4%Wlc(g#twyKk^0gcIvs;|dcW-2Y7a(4~iiQ+}|w(DBH z?7h>pr}6A6t;vo%?3^@X|9pNZRPu&bV@dd4!5c#9?AkB>+Fje#`|zJ(`CFZ=`kwBO z8P?KM&V;%zK6){E*ZHZreGU~H>6tBl)y1iw7A=Lo*{K9YC#^wZ9Us?pcCig`>vzVTwb+%-4G zo8gnyXID0tZl66bW_8Vkr|*|CMG8DVWwE%0$LNa^1Jm8_|I4O`xa1fZt43xDE#hXe zcrxqKtJP}T^kNV6K9ej6PX7^eam9|fUKW{1y#QwW+LR>uB}wlWvEH2Snwyi@kremc zq|?ksbm5AYc$b;Geuih4%P25ixyGG3CGY;u2#q$ug^d^ZmriNfJz>T^y-g=~op}D& zXZF-fN?U*Nt#|s$AM-qZ?c|qBXPG-b(l6gHY#O~ z-invF9aCAO)L+wer%O8Lxo}j`;h^~k7C&D2yH-E0&ba*G3+!0;+5|eFey8iwX{He*^FS3O`on!FqeE)b+{Dx;8ljeTY*w#I} zio0yaC$()s>pnVM()BnU|LKC;@=YA?A3n_S=>M+vcBX=-Shz-0<+d{#UM&tDCzb5{ z^d~Va7Hl!izII#e|K>jzUd<1WvnwcToBB^MKZZd%<4@1TV?mz2^JdOqe*LNQK=?bR zUxJJ0hw*V1y{L5DvtOY^gJ02I=GlTrho8-kTp3b0hi}21TZ_VEv$wKz9BrTJuC{%a zTxZ!XhAEHo{~TTP#Yf|hkErRLxM@xODv+<%bggT>|ud$&_o z^CnzgG~G<>Z@abR-`Qu5tT=u`dY!K^(>J;E^AdKH+vQF)p8Gq4pK0?tR{2@~R?G`n z)S>yJFv&t-(unI!#kbDCZLf%oyvHqh z^#HqlyXfUKnWr+*H4bsK%c-!NbE@Y{0X7O&{*wNh`~JD24ub}c)!D(q%s zqSvwnuCj#t=MH8Znsxc+PiKo5@pBhcL(jge4_Kcq^iBHY%V39NZG{;*_F2|q7aKOJ zdOuh)_kzxSOUXS|+nJB=-+ROUlzOa2;hHOcPCui5f8YIXo3YQTw$s@O z!-sCm6>R%1%(&HjWM9<9nNbX8tkX)SOCC9{ydbyK&+5R1s!2NjZw%}=KAUAGr1oGz^Ypr6%nE`$kUVk#yxj{??mIcWqJQlKS;B z`u@8qZud`5v0C7N`i<{9?fIGBr_UOEz2&DUbVBqTqoN1Du}V$P-I`CwDl{{?+k?11 ze<;(wV{~zgwAine)h1nyDXg`Oj%Jc7`%I5j&eBPL!I``Ku9~(WUEsMm9LUyspsIlD(~eI#3o?Yez^EXV&e-afI>{lK!1u9au? zu4G<(+WhKg{ms2SD|U$Lzgcy1VHN);oru$W^3?VPIZ4VL`Z4Q8C10q$8p}!NtC|-M zO_W}?z{eu~P+jfDMwu#si3OH zma|2QWy_Y{c(haR%;L!T{knz6t0&Ei%{V%HLw>l=@5fvlSEaY^&iDBh_&EP*vS0W< zgRkCc!I!(As_@zty;XhuqP4#8JNNf(+@|sAA2o%Qwmd(v{zloIQqEirj~=c4`-K5_cp z>{v7RfPLnhoIhdfg$kHj-PUt2KXj*Kv(bWd?myq_=6pQl_dF$^#Zi03GZ*nMAy=0< z&p9%G-KD=ruJ4)4y{zp;^xuiC4SdV^4a^?zOV~bD&hgmprXP%F&V77-Q;)r*hp(`_ ze75d~xK#pjoKsts?rnP^_)4baRJTA{Xzi@%bGkzFu3pk~>iXDHuVlWzuX(Pw%U;Q^ z)lL;rm0_#gFD+4yaC|y{=2L_B>(zHwf8H*y>D{sNz_J;edj!9?DLq}VYsJ6KFS1@o zx~%(lqRFiAG)tTv`}tR5dRzYr9JXF6om_Eyw&=T>C*rRd=X~wEb+&9>&}I2ES2cTi z+FF`i{$G>o+3mpBc`^ltAvs5kFcgc-2GUA!gCGMNyY1`lAHOa>| zvMvlWxw~FkZ42v{EAtmVn%pcFKE3!iUvtvS<6()3x^`2Wo5kk%IdU=`$eTII*}Ht6 zl!8@6;ndcuduh*^P1#N6=v7oEAKztoC1c{Q7Q63hbM2FF9Sq?JH+rP8u5iPaMW2h7 zWnAPj_W56PBH!*6<7KIzSO0B$={sd(?S=P8KF*5dJ+Cxp&Q^E#rGFd6_AhBWxT#2| z@ZE>dD0$yg>-O$zy%1=>_|We)ty$L7%lYh&EpDirekP>q$+ELY82qkBZ?IUGz5aAf zuBvHfQ5~1@; z=$}{h_^h_eO_@ELjt8z@+Z6hL!w<<1iDgS#kLy(H7ys)vXuWnb?bD6l@7D=DU$f?4 zP>A@(#Nd5=mUopKk2&2gU48$@tz%OSZdkwDHZxLX!}aJ;s~c@^N;G6|)TW%hc7OHi z_&9N`W$q>y96K)G3F0iAy*TNu%htB@4tvVj4)6K8PA25dg|&;~ZDq0-7_WbInOWpg z=>0p(;wPO9h@8o;{eg9_vyG{sns!+B`Q~jekMV`%{#J_EI`ivStL6<~=XNCvAGHc$ z4_fjp?f#ehq04yOmn|#3Cf&RH$5j()9%+F}Ps!`=m6DmW3JQ30zBu!#uDU#_>q@=l zvdL3s1TamwxR&ouR`DgZ$_cCV|2_B|%^M{Yrz~qRVHdA>_uan>|L+hroaWrr5_;YK z(28R-NmL{ zYi`+I6gzJkdd+a5_38cg)2b&e;Mt{|c5Fri>%SQsuN8bVGi|@fEnasiTU%}6d%@Nu zj*7RvZtvq~)#-HEZ!Uc~_ws{F?_RS^U37X2E1{w|)GJ@IU>{nDJH zTWWI3821&n?R7OT)#4C${v+#hbz?X4sdXwdgmZ6LM3&Xm+)b+u;Ge%}!p^7Df5vK8 zToT!GLT*A~CtGFz|GM32PaKa-Roxf=x^lKPC#$4@-h6hkzjmd&qLYj>^qSmX*8LIb z+a?!#`f>H{=lip6O%fZr2WC#Hd3`+T^D?J$7#uq8A3hUnC$Fuiv6Vre697Ny-) zAw99Kn%kfM+w|^6OLe51ody3j_N_VmO&>HS{hMYctupy^cZJ+Mm%}}24$Oil9_Ozv zGK^l?Tlo<0_r!4)T8QIEq z`O){~#vg6hFBT7!<+}LXi1)GG29s#L3csTfoJ%I(dY`9QeJtTpATLL4yTs&6b+S{V zZnz&hz$GzV{l>vFkqI?96JGmWIoMKCc5<@xvUQS+IH!8_D+H^)vlPI94E zw9B=DD>L^_T+y-dOst~%*^LjcD874p>*l`1`3xEtE--MVKN6l0)%~kiy}Gw+YQo%x zT^lbsoXy-}mV185rc1{H>~wW%y$+tAzDVWV?9fRYTh_g*TgT9IY0J@%8~!g7T&H_V zgReX+Txar>A3tlw-o@n}&j@&VC}iT&uhJ}M1JzHtb1?3ow~|-lVpw-yChxX9o0hxR z-WIK3xcB=H*M`q0+oS~+rSl86x0)4PWb|_OJoeScCSc;iW5s3Hxb*9J#Q7#Ku=+DO z`n_k$qS9PZR-sirnV&?w&e9`k_ z)az{1N*YhZezscXGPOlRA#l>mP170K&xJS&Pt7*Hb!_VF%#^*X76%$9vM{MT#KmSg z-xRsoQ)d>u=JTzi2lT(1F9~1rRp`zS#jE^nyX)V*j6Xi{^s8&_(w$5TogYcNKQ7)g z^FqY`g8xG8sUKc{{(7w`PT<>y=Fa)cV6I<=u+W$ z;RnP2XA9@*6Sl+jIUrTTB0gMqMQl4S)FKE^z%lGx_cm?bB_~pJg1a z`K5JUdqbX4=$;mXhix^hY#;afH(1!uFil>_Wd3cnS=^T`YwoGLhvZFM*}CBP(MLSq zX38riPd@u`F3%wDxQ(~+%#Ld}#kNis{4`Cbv@zCuLUwiRWbF>!uU~~~4eS$yt2f`@ zEMI;5vv{*_^0uAx^CJ%1pPX|g;o`HG<=?xWzY#y`aOU{U{e0OrHf8VqpJyMcyqeS? zlk%eV&D@h_w{xcJ{V3>p9G$3?zQR*t)sBR}1uj;4$$!s^x~JV@HWuwSe9~|8^yJ#h zJrZZ5O3VV!&fdyX((t5=dt+tZErn0BKIGhB-qrkgc3knSRhQ!Kw11j@QtFz2%KO%t zZi#v*NdC$&pB`Xy->GyYQ4QRe}w3p85Os-H0T}+`lp=4 zn_>CEVd|R;^7kJ1OrP`hd6P-XYt66EjNdjSSNdfJ{keE9Zr@|i9m!`tOn+1uVeg%H zP->S-mEndtq7C7F-UfG}J&%jjjO{UsT{&k2>d&Qp)G6J}e}1d{d-vHf#fODL z-|7}VGU8*p|Mn+`yKCo}-P{U`rp1TvdVksc$pYUQbC>YA=Sc9YZ0QilneZ`YLF?{o z-2eUDis!4Y>N?(%T>amc)AUz*?5DgRVMVA}L%EJ%unn&(T z4igRTtKMmx-Lz$Y^J>xcKO8qYPj*@-S$)6ZyPMPnX=l$~Isc6I?)FQSOB>cQ`Om1SQZ#MfTFN%5n`@X0{NbFJBUtO~E-!{%r z)yfNcK70OFvFCY9SMfLX@pJkfKM;3%ohUowbQ$Y;PxklZ{yS^xD*StAz}ydu?0wl= zpY5J2`hVKI{%x`vHuc{xo|nwg{&D=0oW!ftVqZ!2{-xtu_7YzvJ#n50>q>7c}4haY(iDq~4U9-%kG%i<@r2pOy8d&1vqLIvH z$B}w4`};v&%@bD3zkOV}Z0h4PU0GFge=;xFAu21qCXD;vlfboqe>c_MwTP9xbGRvD z#X{dzLJN{h=ibeWp0PjkX!_MZhpzQ)>U_9ZK4tZSsCjGu2Fxj16Mo;vW#_Bh0}tLh zH^w?}WZ6VZ|NiTkYyBj;Fd)IRMCE1UE;H)>q@dwO!HY?jRB6IZS{{A5}f z$;S5A-|(8Bc}$+i+4)ZsWX0~p2pyQbuIfpA$>ylrd$JB3na}j$yL>Xw?#%%wPsIfM+w{ymx0-4{BWWHogdZo#;Kqw&N_!E!+HNlpw z4v${+ZJC z#f^PC4A$&gGtr2B;i;#Y8>deU(wZH}Xi>P!;MxP86GvC+8RsvH+{)EdSiDYGWcTeW z6V~0FrkGlozgsb7LQ~EWu^UQR#f?+y*0)TyOj`f*ldN@xE7QAoSJO3@99R5O{rz5- z#KCzkL8rM_r%EhUK6>3^!kx%>w|D%o*!VV6<=p;x5e2%>lXsf+-BH)8t9oa7cA>|+ z@~}Fuqh*^+te@Da)Xc6v?X-%esXnuPo5Sx-Q!toUdy-X zf6BM-*PAq+&(&h+=~$RHxty^i=k1l^?>pzGomA&_<3H*swrY*$MwOan0igz~p1=N9 z_UF{{uF1J4cAw6OJtJTDAlg&?$CPbr&Hlf$X-WIEiZ#$HtSsOD`{Jzdi#aFC}@iob1yY%z8$C*q!qAsej%-`&J^?2GTlRKS^ zXScq)x^sO_-kFN#dGimKTNFv&y~`5vn=vPLV_MJSH5~H37tcsoGfUgw3!9a6e?r5L z3ELC344I8Z7d7fh*Uj4AwNZDb(9zjk@6!%;$S^udPBvLD!4v&z>$RU7`#mOeNlcp{xunYIQiJg7=w8r*A}@-E;25nytHy_&3@+iRE3s z%ILoQ_3q^P@xBv-<~VU3{@u0f!iG$PZ~ZswK9;;rv%aXevv`Hoooa2}>?ME8Jg4!y ztt@P^O=|LJ`;huTZN_%Ksqvd<6*9ypvb8o|wQ>ya{keRC+B2gq*|M`{oL=DivG@Hg z)s&-2OB!x7nJhEN;MrQ+`6}U{+iIW6_*hFHC255hrW3Sp?VWjFbH}S4u}1{TU+Jxm zI;meVEpyW!j>q!rW_pF5-*CI)qNm#R#g-AXg}ZK9cTRo$H-r7^P(r)}g|e?qCg`tXxo z8zbA7#}u1yUwG}}g=sv}tP6z{4_0`*nsZ&|3A0mI9dGyD+b@cW7pSCS%~clqdNGfy=9B>Ch>6yJ(J+zwBe%+C6H7|i|LyL|Si`9hCZ zr8RnfQ=i|+aCpy?otHU;t2#X=Gu}?{n;9Nme?9vAJ@#Ne_Y?1o3$9tV@KvPk~&nrS*_8mU}BNq z58<}~a%t-oZiSjAHf{JPlA4?P;(xJ)>4Zl0S(Tw3ryNo~Y}sVH{Zo*~=?$5=Z>MW2 zZxKmq^jmqrAle`!)(K-BND4?oKyYFz)6c^&%X7oy`;?^1en?LvDS&%Q(F zca%JMZ6})ayWDF*X<1h9go)o+=CvC9`pNh5%hgY6-fo8{x5=mr%qcm7_GKOu?{hj| zHrtSXH%Ry7&G?U+o06`)iVm&#Y5Gz0<6FOEw^Uzgu0Q|JeSBV>DZ4*(!NTiRE&h7n zBA3^1KiJCqh^cA5#hs}I&0LDy{`_6*W^r%?c~29G)vDjQE~POyV`Zb3y9nE!m-3w} z*aA0rS&Mz*I97B!tG{Tz71vZI-@@l#+yySHwV!r*&~tsi_P+al2lKdQOg#6JX@+Ki z=JUIE)n6aVI{519N!i_})5_yKHpoWBf9#l~mo!l?=Jc#ZDY-U5-ltaIX#Azp`qHm+ z%NO>}yo#c*^BZr+clzl_Nv(Oi&s>L5ASSwgYj~`AmGFbyOJ+f@*h8$geE4i(YOhqi zSomz%N9N{-%O`NCtxj1hko8?uX7&XiVdmETM?H`ITJ==K@_?eXlWw!We&>Dv{P>>8 zsaqFqi_HA!FymIa!XK~yj?s#H4*i}u+2l{#riza|8x$8v`JGjIYx|<|PC~)8tE^3J z7r2iUx&HrkGXMX%ol7${^(y`B1U|dAmH*Dt=Dd7u+VKsiBiqYLF0@R()7_o!oBQ15 zUG+cpi}f3lrC<7L%)57MO7$$3m?^&Nt|wdHxu@;U`)$j!(BIaZz4#7t^9OH@y&Pe* z>->z5Inx5{f6gw_FLKT7eYC3L^3io6e_1-$9(^+}Y}@e^tx3CDiVeRW@p{L6M(wn) zg=zmjr)z6OB?ABG$Gufm(&XEF%JrZR+ZygSw+k3TuCl!8=Gg3aa+eZ!er<})-Vd*C zuH(EuvH9tpMVn8Rc1+I=s9(qWS*A7e(Zdcq!6RK8mR3x6;m&&7ucgr%-}`GV%axV# zt3?&ve;pTb$V+B9cVhRt$e+~@cL)6|`TDP8&aQ_WN)?v2bo{iFU$!HBUc$nr3s(y= z)mN?BT-;H=zFqH$>7u_6GZ;edS?p#`%BXd-Q4UV{$Hz1&XxX(F^71}xKk6?`xPB>e zA@6a=Ri0_Hyk7@}afwVX5y>~UV1M~OWNy-}(~`;@Qj)2d?FU;Jh;TfpNb{#tdz_B2s(%Rr_>wXR{);}hEM zi`v|sb(xQS`=qnp>I}Z^M{KW)pZRfKsBr!&yVK#NPt()HolY3YESfXzaZr=t)s0!7 zFIczkI20ylrm|ozn?cC@G$ zG;6w>a)AE*x(740GUxUsMA#pmKVc7lL&H)_?cXNTIZp&0pK-!6zZ*E+JNvj#*r`gX|1)+; zF0-%RF>RLMz4bN*brW|@_T9+0p!Tq6t75m@@$Rs&Z)`EEv|0S@Ro|a6JhFE~^Aej~ zzg^z$sVZY#IR6g+wtc@pmI`qTsoLz}=<)`1)^UvRb-)IaUn ze#FCtQ#0@WmY&PoL&Me=Obl}G($83HyD6k@Bb$I*)p^HBopP}kgp20w4QiTf*O6hg zpJ`L;VGoh(OH%(j{mhuwa+%lhq`oKH7yg!j9{E7G>EZ6lY3nwt#NKzy(!3rfGMD+h zQs>^aDL(?_QuR|;M<%l{>f0S%6)k$}qC&Wk>f=_s^A#)N)bb9mI~t>RcNJUpEVlD( zTK8P8pWe9e{Pu7G(N|lpB~Dwq{MEF&gyh&wX*R9=&aIngFbFQMTXIYKPUrJ?f7rV( zmChFPd9XJ38UwF@)voVa%YI$4n0RAh;>-^@ii=OTMoT<>Y=8U;e+Qc^gQDDTx1)AV z_v*h~+w|t)4!PG?ZnU&KIeQ^LGEq6I{I0XMyyntL#oX7n`J3b?F?!!Rz4ywylj@5F zcf_O|o_^@)VxNN!VfXz1My~dot@k|b=VZRxAnub!&L67ZfB)hkxq4&dMOO8zUZzeb z7A5D-WBU5&N!j17t?>;yPv*brzBDnv@={_X=f1B#?MvQ2U*%r&ApfO~Lgdr`-7lAh zrYEOLzA-#G+k0c@s-=hC-#_pwC*f`Io!4@Hd(;)g1AN?G!v$^;q&#;)Xf-e|EKr@6^42L?KPwLUEN~;hL^57u0@s zaP@33i$C9Va_Vb)rNl!A1$BQ2C(frE^AfAQa6WbG1rLEIVj67u54f|ej$C8n&7AVWB|qyyMRHsGwwP<*7RG$I zbMp6Qnbeg$o6J6+ouK|pUovV|%%rc4@Al{ZpL11LrD!sP+%5Lat1o?Gu#W#y{_D+g z7O~t3zZ3a)JZ@+I*Cf-vjo*EO?YteIAKd-A#*gWL!Fz$Cy$ZiIr`_o3cyh;VdWU?l z$K~>`pJEyQ@0~t7_{*-X@6xuNIwh>hvamR z#e&&Cb28;m{7Pb&6ZVt)m7vwJFt&&acNGH_s~F|ehHJOndbagVR_Lt}kX94e z_tSF6zSLyMGF_V z*F{}XE6&yn>Yu*G^iHO8htp9HZ`ELq(hW2D3bjf*UTkl_bEzy-GDEbyCCS8h%bt$o z=UyIMe01#;EhZ}{F^s0tQqJbU>{&EK?FRa`n*yBED^v*dS9{5)T+t&#gq zWQlP5_TsC@{A$l$&<^?=E+IMd7>8MH_Vf#F&;NvoExLVZUzh5so5dnNR|BQ8mgo3n zsm#j@nVvr5w^C%r;>V40xxo<=%b6$UR()nTw=AkCI7Rk~qV^qKUCkp-o0cXYa!}YV zqr@!nlrv6HNN-)Nhx>-V-;M+qCqCNPr9Jy<=CRrTh4@S*H|_43X|}wn_EFX%-4l&R zG8vWgwl3cG`cH-Iu@I5X-cM&S2nmWYNCeq3h-kYqNF*jR@X5wANCc%Zi0j!furl>A zu*$13u<}GR@D)}w@IK*ZkT}H8Ahg7VLDE2zK{8#GLA3cd1CM?h1JBbx43aE&7%^=F7#K2&Ao`ET|lYvQFkb!w-JOgJC69bdYHU`ES77P;S z?HEM4wHZWuCNr>H?O+f~oy)*jUdO=dAHyIltHHp0&W3?m=P3iT#%=}){|E+wFbM`$ zhi(Su_^Avcz1JCp1Qs!{hF@Zk@_fv|mV1kVdAbmTxS<$>xJxeslk6=9@%Byz5u=F= z>}M`Au=Ck5NbF%`kcj7E5Hl)aVA|rxz$`Dyz|_dfAgsy6AoBb?gJ{D?2Il#P8AO&= zFi1Rp#lX~`%D}2|hC#xHg+bgkoIzxv8iPdOe+Jf|cn0Pp9~eZG9x#X~{bG=q@RNag zYcB(9S_Ff5y&MDQ`E~|L>rV{g8np}(3%eOaB)>8+f8EQ#Ja-X;6zfU`;eXx?68Y{7 zqB`doq*4|#Fn!iw;Nz=d5Oc|4kg%3v5Q#j~TAS>7>lpSZ@r z&b5?5jNhF>u;#@wNW|Y^;AuBy5dXr(AkqGxLF8K#1K(8z z2IgW;28sVO8JIPXGjR9MXAob(%E0fXz#!77&LEk)hJktC8wN>*`wYxB-x(N^|1(IO zlVuQ#k7SUzCe0w)qRt>?w1t5s=?H@ue>sDM%@zi(f`1GQA2S#j8#5W0rX67rnI6m_ z>T`!d#PA{mOZF`WF~utkqLTX$lwLOjf2S4$PfsF)_|zK= ze2vo>#8`D07-U))c#l0{kW6W0kj$`U;Fu)MAQ8&Jz}z&Cfu*p7L6X^;L45CD2GRHb z7o+m5 z-h0I$l9$K8|Kb#bh>8k>6l)9vi$*Pjkg^SfsFWvzXv1O#DJM1tk@t@oME(^r@H5#n zuq?`BVES{5f%(*L29Zr`8JN$^W{~KKVPHA6oq@^oGK0{|4-6v4ehlJk1Q`WBAGR}yH^?)vipw+b zzrV)7((#9Z`_X9zR;wcnOuM)lMER;2cuH?DFekG!h}U~DFud1i5S_kM^j!FJj<-HIsp5zBmKxQ9}lyOD7qa9f}x4d`~k-@~>tPVV7oL_!G|{zATYJ zOke?n@KQDgkvnf0SUe6eFm)F*Fm;MBNCeGb5D8&m5IonzAkrnlAXQMyAUw;CL2N}8 zgG7M}gXHZS3=&W38Tel|Fol-uP}%%`Ntq~OqoG2YcYdF$|DBxWxE)J*8O3S{PmlGPnC&*{Z1T% zWp0m<}ChV98j^z-s=4K`Lw#1HUQ<1FNMI1J@P>2Hrc_3@qO@ z8AP@fFo^s*$sqEjiGksa6obgN*$iS+D;OBRF))a)P-I~Klg+@#<;x(HzlVWErJq6K zVLyYg0W$;ZQf~&4N)85rZ#NnEcv=~lXLd0#Z!cirosh~PkvW4w|BBx9l z_=No!#2$+>h-~6u5ZvC(AgbxkAo4YuL2}V21{UQF3=CX)3{0B&3<6GS4C3ag49rJ& zGKj2nX5i!e!XPn8i9uAflY!wkKLgY2zYI*jJs1QIePj?dJaRVSSrH)WDm8duIWI=z(ko-fhJU zQeo>E_=E%*B=+$!Fjw_32v6S2Ao4tqLFDZZ2L8Lz3}TCZFbM5QXJAN_VGuD~${;ek zjDhi<1%s#)4+CGvZwAI?xeOvqHyA|OMH$!~r5M;vzA><#iDnRC-N7K4FVDbnsh5Fg z^<)N?r%xFe>IE4%egrWv-MGoXWHyCCWbS4LfoUZSqCRpAEFn7>c=!?-B)6q7uo^F5 z5VZ+lkPx?FV5s@Zz`UxTLDZX%K{8_=1H1ex28sSO2F7Re7#MdkF^GqhGKl^1V&Duu z%)oO027_?X2L^GoBMjnIObnv@q6~r#9~i`rOE9pC$}&hSy2Zd!&B`Fjdzpc8b|QmB z`dFz`Npz`!%*00VFM zAqMed84Qx)D;OjfvN5pxFJxdk_JV=&|4Ig~e+3MpYzG*GFD+(ZxmU~}qP>toRP+l2 zmv%4%^OKbfB2^*`?9G7;tju-{T-EOxL>A0qkT~>^fkoelfveV+f$QoY2B8~S3`|Aw z3?c>`3}Ql48AMe}8Cb(=7#I@686=-*G6;2eGVp(&&LFbn6@$o+3I>LW>I_Uv7Bh%+ zrZKPv^D{`~pJ5Q+!^FTRWY56t{gHv^#!m(oU10_h!*T|ZdFL3!C%$H2zgfw^H_w5A z$@l>StJ{4BiB=^B3BTD4EXUt6NG$YW5Z@urz_QYjK~nEKgZQqC4B{OX45E)*7$i)q z86-MqGq98`WRM8C!XU~&k3q6kia}zL9D}&wO$Mglv7Cg)wlPOlM$bSjr$e zQ-wivp$!B73l#>IS8o{DUjJrbJ;u%;6?ub!`L8a6NQ4}N#3L>SQPp1z%waqXjC;x% zSW+1oM6!Drm|M3oFmEwnkVsk2AgX+hf#Go%1G~!}2I1~+3}TJU4C3tz8AKWz8QA&Q z7+8Gu7$hcKWMIwO#vn1tflh^OhcWQ;wKIsXe$K$$ zf0cnj)s#V;e<_2QaW@0cDKiE!Ee8gsRZI*b^LQB;P52pD#N!!6%_cI4PF>9)6>iEP z81#UFWpgb9@AcCR{4Na){BPwLc&;pF5Z@BSAn0$*z@2iAL0JDf14HyT1`(BW3~X0^ zFo08w+u{c<}xrp(qWL)Kgb~3dXhm@rHMh*(11bUNd^Ps8ZibT zE*}O-R~ZJ855)|uE|LuVFUlB18bcYR!h{(_Rn!-&15-f<1J{-{3|!ea7V+T6_`a@v|fsO3I`SgH$yi1GvmPRk?)<`;Fd|Aj$(_eut? z4SEbbjRzQ*tGgMP_}?)|MDAx0S@4xXgT(F?46K?>43hVbGca5DF)#{0U=Vo_#lS4C z#vpQdJ%h;aV+;}#H5eo!b~6Y}R$-7V+{qwnaD{PpE$Xo^{!B7T?xHJaIU+fIb z=S>(`f+83s%;qw%O?|^4WzxtXqO8gwoZ!sBI&(3D=!0$szRf)h0-atAOkX$|7@`j` zaGO445V5vn;FP<`AlA2^fz4nSgH-5e2I0T&7{m&fFi7$lFi1W%VqgxdW)M;2Wng-` zoIxTumO<3+ErZCn2nGqO&kUl%s~MO&&oHnEA7Ws2I?W)JS;ipZ&%?lC62>4F`G`Rx zavB43bR&akx&{MlxG{r>%>f3^!`m6e7aV0^4v%9H<PEwYMRC% zaz}!JDR(vl@A4ZA68BsfM2;3P@byh%5MBI$LCWkdgXkk=23Ei23{t`j3~Zr&3@m%& z8Mr=pFz_DdVPH6Nhk;RKF$3orAqJ+ry$s@e{xOJjZDf!V@n(?Rag{-m;VOgZbYlkI z<0lz}WrG+b4t!u>y}N~hQ80i(@7lw_yyFuCjqnB${V3NbKFgAo=481M_NA z2A03G7(@jv8JLw1Gl*(`XAt`%!NA;Q&LDYbE(8C(uM9%HnhZk91q@;<6dA-Bs~FfM zt~0PddBDJ6yO%*Eq?3Wo+J}K5-sx>MCO<=NNDLZu&iNcV2$cv;N0;iFL}hsyM3=s2VA|ixz_PxcK|(g1f%)Ye2Bt@C419d6 z7(|MeGf3=Tz#y*wo`GfdH3n9(JO+t_HVmxQJq(hQj2PHFPcev1b75dg`@JbKJ-L(wDvlajP zM2u@0L=V_9@JK&qVBUFzL2Q}?15>sJ1BVzN154>k2JyWM7(^ls7?>jtGllh@WjxsPUy2-#Q^_+nvenI;S( zU0)cufA%tn)?a22ELg!Hs#M3on`y=%T-eSak$#0iWZg3ciQwl9jLLTzL|+Coh)jOP zz%28aLFkVg1Jm8B46Ma%46KTV3=E|V3`}!RFo>M~%D}QDk%2cSnSu9w5raf{IfLjw zM+S)_Z468w4loFs#WV13UCY4ga)d#o-HSo;gD(T$!x;>$jsXnfu9^%iZq5v>Cw4MO zWJNKsBsVfJ-CV#RkXy#Ud)}2n8Nw zd>BO3Eg3{+++yJUTF$_1b&P>g-kgEqe-#7E_IV7V>`n}lisB6X6V5ZRD=uLWnVQ1D zoBNYN!s;-CxZYg`(FZ#igcBPWM0Z*;Fi$9D5Sg`rf#EL`gQz+)gIEJ6gXI4W3=$1r z7(_OiGVpmnXAmipU|_ZFU=X=x&cK>;hC%pWJ%jl2*$fg#@)$&$av2y}y%|_`A7fzJ zXwD$!`h})av%e-O+*3k0|Osn27h#1N+usmAGAYvNCAfkSVLDZ|AK_WGlL43aq z0}G=egGl3g2J!j}46Gaz8Kfc>F^E(-F^I))WRScthk=2ChkNEFo+%y zU=Uwd&A>U~1A{1c2ZL}0Hv>am3x9jtrtrM;JsRt};l3u47=+d%_?( z?Hz-tGb01bSwRLyHGc-FwABm}3qCS1S+g;S9TR5|R({REd`gaiStyi&Y2hOVkr(<5 zqDnUyB=Zv)B>5*XNUHEK2%ofN;C?30Agr;Jfk%H8gOJL92A(J749w47GH?azFo^2U zU=TUAkAbDFhk-evhk=>DfPp3TJ_D~+2Lpo!4}*}?V+NLRKL&>S0}TAH%NeA^7#R4R z+8Fp(oMaH6w4Q;XBaA_^(UgJN&Wl0l#w!NyZ#Nm3&-O7e#dR?-sT^ToHRWfJu-wTY zdE1Xc;#vR$!n4^v}i1F-WVBuF`5V3S)kg&PSzthh#Qq3T7 zxq?CBMJ>*W|k-n?TF%Z_Fc*{;eU^3sGsWZiBC zrYklKEMK`8#GN-Xu>8?ukaR6%U_3aVL2}U{29ewR3_=%!7?@vwV326t!ocF_${@ZY zmqA2jK7+_qGX{yn*BMx3S{OuLB{E3rIWn+J-on7Bb&x?+_%;KxNe2UqGY5mHmlK18 z%tvkZKnD;XqHe=tZalwptvHDq8} z_J~1z$7u#;`%nhST z24;bN27!+S3>>EB3{2a%Fi0eYGcfQ8EM1crm?vv7Fr7(Z5ZhwT!04UAz`Wd=L8L^7fvZ!ALAckAL1cpt z1LNXn3@joE3=Ff*F|gMAFo@eOWso>Yt&M@D_9uf#_ihFei#i78k`)YM4}UYT7&$SBr*3Bul|9P9Zn=bkNjiW*bopim zp1-FV1ShC6NVIY?aBP~-ATsGB1B;U|1JmI(3}V@v86?wQGDsYq!XRg;bp-?CVk-ug_cjdTdV&nX>T?-H)Tc7AENo^F{%^}5cHj>Kle+?g z$f+&{2_1O`v1P#wQU!qwyl3V!u*=_N;7$C%AeAzaK_F}y1CM+J1FM@h18>G32FV>u z8HC;)WMDnHm_d}YpFyOpj6wW^CIhqi1O|~8(F~lI-ZO~5%ViL?Q($1+X2-x>_KSf< z`W}O*?q>$^_f`xdm#i6hmz6Mxa_TU!_f2D9zWJF!)UJU+l2w|4_19bmt|_?;;`&n< znB_DW7?Wce#HL-A zGDzO$XJFaQ%)r#A#=to%mw}~vKLgAE-3w?*ju9_iqMa?rjW$O)D8#IOj7+giT}+%Wh|o%xhr~om<5qk$Id!K3?j1)7(@l{Gl(vEz`zug z$snqAhC!k&ghA}sR|b*xWen`bRSY7ZDj1lyeP!UcEN2k3{?5R+axw#p?|TN3llcrR zhZ`6~`Oh#&vWqfscOPe9(voIi)vI7&6?nrSTE2;a?fXjxmS9E(mK6~U5*_Lc%zD!q z_?i0|gsT5AFkP2sU{zIS;GKMmfy4bagQ%1ggQ(YL28Qk#3}QUV48lAN3@rTD8FtpM=^-_<}!$+IWkDT zH)mi?2w)K7d(XhM)ro=kt2=|p;yVly8F~z2cT^Z8??y7PoN;E5XnV;Z;^W64zGpoH z^PzbR5|@`Th##HEzODTNyaM^)iSw%w}LYbd7;ku82Xj&4q#aPA7wi=@AB&#(NAR^Di+l_$_4+ zV`X4qSsKB>Q(D6yx|p3o!rzL4YvDr%mZD+?@r`l}EZ06Uh+RI&AS}C|L88N-fm!|( z1Itqv29`h$22O(;37({iQ8HDvtGl;BrW)Pp+z`&d&$siH;kU?~63Ip>) z8wM8j%M8qc5)7=NN(>xKXBfnHOkrRS*~}pFje$WbT#!NdQY!<~Qzi!CWn2sl>em^V z4EhWnzS_>fY@os*V)Bha z=y?DG%P$@V<~=D4!V8x&i1%1Bh&=zpApU+0gIL`W2C>w924<%x3{s(o8AP61Gw}RU zU|^M=%pls>$H10n${@Kzm_az>4Fl8n5C#cbK?aHDLk#@SCo?d66{-v(CuA9fl{YX*P`F$nh=Fo=J?!@z3R$iU1i$H44q%OJk# zG=unp5(W{!W(KyG+zecm-x-82A7c=;Pi5fg`oq9lww!@++iM09Vj^cw^BwCfC_OH3I! z?y50}ggP*YF7Rexh?Hdz%1LEl>N(FK^1y&Wq}q)^jQ=Zxgq9lvTWt~pgIEBAaNait z5x)=yk!KYQ;=8Xih}uqKU_XDIfz{?YgQV^=2JYvg43gFh8CdMkFo<`^Ffg{wVvzjN z&cM6;5QF&YeGJSCjxtEzvtbZ5>|>B<(_vu#@`XXvNuPm1wvd5Asg*%gK!rg_?kj`9 zc1{KnQ)LE*jf)sWS$h~HG>n>j;DRzF7>C_Zt{kW`1U1aZP0qmCa%h>=R@V6MVoR!dAe* zbY&8QDF1f`iKHJ4Vt1}H@V|9uU}jciV3Pa9!1Y&m)Q(VY6lsZwLdY4{LWIdXjXI;06ZvQ{fDv%6}R7xTP5+7P&Dnq~$P(yme(@`~QtW@^dkRU~V3Rh_5|^MAtzE zfjm|Q@s5iOOeLBOymMzTFbVWAi0nMVz}=$9z{6$8Ah7r_gH)O-0}GcOgFyHb2KGA> z7)0KbF^GINXJBwJVqpBw#vrPr#2{kuorJ`5sHr!a{9abXZo zn8zS4>czlWf0;p~Q;9($Zvz8kK>`D_mn{R!+D!~BZvq*3dlMNLn5q~=ZXaThn3TvM zabK5#?I9Bbb6hlo$T?RAku_HtB)30iV41L!flsuAfysuELHJ88gFqE4gG53c1IslB z2GL1N8AQGE7=)b57$mo9Fi2$gGD!0EFfhOKWe}Q`&mehUje+U45CbdYO$JduZw67G zBnDBF4Gatog$$fRZVU`fzZt~&s~AL;Rxnwv%jVJ>< zR}X_kg%$(Tdj$rOIg=Q~7Zosw3H)YYxLnF0zVK}V`rrwJ#937ao`r@CqE7o5c+ZP7aEqK_5O?8XU_9;1Ao3)YfoHWQ15@gM z2A0J_42(yU7$jQnFo;-BXApTS!NA-xm4V}xEQ9D269%bPJqA`SQwFBx(-`8vXQbFVuC zi_2mL=6SmqBwOAwFfTg6z$3uUz;GdufgLn9n!v-r;QgOLN_aX0tI|0JiH;`>lF5w> zg1g=@2q|x85LSw3kP35W5NZ0uAei=*fpLm0gG6^2gShh@2BDpL45H2F8H8?ZVGwt2 zW?)QbWstB*Vi4A^V~_}6#2}F~pFyG`m_f+$CGAmluYLGs8^2JsDE46L5)3?je2Fi3uoXApbI z&A{em#~>hz$<|i^L}ek(HthjBj-r zSotFv7*mfh@UvJjFez+g5V6|IAhKgQgUIgh4C0%Fi14kF^D`DXW%`z zh=G~+A%i6IJO-9ykqn|QXEKN$n8Cofyo*76gA9X6=|u*{wV@2mIU5*Qm^U*>?kHj4 zp3BC-dx?obw9%V^ancJ0R*RVoqUn4LESDM>c>UTKL>H7Xh-~}Lz*|DqgP83+2F91F3?fmA3_@J_3@ogb3}PmZ4C1PH7$if47{unrFo?Z-#K0P<$sn0` zltJ9Mhe71GDT9Pr34_pqi3}n+OBlr6BpKLUelmz^EMSldGh$%wdcq(&buxqa@|z6I z-n1t zjDe-aj6v+tW(M{^1|#VqON8{yPjJCnXs~n-v(C zUc6%vSO3N!(Z#|bxzL}1vCNQxvA2^!Jk6d#GN7A*m6xAEBJu?TBg#Di%JEY`&g zVqfbRSgK?gBxhwYNGe}pV0(UrL84(A1GA9@gJ{${29ewE7(`gMF-R;-W)Ph`k3r(u zQw9dtJ_d=)e;7CxUSwd%v1Slmu$Y0lW+8+42L=XV**XS^u9*yi3Y!@uf(|l>>mOtg z-(|-j%C(3=q-QyUC}{nS=PCx4{YM!@P9I}n)i-7k^?uF3ByPzdq<)w|QhwB;%T%Zb?x+^NhAqHL2Hc(Z>phfJ+RLeDMsdN*oLVIv*Lt+P5?Cz0_fl2x(zpO!&YcI)4iT z@5{Xm%-53`BvtJgglFzxV3G=EV0PcaAa0VyAa1AoSB27yg0 z85lP4GDt3wXJB4@kbxoj7z2BY7lTAN4}+k?Q3j3)>=W9cExS9>XAJ zBFw-v@jrw3_IC{I>BS6^A-xP@j~y9AtPe4WPS$4-@fBncxwnWxq`sCxEg2Bwd>3`|U73>+f- z42;%Y3@q(O86l#B5!swFe}C~u%_=~kbFOffyro11`*>63_R1~7+9MoGl-IiVPBY)(jFBh75vw zlNdz4oM8~3c!h!Qk|TrI;$;k?Z2k-)r(QFNPcmT;b&6$RIb^`Vd?T2FMd=>{Ybp-| z|F_Q!lBuc;!aa2ik}1C!n9P4LFz*&;U}e{0kO)m+U||<#V4A#>LGY^qgNW%b28r;; z45AV~46Iou49qvaGl}C+@PG%6Vd&$86{40a#vWXfi-z6 zgXF@c43Zaw85px3GKj3qV-OYH%pkr;lY#%E z2IkB>2JTz$86*zOXApaw%OJMy7Xusfat85)Vg`}UNemKa`50JVPGb;e6lM^LvSN^& zn9LyF;laSn<;Ea7!Ja|1rH4U8yNE%;Vn2iU(bo(t+z%KeA15=2tk}W8-0+w|%;q`+ z)9%>}691ntFqnO35R2TwAdxhMfu(K(1NY*;4B`ea7$meeGH~DFVh{_8WMH{|lRM>qpd=`IFF8+!((Sy~L@QV$te z3l2_0eJec8((p{vNilCH-fxqS`;%T9j=_LwjRk*6{Y66=E)M3?w7h?1;86@_XGe|^-FtEI9W{`3cXW*W-jX`p21Ow|IT?Q7hS_YPO zH3pWvLkuDsrx`>WpEC#+STTsbxXHj={*Hm^^hpMu$>$hEqpmWD$=WbT9BN|_IX!_v zl3^ADgP|IO2!|>IQ^afrp-v+PiG%wXq|E#o#BP6K5c#6QAgS`6fmJ7hK}=nnfo01@ z24;}}29am47$lxBFo-L-FfdtsWZ*q>hCw3vA%n!_iwq*>UJT+>S2KuC;bdU7?qU#m zzmtKv{R0Dws4D}*ESYj{bA^H9q%MQVqEH6b!~Yo= z9ttxsDQ#w8=Fwmfv3krPa;}&`%;+bBsAL8MgN+k|$QM5bMz5U=%(1f=B<=(-u&iZZ zU;xb_@AhKgI^4@3dQgIanS+&qx&9FYORXh?c;Iygi3!UYSd%#zScL8~2t2;QAekG& zz+$|Vf&XqZgV)K4&oPB_mXY%IaR zHRAyTgH|_#*wq;flIM#UMCW-ih}>V#AUZ>sfj#IN1IM9D3?hrJFi2ck#=x^ri$PRV zib33`mO*4H2Lt!xw+sUPTnvo+s~K1&7Bh(2tYr`sm0}QCz`!7?AHu-LcY{If!2B(fL6YBuLBw|s zgV6iM3?iRbF^B|TW#CL($-r#-ok2KYFN5$uF$R&%K@1X>FBn*aTp0M{(iwz$9x{lO ziZMtQ_A-b>R537KcVl4LkiZ~v_yL2+>x&GcYPt-flP)lb^d>T}YQ16*bKc7!a_JO%fKl8ltGl^AA>}c9s|oiKL*ihsSJEk84PU4QW->L9x;eZ^DwYPtYMHyWnf@r zcVu8`_F@p7YRMp0Va*`+!jFMj+LJ*d?LC8dPYnZeXgmXB+zkeS4KWOo?5+&#S$+%* zy7CMRY*Gx2C&L*SB10H>uiau0nbgFSD5C*Z| zbqvhY*E5K` zAd#xcz-hLML1KLsgD7_>1MfK*2JxMD7{uGpGl(06Fo?WyW8j%=#voY|$RKi7l0hUp zhJm%IoIzsmTLzxe6b7cyNerw_-V97fZ5f!gBN)WfeHfVe4l#(BPG=A)*~!3{_K-nT z^&Eqgxf+8=w+{pVs{jUx$4m@j$4)XZwN){QbE-3l%vWL%-+P6D$GL-ng@c1ZQjnQ} zHFhe4q~2TxiNHDrCOuCEag&b>B9neHNG^_L5MTC)LF9uF1CQZd2CmK98JG@~Fo+j~ zGD!U2$RLrpi-9#~0Rw}Z9fN3-BZEX97lX(peg>v!O$M%$(hMy3Wf&wtYYaB;WDrWw zVUXz5U=Zc{&%o%gj6sC`H-o5QB7>NnID?paBZIJU00Z-3R|Wc*Jb}|UZ#WJvZ#4$*I+rq%KK#75QvonM6zcmajYN`y38l4QB3tuxZ zsOB&*am-+lbj)R7l9grzXZtMABXc=GhVq5=ZnH*u!fWL{3a#kccp4 zkci*RAj+1(AgX_ufvJp@L7d;2L7e|GgXm5^2CmIl8N}wSU|_U&U|{+4gh6z^4g=RG zbp{?#pLQxA1H-`u3?e6;8CYtn8AKgVGe}JEVUWC+$H1)qjDfXyK7*vt3`J~Jsbm=~W#O?zOk}SClBA~XW1-yQ}QyXy>W z-@Y-hto+CzV4BasvZ;rG#i5o#r1PVPKAVz`(Jf zok7xd9s{$R0)rH5H3PG&BZH9AZ3e+79Sq#dQyGMuRxo*Q zm{*iAh`eH9kbIiNAU=VeL8$EtgLpwRgV?Ta2G*2h2Fbh+3@rO186+olF|ha)Ffe`c zV32&z$sn0=mVxVtCq! z7&u&<7&vEzFi6DNGKlitV-N{m!NB}!3j-h52L{%Kd<>#oWeg%O7cwyaQehAbI?2GN z8o|Jv<;@_fwv&Nj-A4wAD}@Xqq1g*X+rn#nOp^ju>Q%9+6+lIO_4 zusxeWLTdp7%jtRs=Cnr)qTW{+B-&UQ7_Z!6;P`!yLFgS1gV>)_44kK@F)%u_GKl-E zV&IW{%pjRJi$TJAGK0vkO$;L2PBI7wXfZHm6f!XETE-xF?l}XKYas*E4JiiU7&Zpx z?*a@WAKx=b)z4#Kp8bnKWZn-3=F_hjBo+M`L}$!m5N*|GVBI%~L88}$f#qU9gQ)B@ z20o2`28p9N3@o=NFo^hVU=Ych%^)h2#2_xx%fPt#EQ3JfDh4JWb_NNZPYe?6*BL}M z`7ns`DKJR1HZX{{8Zj^)`p&?dUdg}`##&QNphZ78p z4ccq*EKhew-1a-und_+AADhBfsJ65*x{Vk?$0 zaQr^Oz$#M4AiiK0gQ(Xd29^jG2H}FW3?k2b8AR*;Fo;-eVG#MSih)Uf8w0a|5`(1b z5(cJsHVh))bQsuPcQ8m?UBn=mRf8o(gZ6T%=Spvb^HXFr3;QEdjMpYs`* z`#v&AXyr4As!B3QOe$xPNa11-_+>ZBiJTJ*5>m1Z5>}ZE%%=Vf40$gZ zL|!v8Ff*AmFzY)ru&lbvAeHi-LF9HY1E14&298!n2A0Qv8TeO9Fo-PL!yv|E$spXb zhJm5$ECb8SE(WH5ehf^k84RMTiy1_I%Q1-D|G*%bx1NEW?L7m_w{iwXp4kj6hO-&O zuBJ1vygkk!8hw?4)z^W6H8+4k;;0FOWQZ<) z5bGCZV2!-bAb7@!foX#XgUILa45EU33}TVp3=)r*G4T4`Vqln5%D|Kw%pklhlR={I zB7=xcDg(FmBL;~Vs~9-Ae=%?cJYtZzs>~pEmXkrEcM1dJtyc^Tb3ZVM9Dl*UY8S*H z@jRA6gzY+)r#6L@JXQByZhk;L)~W zU`Ur@;NZ1okjS6Iz*0Vef!XLegUF8+3@j;045Ipt45E%D49s~!3>>SsF^HHnF)-WL zF^Ie^WRRFp#US~uje#|B0|WCWKL)W!kqja$Uol98wlYX2-)CSBKF=Uxp~N7W?#dt$ zX2rmwYQrG1<0=D}PCo<7wg3i}nLG@P`xY=r1TJR~oo2?ss(X}yIYOL4^1?X=k?)=i zB0rfKnE!ub5K*pTkc!S?kjVVNzy90PMml(K?9AOZjB+eirS;)Zf{Q?6!+YJWs zJ&g<^*-Q*9ljbsrHhp3c*$~da;#JPTsrZ$F>2g1VL~a{{P}>0p?pxsuk}PW&Sn8)R zFxka0Fa@VDu$XOPkT}f6z%=_QgUJ2E4C2Py8JNTM7{q?bGYEa`WZ?C&W)OLCn?Yb> zKLgXnpA4e&mNBpzJ!24gSBb=(otL085rWq85oYp zGjMmLF-Qb6GDtj;VPM|-lR;>kHG@dQPX^J6dJLkHZyCg0{xOJ7y}=-|>MDc8mA4EM zIo}z?gg!Bdcl=_I_k1yEOYlWNVGg;;K&zbkmzM)kkIjB5Y;Ya5H(9@ z5dG-Nz$%%_AjPWBz;x;r1IyM92FA}-43f-O7??MdF)%f-F)-ChGccOqnMf%j}E1FO$O2H|BE45BlRGDu8NVUQHK#vogZn4DiTh#3B3;O(2wz~ph0L3DlxgGAm<21)i=43hW0 zGl=yWGYD5YFi1K|GKlJbVqkgD&%pA#l0h_@k3n?d8U{wWGzJ0Q#|$D%XE2C1&0t`< zmchVm{f~hu=_3QD=v4-;87CQ7?U@+F`d%}z?AgvBvec77%EE_%d%Zq`L`XD)NY7ga zj-n(6$wn3i(P^9v;v3x=`1q3;L}%DCFnaE zh*Xy_FmC2$U^!aMz*4ErAZp6Vz_j=w1LvVv3_RT%7+5!dVqlqbhJn?Ioq_F*0E5Vs z2@E`KQyEx&zcVnEKVsm2Tf!hFaE3wTX&Qs*+@%Z>XTLItthQhfS#X+xJ=vClp-P8A z?3fFKSUMLo@b>F7NU9bxh@=%TFiRe05S`f1!15)CL1fw)1`+d*4B~-5 z7+7w-WRNnIXJESM&cJ9X#vqYk${=DA#=zixihyX83Yw?Gl+zLWDr@_&%l|?&cMvMjDdMaD1*omT?UEdH4Kc8Uo(h*2xpL7 zGLL~Ftb~F4=PCwKjdKi4{oI~07N=6*G0Q~-iyQ0ri~3BAn=6|9`C0cBvyioW4{^`? Maq;Lf3Hby`02gmkNB{r; literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_pack/pack-495c38ca65ee031e5a5317332f8f154c915e9d15.pack.REMOVED.git-id b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_pack/pack-495c38ca65ee031e5a5317332f8f154c915e9d15.pack.REMOVED.git-id new file mode 100644 index 00000000..4b879e62 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_objects/exact_pack/pack-495c38ca65ee031e5a5317332f8f154c915e9d15.pack.REMOVED.git-id @@ -0,0 +1 @@ +fdd42ec06e83641da2f4b0c64d47d10bc63f70c3 \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_heads/master new file mode 100644 index 00000000..18399059 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_heads/master @@ -0,0 +1 @@ +244cbfc832930ce0a10c2e7930a30ea985a5e26d diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD new file mode 100644 index 00000000..6efe28ff --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD @@ -0,0 +1 @@ +ref: refs/remotes/origin/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_remotes/exact_origin/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_remotes/exact_origin/master new file mode 100644 index 00000000..18399059 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_remotes/exact_origin/master @@ -0,0 +1 @@ +244cbfc832930ce0a10c2e7930a30ea985a5e26d diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_tags/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/exact_refs/exact_tags/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/index b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/index new file mode 100644 index 0000000000000000000000000000000000000000..01b0573e96f010d736d43f7e5fed54638a36ee71 GIT binary patch literal 11729 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/packed-refs b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/packed-refs new file mode 100644 index 00000000..b4de4b55 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_git/packed-refs @@ -0,0 +1,39 @@ +# pack-refs with: peeled fully-peeled sorted +2e009c7ab8e9c7496ed86473ede0917a3cefee01 refs/remotes/origin/master +1f8a0c9d92efb2da0c476e395d5ed5050f06399b refs/tags/0.1.0 +662229f6f0ce391ef7c1a41c398e28a31e847182 refs/tags/0.10.0 +c75296de9cafeb360066065acbf2935964d70431 refs/tags/0.11.0 +5e3151d03a91954102e8a4d661d65f9604aabbfa refs/tags/0.12.0 +0e525e909316fb8e0f2a7bbb05d7bfc6fddbcfd1 refs/tags/0.13.0 +173ae7249a6ab4a5b70bebb283f3f156eb79f908 refs/tags/0.14.0 +6953a4f892df1095e48d43751ccaf9e3ece02190 refs/tags/0.15.0 +3a2bb8781d32d05d1bf05deeeb476beb651e8272 refs/tags/0.16.0 +2082c7573fc1cd393ea0b2948aff6f0bdf3798cd refs/tags/0.17.0 +17743e1e174830693026d3adbba265922440f48c refs/tags/0.18.0 +4195d4f6ee8f68f231766fa33285d8cfce9c1164 refs/tags/0.19.0 +649c6cea337b71bd85f7b7a223bc21f810239775 refs/tags/0.2.0 +9e443566686ee574b9d66e445d73fd74c3e88c5d refs/tags/0.2.1 +0713143ec8ffc55da4c9f81e475cd5e21f2771f4 refs/tags/0.20.0 +2d1f793d9473d1b572fe43136422a3dcc9851765 refs/tags/0.21.0 +7a24a5e561a086c430ed4774cc194b3c91b3b31c refs/tags/0.22.0 +72af5d08f1c07507d74103af039e98a2791fccb5 refs/tags/0.23.0 +fa1c72058439015e74b914325f43cfca94866f1f refs/tags/0.24.0 +89dcaeb5624eeceabf41cfc00e79cce35cfd722b refs/tags/0.25.0 +2a30b05a5cf724a2d1c4c140c302dbf93f6aa6f6 refs/tags/0.26.0 +7ec52769d3a0dd505d33d857511866d2b90d0eec refs/tags/0.27.0 +955645c22b29434caefadcb7d541d570d40ae932 refs/tags/0.28.0 +8ec8c8c5c662c3cb77231b7458ce1975d2f8c967 refs/tags/0.29.0 +acf27d00448ef62ae6901b59afc5718c829c337e refs/tags/0.3.0 +^62436acb8acbc3db4993142e84b4e851ab744213 +cf565254e26bb7ce03f51889e9a29953b955b1fb refs/tags/0.30.0 +a3fab81aeca8a566d4447ff50f33ec0b6973775b refs/tags/0.31.0 +ed4ff5384b03aa775a57d4c9588c88850026b0b3 refs/tags/0.32.0 +b5d080b9eefa456c7cd1ab1d61f4350fe1b23cd0 refs/tags/0.4.0 +f6108b8c4250565611a08b164cfdc85e6c76ee88 refs/tags/0.5.0 +3497b4841cb961e7db04e2a3bfe69b2dbec66427 refs/tags/0.5.1 +d54358a43ccec2323d012192aa213a189d877156 refs/tags/0.5.2 +f09394f71c27c76788785d851ab093ded1593705 refs/tags/0.6.0 +b0e171924ee20e38e2ecc2dc0f3ec7edf700f2c9 refs/tags/0.6.1 +9cca892132219e89299750d501d4693a98f5f5ee refs/tags/0.7.0 +13715a7e50f67458b2eb2d9b4125810c3102ad94 refs/tags/0.8.0 +53dd086f56f4d947be3a4b97c57f6c1f8a61900d refs/tags/0.9.0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_github/ISSUE_TEMPLATE.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_github/ISSUE_TEMPLATE.md @@ -0,0 +1 @@ + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_github/PULL_REQUEST_TEMPLATE.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..085d8ea9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_dot_github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,10 @@ + + + + +- [ ] This compdef is not already available in zsh. +- [ ] This compdef is not already available in their original project. +- [ ] I am the original author, or I have authorization to submit this work. +- [ ] This is a finished work. +- [ ] It has a header containing authors, status and origin of the script. +- [ ] It has a license header or I accept that it will be licensed under the terms of the Zsh license. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_afew b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_afew new file mode 100644 index 00000000..c93dde7a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_afew @@ -0,0 +1,66 @@ +#compdef afew +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for afew an initial tagging script for notmuch mail. (https://github.com/teythoon/afew) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + +_arguments \ + '(- 1 *)-h[display usage information]' \ + "(-c --classify -l --learn= -t --tag -u --update -U --update-reference -m --move-mails)"{-w,--watch}"[continuously monitor the mailbox for new messages matching the given query]" \ + "(-c --classify -l --learn= -u --update -U --update-reference -m --move-mails -w --watch)"{-t,--tag}"[run the tag filters]" \ + "(-c --classify -t --tag -u --update -U --update-reference -m --move-mails -w --watch)"{-l,--learn=}"[train category with the messages matching query]" \ + "(-c --classify -l --learn= -t --tag -U --update-reference -m --move-mails -w --watch)"{-u,--update}"[update the categories (requires no query)]" \ + "(-c --classify -l --learn= -t --tag -u --update -m --move-mails -w --watch)"{-U,--update-reference}"[update the reference category (takes quite some time) (requires no query)]" \ + "(-l --learn= -t --tag -u --update -U --update-reference -m --move-mails -w --watch)"{-c,--classify}"[classify each message matching the iven query]" \ + "(-c --classify -l --learn= -t --tag -u --update -U --update-reference -w --watch)"{-m,--move-mails}"[move mail files between maildir folders]" \ + "(-n --all)"{-a,--all}"[operate on all email]" \ + "(-a --new)"{-n,--new}"[operate on all new email]" \ + {-C,--notmuch-config=}"[specify path to notmuch configuration file]:files:_files" \ + {-e,--enable-filters=}"[specify filter classes to use]:filter" \ + {-d,--dry-run}"[don't change the DB]" \ + {-R,--reference-set-size=}"[specify size of the reference set]:size [1000]" \ + {-T,--reference-set-timeframe-days=}"[don't use emails older than specified age]:age (days) [30]" \ + {--verbose,-v}"[be more verbose]" \ + '*: :_guard "^-*" query' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_android b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_android new file mode 100644 index 00000000..c26e2f8a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_android @@ -0,0 +1,308 @@ +#compdef android +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for the android command (Revision 12) +# (http://developer.android.com/guide/developing/tools/android.html). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_android() { + typeset -A opt_args + local context state line curcontext="$curcontext" + + local ret=1 + + _arguments -C -A "-*" \ + '(- : *)'{-h,--help}'[get help on a specific command]:command:_android_cmds' \ + '(-s --silent -v --verbose)'{-v,--verbose}'[verbose mode: errors, warnings and informational messages are printed]' \ + '(-v --verbose -s --silent)'{-s,--silent}'[silent mode: only errors are printed out]' \ + '1: :_android_cmds' \ + '*::arg:->args' \ + && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:android-cmd-$words[1]:" + case $words[1] in + (list) + _arguments -C \ + '1: :_android_list_entities' \ + '*::list-arg:->list-args' \ + && ret=0 + case "$state" in + (list-args) + case $words[1] in + (avd|target) + _arguments \ + '(-0 --null)'{-0,--null}'[terminate lines with \0 instead of \n (e.g. for xargs -0)]' \ + '(-c --compact)'{-c,--compact}'[compact output (suitable for scripts)]' \ + && ret=0 + ;; + (sdk) + _arguments \ + '(-o --obsolete)'{-o,--obsolete}'[install obsolete packages]' \ + '--proxy-host[HTTP/HTTPS proxy host (overrides settings if defined)]:proxy host:_hosts' \ + '--proxy-port[HTTP/HTTPS proxy port (overrides settings if defined)]:proxy port number' \ + '(-s --no-https)'{-s,--no-https}'[use HTTP instead of HTTPS (the default) for downloads]' \ + '(-u --no-ui)'{-u,--no-ui}'[display list result on console (no GUI)]' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (create) + _arguments -C \ + '1: :_android_create_entities' \ + '*::create-arg:->create-args' \ + && ret=0 + case "$state" in + (create-args) + case $words[1] in + (avd) + _arguments \ + '(-c --sdcard)'{-c,--sdcard}'[path to a shared SD card image, or size of a new sdcard for the new AVD]:SD card image or size:_files -g "*.img"' \ + '(-n --name)'{-n,--name}'[name of the new AVD]:name' \ + '(-a --snapshot)'{-a,--snapshot}'[place a snapshots file in the AVD, to enable persistence]' \ + '(-p --path)'{-p,--path}'[directory where the new AVD will be created]: :_files -/' \ + '(-f --force)'{-f,--force}'[forces creation (overwrites an existing AVD)]' \ + '(-s --skin)'{-s,--skin}'[skin for the new AVD]:skin' \ + '(-t --target)'{-t,--target}'[target ID of the new AVD]: :_android_targets' \ + && ret=0 + ;; + (project) + _arguments \ + '(-n --name)'{-n,--name}'[project name]:project name' \ + '(-p --path)'{-p,--path}'[the new project'\''s directory]: :_files -/' \ + '(-k --package)'{-k,--package}'[Android package name for the application]:package name' \ + '(-a --activity)'{-a,--activity}'[name of the default Activity that is created]:activity name' \ + '(-t --target)'{-t,--target}'[target ID of the new project]: :_android_targets' \ + && ret=0 + ;; + (test-project) + _arguments \ + '(-n --name)'{-n,--name}'[project name]:project name' \ + '(-p --path)'{-p,--path}'[the new project'\''s directory]: :_files -/' \ + '(-m --main)'{-m,--main}'[path to directory of the app under test, relative to the test project directory]:path' \ + && ret=0 + ;; + (lib-project) + _arguments \ + '(-n --name)'{-n,--name}'[project name]:project name' \ + '(-p --path)'{-p,--path}'[the new project'\''s directory]: :_files -/' \ + '(-k --package)'{-k,--package}'[Android package name for the application]:package name' \ + '(-t --target)'{-t,--target}'[target ID of the new project]: :_android_targets' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (update) + _arguments -C \ + '1: :_android_update_entities' \ + '*::update-arg:->update-args' \ + && ret=0 + case "$state" in + (update-args) + case $words[1] in + (avd) + _arguments \ + '(-n --name)'{-n,--name}'[name of the AVD to update]: :_android_avd_names' \ + && ret=0 + ;; + (project) + _arguments \ + '(-l --library)'{-l,--library}'[directory of an Android library to add, relative to this project'\''s directory]: :_files -/' \ + '(-p --path)'{-p,--path}'[the project'\''s directory]: :_files -/' \ + '(-n --name)'{-n,--name}'[project name]:name' \ + '(-t --target)'{-t,--target}'[target ID to set for the project]: :_android_targets' \ + '(-s --subprojects)'{-s,--subprojects}'[also updates any projects in sub-folders, such as test projects]' \ + && ret=0 + ;; + (test-project) + _arguments \ + '(-p --path)'{-p,--path}'[the project'\''s directory]: :_files -/' \ + '(-m --main)'{-m,--main}'[directory of the app under test, relative to the test project directory]:path' \ + && ret=0 + ;; + (lib-project) + _arguments \ + '(-p --path)'{-p,--path}'[the project'\''s directory]: :_files -/' \ + '(-t --target)'{-t,--target}'[target ID to set for the project]: :_android_targets' \ + && ret=0 + ;; + (sdk) + _arguments \ + '(-o --obsolete)'{-o,--obsolete}'[install obsolete packages]' \ + '--proxy-host[HTTP/HTTPS proxy host (overrides settings if defined)]:proxy host:_hosts' \ + '--proxy-port[HTTP/HTTPS proxy port (overrides settings if defined)]:proxy port number' \ + '(-s --no-https)'{-s,--no-https}'[use HTTP instead of HTTPS (the default) for downloads]' \ + '(-u --no-ui)'{-u,--no-ui}'[update from command-line (no GUI)]' \ + '(-f --force)'{-f,--force}'[force replacement of a package or its parts, even if something has been modified]' \ + '(-t --filter)'{-t,--filter}'[a filter that limits the update to the specified types of packages]: :_android_sdk_update_filters -s ,' \ + '(-n --dry-mode)'{-n,--dry-mode}'[simulate the update but does not download or install anything]' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (move) + _arguments -C \ + '1: :_android_move_entities' \ + '*::move-arg:->move-args' \ + && ret=0 + case "$state" in + (move-args) + case $words[1] in + (avd) + _arguments \ + '(-n --name)'{-n,--name}'[name of the AVD to move or rename]: :_android_avd_names' \ + '(-p --path)'{-p,--path}'[path to the AVD'\''s new directory]: :_files -/' \ + '(-r --rename)'{-r,--rename}'[new name of the AVD]:name' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (delete) + _arguments -C \ + '1: :_android_delete_entities' \ + '*::delete-arg:->delete-args' \ + && ret=0 + case "$state" in + (delete-args) + case $words[1] in + (avd) + _arguments \ + '(-n --name)'{-n,--name}'[name of the AVD to delete]: :_android_avd_names' \ + && ret=0 + ;; + esac + ;; + esac + ;; + (display) + _arguments \ + '1: :_android_display_entities' \ + && ret=0 + ;; + esac + ;; + esac + + return ret +} + +(( $+functions[_android_cmds] )) || +_android_cmds() { + local commands; commands=( + 'list:list existing targets or virtual devices' + 'create:create new virtual devices or projects' + 'update:update a virtual device, project, SDK or adb' + 'move:move a virtual device' + 'delete:delete a virtual device' + 'avd:displays the AVD Manager window' + 'sdk:displays the SDK Manager window' + 'display:display manager windows' + ) + _describe -t commands 'command' commands "$@" +} + +(( $+functions[_android_list_entities] )) || +_android_list_entities() { + local entities; entities=( + 'avd:list existing Android Virtual Devices' + 'target:list existing targets' + 'sdk:list remote SDK repository' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_create_entities] )) || +_android_create_entities() { + local entities; entities=( + 'avd:create a new Android Virtual Device' + 'project:create a new Android project' + 'test-project:create a new Android project for a test package' + 'lib-project:create a new Android library project' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_update_entities] )) || +_android_update_entities() { + local entities; entities=( + 'avd:update an Android Virtual Device to match the folders of a new SDK' + 'project:update an Android project' + 'test-project:update the Android project for a test package' + 'lib-project:update an Android library project' + 'adb:update adb to support the USB devices declared in the SDK add-ons' + 'sdk:update the SDK by suggesting new platforms to install if available' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_move_entities] )) || +_android_move_entities() { + local entities; entities=( + 'avd:move or rename an Android Virtual Device' + ) + _describe -t entities 'entity' commands "$@" +} + +(( $+functions[_android_delete_entities] )) || +_android_delete_entities() { + local entities; entities=( + 'avd:delete an Android Virtual Device' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_display_entities] )) || +_android_display_entities() { + local entities; entities=( + 'sdk:display the SDK Manager window' + 'avd:display the AVD Manager window' + ) + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_android_targets] )) || +_android_targets() { + local targets; targets=(${(f)"$(_call_program targets $service list target --compact)"//:/\\:}) + _describe -t targets 'target' targets "$@" +} + +(( $+functions[_android_avd_names] )) || +_android_avd_names() { + local avd_names; avd_names=(${(f)"$(_call_program targets $service list avd --compact)"//:/\\:}) + _describe -t avd-names 'AVD name' avd_names "$@" +} + +(( $+functions[_android_sdk_update_filters] )) || +_android_sdk_update_filters() { + local filters; filters=(platform tool platform-tool doc sample extra) + _values $@ 'filter' "${filters[@]}" +} + +_android "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_archlinux-java b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_archlinux-java new file mode 100644 index 00000000..a497f765 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_archlinux-java @@ -0,0 +1,85 @@ +#compdef archlinux-java +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for archlinux-java a tool for selecting default Java runtime (https://wiki.archlinux.org/index.php/java). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + + +_archlinux-java_command_arguments() { + case $words[1] in + (set) + local java_versions=("${(@f)$(archlinux-java status | tail -n +2 | tr -s ' ' | cut -d ' ' -f2)}") + _describe -t output 'Downloads to delete' java_versions + ;; + esac +} + +_archlinux-java() { + local -a commands + + commands=( + "status:List installed Java environments and enabled one" + "get:Return the short name of the Java environment set as default" + "set:Force as default" + "unset:Unset current default Java environment" + "fix:Fix an invalid/broken default Java environment configuration" + "help:Show help" + ) + + _arguments -C \ + '1:cmd:->cmds' \ + '*:: :->args' \ + + case "$state" in + (cmds) + _describe -t commands 'commands' commands + ;; + (*) + _archlinux-java_command_arguments + ;; + esac +} + +_archlinux-java + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_artisan b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_artisan new file mode 100644 index 00000000..1104a204 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_artisan @@ -0,0 +1,63 @@ +#compdef artisan +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for artisan (http://laravel.com/docs/artisan). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * loranger (https://github.com/loranger) +# * Yohan Tambè (https://github.com/Cronos87) +# +# ------------------------------------------------------------------------------ + + +_artisan_get_command_list () { + IFS=" " + php artisan --no-ansi | \ + sed "1,/Available commands/d" | \ + awk '/ [a-z]+/ { print $1 }' | \ + sed -E 's/^[ ]+//g' | \ + sed -E 's/[:]+/\\:/g' | \ + sed -E 's/[ ]{2,}/\:/g' +} + +_artisan () { + if [ -f artisan ]; then + local -a commands + IFS=$'\n' + commands=(`_artisan_get_command_list`) + _describe 'commands' commands + fi +} + +compdef _artisan php artisan +compdef _artisan artisan diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_atach b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_atach new file mode 100644 index 00000000..5da96331 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_atach @@ -0,0 +1,71 @@ +#compdef atach +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for atach (https://github.com/sorin-ionescu/atach). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Sorin Ionescu +# +# ------------------------------------------------------------------------------ + +local state mode_values existing_sessions ret=1 + +mode_values=( + "none:disable redrawing" + "ctrl_l:use ctrl + l to redraw" + "winch:use sigwinch to redraw" +) + +existing_sessions=($(_call_program session atach)) + +_arguments -C -s -S \ + '(--list -l)'{--list,-l}'[list sessions]' \ + '(--sockets -L)'{--sockets,-L}'[list sockets]' \ + '(--session -s)'{--session=,-s+}'[set the session name]:session' \ + '(--char -c)'{--char=,-c+}'[set the detach character (default: ^\\)]:char' \ + '(--redraw -r)'{--redraw=,-r+}'[set the redraw method (none, ctrl_l, or winch)]:mode:->mode' \ + '(--detached -d)'{--detached,-d}'[start the session detached]' \ + '(--no-detach -D)'{--no-detach,-D}'[disable detaching]' \ + '(--no-suspend -Z)'{--no-suspend,-Z}'[disable suspending]' \ + '(--version -v)'{--version,-v}'[display version and copyright]' \ + '(--help -h)'{--help,-h}'[display help]' \ + '(-)::args:->session-or-command' && ret=0 + +case "$state" in + (mode) + _describe -t mode 'redraw mode' mode_values && ret=0 + ;; + (session-or-command) + _describe -t 'session' 'sessions' existing_sessions && ret=0 + _path_commands && ret=0 + ;; +esac + +return $ret + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bitcoin-cli b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bitcoin-cli new file mode 100644 index 00000000..f953eb43 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bitcoin-cli @@ -0,0 +1,211 @@ +#compdef bitcoin-cli +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for bitcoin-cli (https://bitcoin.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Ian Ker-Seymer (https://github.com/ianks) +# +# ------------------------------------------------------------------------------ + +_bitcoin-cli() { + local context state line curcontext="$curcontext" + + _arguments -C \ + -?'[This help message]' \ + -conf='[Specify configuration file. Relative paths will be prefixed by datadir location. (default: bitcoin.conf)]:PATH:_files' \ + -datadir='[Specify data directory]:PATH:_directories' \ + -getinfo='[Get general information from the remote server.]' \ + -testnet'[Use the test chain]' \ + -regtest'[Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development.]' \ + -named'[Pass named instead of positional arguments (default: false)]' \ + -stdin'[Read extra arguments from standard input, one per line until EOF/Ctrl-D (recommended for sensitive information such as passphrases)]' \ + -rpcport='[Connect to JSON-RPC on (default: 8332, testnet: 18332, regtest: 18443)]: :_guard "[[\:digit\:]]#" "PORT"' \ + -rpcwait'[Wait for RPC server to start]' \ + -rpcuser='[Username for JSON-RPC connections]:RPCUSER:()' \ + -rpcpassword='[Password for JSON-RPC connections]:RPCPASSWORD:()' \ + -rpcconnect='[Send commands to node running on (default: 127.0.0.1)]:RPCCONNECT:_hosts' \ + -rpcclienttimeout='[Timeout during HTTP requests, or 0 for no timeout. (default: 900)]: :_guard "[[\:digit\:]]#" "RPCCLIENTTIMEOUT"' \ + ':subcommand:->subcommand' && ret=0 + + case $state in + subcommand) + subcommands=( + 'getbestblockhash' + 'getblock' + 'getblockchaininfo' + 'getblockcount' + 'getblockfilter' + 'getblockhash' + 'getblockheader' + 'getblockstats' + 'getchaintips' + 'getchaintxstats' + 'getdifficulty' + 'getmempoolancestors' + 'getmempooldescendants' + 'getmempoolentry' + 'getmempoolinfo' + 'getrawmempool' + 'gettxout' + 'gettxoutproof' + 'gettxoutsetinfo' + 'preciousblock' + 'pruneblockchain' + 'savemempool' + 'scantxoutset' + 'verifychain' + 'verifytxoutproof' + 'getmemoryinfo' + 'getrpcinfo' + 'help' + 'logging' + 'stop' + 'uptime' + 'generatetoaddress' + 'getblocktemplate' + 'getmininginfo' + 'getnetworkhashps' + 'prioritisetransaction' + 'submitblock' + 'submitheader' + 'addnode' + 'clearbanned' + 'disconnectnode' + 'getaddednodeinfo' + 'getconnectioncount' + 'getnettotals' + 'getnetworkinfo' + 'getnodeaddresses' + 'getpeerinfo' + 'listbanned' + 'ping' + 'setban' + 'setnetworkactive' + 'analyzepsbt' + 'combinepsbt' + 'combinerawtransaction' + 'converttopsbt' + 'createpsbt' + 'createrawtransaction' + 'decodepsbt' + 'decoderawtransaction' + 'decodescript' + 'finalizepsbt' + 'fundrawtransaction' + 'getrawtransaction' + 'joinpsbts' + 'sendrawtransaction' + 'signrawtransactionwithkey' + 'testmempoolaccept' + 'utxoupdatepsbt' + 'createmultisig' + 'deriveaddresses' + 'estimatesmartfee' + 'getdescriptorinfo' + 'signmessagewithprivkey' + 'validateaddress' + 'verifymessage' + 'abandontransaction' + 'abortrescan' + 'addmultisigaddress' + 'backupwallet' + 'bumpfee' + 'createwallet' + 'dumpprivkey' + 'dumpwallet' + 'encryptwallet' + 'getaddressesbylabel' + 'getaddressinfo' + 'getbalance' + 'getbalances' + 'getnewaddress' + 'getrawchangeaddress' + 'getreceivedbyaddress' + 'getreceivedbylabel' + 'gettransaction' + 'getunconfirmedbalance' + 'getwalletinfo' + 'importaddress' + 'importmulti' + 'importprivkey' + 'importprunedfunds' + 'importpubkey' + 'importwallet' + 'keypoolrefill' + 'listaddressgroupings' + 'listlabels' + 'listlockunspent' + 'listreceivedbyaddress' + 'listreceivedbylabel' + 'listsinceblock' + 'listtransactions' + 'listunspent' + 'listwalletdir' + 'listwallets' + 'loadwallet' + 'lockunspent' + 'removeprunedfunds' + 'rescanblockchain' + 'sendmany' + 'sendtoaddress' + 'sethdseed' + 'setlabel' + 'settxfee' + 'setwalletflag' + 'signmessage' + 'signrawtransactionwithwallet' + 'unloadwallet' + 'walletcreatefundedpsbt' + 'walletlock' + 'walletpassphrase' + 'walletpassphrasechange' + 'walletprocesspsbt' + 'getzmqnotifications' + ) + + _describe -t subcommands 'bitcoin-cli subcommands' subcommands && ret=0 + esac + + return ret +} + +_bitcoin-cli "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bower b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bower new file mode 100644 index 00000000..69197ead --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bower @@ -0,0 +1,163 @@ +#compdef bower +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Bower (http://bower.io). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Joe Lencioni (https://github.com/lencioni) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line _opts ret=1 + +_arguments -C \ + '(- 1 *)'{-v,--version}'[display version information]' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + +case $state in + cmds) + _values "bower command" \ + "cache[manage bower cache]" \ + "help[display help information about Bower]" \ + "home[opens a package homepage into your favorite browser]" \ + "info[info of a particular package]" \ + "init[interactively create a bower.json file]" \ + "install[install a package locally]" \ + "link[symlink a package folder]" \ + "list[list local packages - and possible updates]" \ + "login[authenticate with GitHub and store credentials]" \ + "lookup[look up a package URL by name]" \ + "prune[removes local extraneous packages]" \ + "register[register a package]" \ + "search[search for a package by name]" \ + "update[update a local package]" \ + "uninstall[remove a local package]" \ + "unregister[remove a package from the registry]" \ + "version[bump a package version]" && ret=0 + _arguments \ + '(--force)--force[make various commands more forceful]' \ + '(--json)--json[output consumable JSON]' \ + '(--log-level)--log-level[what level of logs to report]' \ + "(--offline)--offline[don't hit the network]" \ + '(--quiet)--quiet[only output important information]' \ + "(--silent)--silent[don't output anything, besides errors]" \ + '(--verbose)--verbose[make output more verbose]' \ + '(--allow-root)--allow-root[allow running commands as root]' \ + '(--version)--version[output Bower version]' \ + '(--no-color)--no-color[disable colors]' && ret=0 + ;; + args) + case $line[1] in + help) + _values 'commands' \ + 'cache' \ + 'home' \ + 'info' \ + 'init' \ + 'install' \ + 'link' \ + 'list' \ + 'login' \ + 'lookup' \ + 'prune' \ + 'register' \ + 'search' \ + 'update' \ + 'uninstall' \ + 'unregister' \ + 'version' && ret=0 + ;; + (home|info|init|link|lookup|prune|register|search|unregister) + _arguments \ + '(--help)--help[show help message]' && ret=0 + ;; + install) + _arguments \ + '(--force-latest)--force-latest[force latest version on conflict]' \ + '(--help)--help[show help message]' \ + "(--production)--production[don't install project devDependencies]" \ + "(--save)--save[save installed packages into the project's bower.json dependencies]" \ + "(--save-dev)--save-dev[save installed packages into the project's bower.json devDependencies]" && ret=0 + ;; + list) + _arguments \ + '(--help)--help[show help message]' \ + '(--paths)--paths[generate a simple JSON source mapping]' \ + '(--relative)--relative[make paths relative to the directory config property, which defaults to bower_components]' && ret=0 + ;; + login) + _arguments \ + '(--help)--help[show help message]' \ + '(-t --token)'{-t,--token}'[Pass GitHub auth token (will not prompt for username/password)]' && ret=0 + ;; + uninstall) + _arguments \ + '(--help)--help[show help message]' \ + "(--save)--save[save installed packages into the project's bower.json dependencies]" \ + "(--save-dev)--save-dev[save installed packages into the project's bower.json devDependencies]" && ret=0 + ;; + update) + _arguments \ + '(--force-latest)--force-latest[force latest version on conflict]' \ + '(--help)--help[show help message]' \ + "(--production)--production[don't install project devDependencies]" && ret=0 + ;; + version) + _arguments \ + '(--message)--message[custom git commit and tag message]' && ret=0 + ;; + exec) + _normal && ret=0 + ;; + *) + _opts=( $(bower help $line[1] | sed -e '/^ \[-/!d; s/^ \[\(-[^=]*\)=.*/\1/') ) + _opts+=( $(bower help $line[1] | sed -e '/^ -/!d; s/^ \(-.\), \[\(-[^=]*\)=.*/\1 \2/') ) + if [[ $_opts != "" ]]; then + _values 'option' $_opts && ret=0 + fi + ;; + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bundle b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bundle new file mode 100644 index 00000000..da3dd3c9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_bundle @@ -0,0 +1,129 @@ +#compdef bundle +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Bundler (http://gembundler.com). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bruno Michel (https://github.com/nono) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line _gems _opts ret=1 + +_arguments -C -A "-v" -A "--version" \ + '(- 1 *)'{-v,--version}'[display version information]' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + +case $state in + cmds) + _values "bundle command" \ + "install[Install the gems specified by the Gemfile or Gemfile.lock]" \ + "update[Update dependencies to their latest versions]" \ + "package[Package the .gem files required by your application]" \ + "exec[Execute a script in the context of the current bundle]" \ + "config[Specify and read configuration options for bundler]" \ + "check[Determine whether the requirements for your application are installed]" \ + "list[Show all of the gems in the current bundle]" \ + "show[Show the source location of a particular gem in the bundle]" \ + "console[Start an IRB session in the context of the current bundle]" \ + "open[Open an installed gem in the editor]" \ + "viz[Generate a visual representation of your dependencies]" \ + "init[Generate a simple Gemfile, placed in the current directory]" \ + "gem[Create a simple gem, suitable for development with bundler]" \ + "help[Describe available tasks or one specific task]" \ + "platform[Displays platform compatibility information]" \ + "outdated[Show all of the outdated gems in the current bundle]" + ret=0 + ;; + args) + case $line[1] in + help) + _values 'commands' 'install' 'update' 'package' 'exec' 'config' 'check' 'list' 'show' 'console' 'open' 'viz' 'init' 'gem' 'help' 'platform' 'outdated' && ret=0 + ;; + install) + _policies=('HighSecurity' 'MediumSecurity' 'LowSecurity' 'AlmostNoSecurity' 'NoSecurity') + _arguments \ + '(--no-color)--no-color[disable colorization in output]' \ + '(--local)--local[do not attempt to connect to rubygems.org]' \ + '(--quiet)--quiet[only output warnings and errors]' \ + '(--gemfile)--gemfile=-[use the specified gemfile instead of Gemfile]:gemfile' \ + '(--system)--system[install to the system location]' \ + '(--deployment)--deployment[install using defaults tuned for deployment environments]' \ + '(--frozen)--frozen[do not allow the Gemfile.lock to be updated after this install]' \ + '(--path)--path=-[specify a different path than the system default]:path:_files' \ + '(--binstubs)--binstubs=-[generate bin stubs for bundled gems to ./bin]:directory:_files' \ + '(--without)--without=-[exclude gems that are part of the specified named group]:groups' \ + '(--with)--with=-[include gems that are part of the specified named group]:groups' \ + '(--clean)--clean[remove any gems not present in the current Gemfile]' \ + '(--full-index)--full-index[download and cache the index file of all gems]' \ + '(--jobs)--jobs=-[install gems parallelly]:number' \ + '(--force)--force[force download every gem]' \ + '(--no-cache)--no-cache[do not update the cache in vendor/cache with newly installed gems]' \ + '(--no-prune)--no-prune[do not remove stale gem from cache after installation]' \ + '(--retry)--retry=-[number of times to retry failed network or git requests]:number' \ + '(--sheband)--shebang=-[specify ruby executable to execute scripts]:ruby' \ + '(--standalone)--standalone=-[create standalone bundles]:groups' \ + "(--trust-policy)--trust-policy=-[apply the Rubygems security policy]:arg:($_policies)" + ret=0 + ;; + exec) + _normal && ret=0 + ;; + (open|show) + _gems=( $(bundle show 2> /dev/null | sed -e '/^ \*/!d; s/^ \* \([^ ]*\) .*/\1/') ) + if [[ $_gems != "" ]]; then + _values 'gems' $_gems && ret=0 + fi + ;; + *) + _opts=( $(bundle help $line[1] | sed -e '/^ \[-/!d; s/^ \[\(-[^=]*\)=.*/\1/') ) + _opts+=( $(bundle help $line[1] | sed -e '/^ -/!d; s/^ \(-.\), \[\(-[^=]*\)=.*/\1 \2/') ) + if [[ $_opts != "" ]]; then + _values 'options' $_opts && ret=0 + fi + ;; + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_caffeinate b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_caffeinate new file mode 100644 index 00000000..afcd5694 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_caffeinate @@ -0,0 +1,50 @@ +#compdef caffeinate +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------- +# Description +# ----------- +# +# Completion script for the macOS 'caffeinate' tool (man 8 caffeinate). +# +# ------------------------------------------------------------------------- +# Authors +# ------- +# +# * Nicolas Despres (initial version) +# +# ------------------------------------------------------------------------- + +_arguments -s \ + '-d[prevent the display from sleeping]' \ + '-i[prevent the system from idle sleeping]' \ + '-m[prevent the disk from idle sleeping]' \ + '-s[prevent the system from sleeping but only when running on AC power]' \ + '-u[declare that user is active]' \ + '-t+[assertion timeout value]:delay in seconds' \ + '-w+[waits for process to exit]:pid:_pids' \ + '(-):command: _command_names -e' \ + '*::args: _normal' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cap b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cap new file mode 100644 index 00000000..a9a8fe55 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cap @@ -0,0 +1,81 @@ +#compdef cap +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Capistrano (http://capify.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bruno Michel (https://github.com/nono) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + {-d,--debug}'[Prompts before each remote command execution]' \ + {-e,--explain}'[Displays help (if available) for the task]:task' \ + {-F,--default-config}'[Always use default config, even with -f]' \ + {-f,--file}'[A recipe file to load. May be given more than once]:file:_files' \ + {-H,--long-help}'[Explain these options and environment variables]' \ + {-h,--help}'[Display this help message]' \ + {-l,--logger}'[Choose logger method. STDERR used by default]:file:_files' \ + {-n,--dry-run}'[Prints out commands without running them]' \ + {-p,--password}'[Immediately prompt for the password]' \ + {-q,--quiet}'[Make the output as quiet as possible]' \ + {-r,--preserve-roles}'[Preserve task roles]' \ + {-S,--set-before}'[Set a variable before the recipes are loaded]:variable' \ + {-s,--set}'[Set a variable after the recipes are loaded]:variable' \ + {-T,--tasks}'[List all tasks (matching optional PATTERN) in the loaded recipe files]:pattern' \ + {-t,--tool}'[Abbreviates the output of -T for tool integration]' \ + {-V,--version}'[Display the Capistrano version, and exit]' \ + {-v,--verbose}'[Be more verbose. May be given more than once]' \ + {-X,--skip-system-config}'[Do not load the system config file (capistrano.conf)]' \ + {-x,--skip-user-config}'[Do not load the user config file (.caprc)]' \ + '*: :->cmds' && ret=0 + +case $state in + cmds) + cmds=( ${(f)"$(_call_program commands cap -T 2> /dev/null | sed -e '/ # /!d; s/:/\\:/g; s/cap \([A-Za-z0-9\\:_-]*\) .*# /\1:/')"} ) + _describe -t commands 'cap command' cmds && ret=0 + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cask b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cask new file mode 100644 index 00000000..b2ba82a3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cask @@ -0,0 +1,89 @@ +#compdef cask +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for cask (http://cask.readthedocs.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * ptrv +# * Johan Andersson +# * Sebastien Duthil +# +# ------------------------------------------------------------------------------ + +function _cask() { + local ret=1 state + _arguments \ + ':subcommand:->subcommand' \ + '*:: :->subcmds' && ret=0 + + case $state in + subcommand) + subcommands=( + "build:build all Elisp files in the files directive" + "clean-elc:remove all byte compiled Elisp files in the files directive" + "exec:execute command with correct 'exec-path' and 'load-path'" + "exec-path:print 'exec-path' for all packages and dependencies" + "files:print list of files specified in the files directive" + "help:display usage information or documentation for specified command" + "info:show info about the current package" + "init:initialize the current directory with a Cask-file" + "install:install all packages specified in the Cask-file" + "link:manage links" + "list:list dependencies" + "load-path:print 'load-path' for all packages and dependencies" + "outdated:print list of outdated packages" + "package:build package and put in specified directory (default: dist)" + "package-directory:print current package installation directory" + "path:print 'exec-path' for all packages and dependencies" + "pkg-file:write a 'define-package' file" + "update:update package version" + "upgrade-cask:upgrade Cask itself and its dependencies" + "upgrade:upgrade Cask itself and its dependencies" + "version:print program version" + ) + _describe -t subcommands 'cask subcommands' subcommands && ret=0 + esac + + case "$words[1]" in + init) + _arguments \ + '(--dev)--dev[Run in dev mode]' && ret=0 ;; + exec) + _generic + ;; + esac + + return ret +} + +_cask "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ccache b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ccache new file mode 100644 index 00000000..802f09ac --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ccache @@ -0,0 +1,325 @@ +#compdef ccache -P -value-,CCACHE_*,-default- + +# zsh completion script for ccache + +# Copyright 2018 CERN for the benefit of the LHCb Collaboration. + +# 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 copyright holder 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. +# +# In applying this licence, CERN does not waive the privileges and immunities +# granted to it by virtue of its status as an Intergovernmental Organization +# or submit itself to any jurisdiction. + +# allow users to define their better compilers +# inspired by _cmake_compilers +# users could override with +# +# _ccache_compilers() { +# local -a _ccache_compilers +# _ccache_compilers=(gcc g++ clang clang++) +# _wanted compilers expl "compiler" compadd -- $_ccache_compilers +# } +(( $+functions[_ccache_compilers] )) || +_ccache_compilers() { + _command_names -e +} + +_ccache_booleans() { + _message 'There are no "false" values, unset variable to disable' + local description; description=${1:-boolean} + local booleans; booleans=( + 'true' + 'yes' + ) + _describe -t booeans "$description" booleans +} + +(( $+functions[_ccache_compressionlevels] )) || +_ccache_compressionlevels() { + local -a one_nine + one_nine=(1 2 3 4 5 6 7 8 9) + _describe -t onetonine "compression level (if using compression)" one_nine +} + +(( $+functions[_ccache_sloppiness] )) || +_ccache_sloppiness() { + _values -s ',' \ + "file_macro[ignore __FILE__]" \ + "file_stat_matches[rely on mtimes and ctimes]" \ + "include_file_ctime[ignore headers' ctime too new]" \ + "include_file_mtime[ignore headers' mtime too new]" \ + "no_system_headers[exclude system headers from cache]" \ + "pch_defines[be sloppy about #defines in pch]" \ + "time_macros[ignore __date__ and __time__]" +} + +(( $+functions[_ccache_compilerchecks] )) || +_ccache_compilerchecks() { + local -a compiler_check_values + compiler_check_values=( + 'content: the actual compiler binary' + 'mtime: mtime and size of the compiler' + 'none: ignore compiler for hashing' + 'string\:: any hard coded string (pre-computed version)' + '%compiler%\ -v:any compiler invocation output' + ) + _describe -t compilerchecks "compiler information included in the hash" compiler_check_values +} + +(( $+functions[_ccache_dirlevels] )) || +_ccache_dirlevels() { + local -a one_eight + one_eight=(1 2 3 4 5 6 7 8) + _describe -t onetoeight "directory levels in the cache directory" one_eight +} + +if [[ "$service" = -value-* ]]; then + case $service in + *CCACHE_*DIR*) + # CCACHE_BASEDIR: relative to which top level paths are hashed + # CCACHE_DIR: where the cache and config are kept + # CCACHE_TEMPDIR: where temporary files are kept + # all: a single path + _path_files -/ + ;; + *CCACHE_NLEVELS*) + _ccache_dirlevels + ;; + *CCACHE_CC*) + _ccache_compilers + ;; + *CCACHE_COMPILERCHECK*) + _ccache_compilerchecks + ;; + *CCACHE_*COMPRESS*) + _ccache_booleans "write compressed cache" + ;; + *CCACHE_COMPRESSLEVEL*) + _ccache_compressionlevels + ;; + *CCACHE_EXTENSION*) + _alternative ':set extension for intermediate files: ' + ;; + *CCACHE_*DIRECT*) + _ccache_booleans "use direct mode" + ;; + *CCACHE_*DISABLE*) + _ccache_booleans "disable cache usage" + ;; + *CCACHE_EXTRAFILES*) + local sep=: + compset -P "*${sep}" + compset -S "${sep}*" || suf="$sep" + + _files "" -r "${sep}"' /\t\t\-' "$@" + ;; + *CCACHE_*HARDLINK*) + _ccache_booleans "create hard links rather than copies" + ;; + *CCACHE_*HASHDIR*) + _ccache_booleans "include the cwd in the hash" + ;; + *CCACHE_IGNOREHEADERS*) + _dir_list + ;; + *CCACHE_*COMMENTS*) + _ccache_booleans "consider comments in hashing" + ;; + *CCACHE_LIMIT_MULTIPLE*) + _alternative ":clean up down to level (e.g. 0.8): " + ;; + *CCACHE_LOGFILE*) + _path_files -g "*(/) *.log" + ;; + *CCACHE_MAXFILES*) + _alternative ":maximum number of files in the cache (0= no limit): " + ;; + *CCACHE_MAXSIZE*) + _alternative ':maximum cache size (0= no limit) with suffix k,M,G,T or Ki,Mi,Gi,Ti: ' + ;; + *CCACHE_PATH*) + _alternative ':PATH for compiler lookup (instead of $PATH):_dir_list' + ;; + *CCACHE_PREFIX*) + _alternative ':prefixes for compiler invocation: ' + ;; + *CCACHE_PREFIX_CPP*) + _alternative ':prefixes for preprocessor invocation: ' + ;; + *CCACHE_*READONLY*) + _ccache_booleans "treat cache as read-only" + ;; + *CCACHE_*READONLY_DIRECT*) + _ccache_booleans "retrieve from read-only cache in direct mode" + ;; + *CCACHE_*RECACHE*) + _ccache_booleans "use cache in write-only mode" + ;; + *CCACHE_*CPP2*) + _ccache_booleans "pass original rather than preprocessed source code to compiler" + ;; + *CCACHE_SLOPPINESS*) + _ccache_sloppiness + ;; + *CCACHE_*STATS*) + _ccache_booleans "update statistics counters" + ;; + *CCACHE_UMASK*) + _alternative ":umask value (octal): " + ;; + *CCACHE_*UNIFY*) + _ccache_booleans "normalise sources prior to processing" + ;; + esac + + return +fi + +__ccache_config_keys() { + local -a keys + keys=( + 'compression:write compressed cache' + 'direct_mode:use direct mode' + 'disable:disable cache usage' + 'hard_link:create hard links rather than copies' + 'hash_dir:include the cwd in the hash' + 'keep_comments_cpp:consider comments in hashing' + 'read_only:treat cache as read-only' + 'read_only_direct:retrieve from read-only cache in direct mode' + 'recache:use cache in write-only mode' + 'run_second_cpp:pass originial rather than preprocessed source code to compiler' + 'stats:update statistics counters' + 'unify:normalise sources prior to processing' + 'base_dir:specify relative to which top level paths are hashed' + 'temporary_dir:specify where temporary files are kept' + 'cache_dir:specify where the cache is kept' + 'compiler:specify compiler' + 'cache_dir_levels:directory levels in the cache directory' + 'compiler_check:compiler information included in the hash' + 'compression_level:cache compression level' + 'cpp_extension:set extensions for intermediate files' + 'extra_files_to_hash:additional files to consider in hashing' + 'ignore_headers_in_manifest:set paths to headers to ignore in hashing' + 'limit_multiple:cleanup level' + 'log_file:specify a log file' + 'max_files:maximum number of files in the cache' + 'max_size:maximum size of the cache' + 'path:PATH for compiler lookup (instead of $PATH)' + 'prefix_command:prefixes for compiler invocation' + 'prefix_command_cpp:prefixes for preprocessor invocation' + 'sloppiness:hash files sloppy' + 'umask:set umask for ccache and child processes (e.g. for sharing cache)' + ) + _describe -t configkeys "configuration keys" keys -S '=' +} + +if compset -P '--set-config=*='; then + case $IPREFIX in + *=compression= | *=direct_mode= | *=disable= | *=hard_link= | *=hash_dir= | *=keep_comments_cpp= | *=read_only= | *=read_only_direct= | *=recache= | *=run_second_cpp= | *=stats= | *=unify= ) + local booleans; booleans=( + 'true' + 'false' + ) + _describe -t booleans 'boolean' booleans + ;; + *=base_dir= | *=temporary_dir= | *=cache_dir=) + _path_files -/ + ;; + *=compiler=) + _ccache_compilers + ;; + *=cache_dir_levels=) + _ccache_dirlevels + ;; + *=compiler_check=) + _ccache_compilerchecks + ;; + *=compression_level=) + _ccache_compressionlevels + ;; + *=cpp_extension=) + _alternative ':set extension for intermediate files: ' + ;; + *=extra_files_to_hash=) + local sep=: + compset -P "*${sep}" + compset -S "${sep}*" || suf="$sep" + + _files "" -r "${sep}"' /\t\t\-' "$@" + ;; + *=ignore_headers_in_manifest=) + _dir_list + ;; + *=limit_multiple=) + _alternative ":clean up down to level (e.g. 0.8): " + ;; + *=log_file=) + _path_files -g "*(/) *.log" + ;; + *=max_files=) + _alternative ":maximum number of files in the cache (0= no limit): " + ;; + *=max_size=) + _alternative ':maximum cache size (0= no limit) with suffix k,M,G,T or Ki,Mi,Gi,Ti: ' + ;; + *=path=) + _alternative ':PATH for compiler lookup (instead of $PATH):_dir_list' + ;; + *=prefix_command=) + _alternative ':prefixes for compiler invocation: ' + ;; + *=prefix_command_cpp=) + _alternative ':prefixes for preprocessor invocation: ' + ;; + *=sloppiness=) + _ccache_sloppiness + ;; + *=umask=) + _alternative ":umask value (octal): " + ;; + esac +elif [[ $words[2] == -* ]]; then + # if the first argument starts with -, we are in configure-ccache mode + _arguments \ + '*'{-o,--set-config=}"[set configuration key]:keys:__ccache_config_keys" \ + '(: -)'{-h,--help}'[show help message]' \ + '(: -)'{-V,--version}'[print version and copyright information]' \ + '(-z --zero-stats)'{-z,--zero-stats}'[zero statistics counters]' \ + '(-c --cleanup)'{-c,--cleanup}'[delete old files and recalculate size counters]' \ + '(-C --clear)'{-C,--clear}'[clear the cache completely (except configuration)]' \ + '(-p --print-config)'{-p,--print-config}'[print current configuration options]' \ + '(-s --show-stats)'{-s,--show-stats}'[show statistics summary]' \ + '(-F --max-files=)'{-F,--max-files=}'[set maximum number of files in cache]:number of files in cache: ' \ + '(-M --max-size=)'{-M,--max-size=}'[set maximum size of cache]:cache size: ' +elif [[ $CURRENT -eq 2 ]]; then + _ccache_compilers +else + # the command line already looks like 'ccache ...' + # forward to the completion function of the compiler + (( CURRENT-- )) + shift words + _normal +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cf b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cf new file mode 100644 index 00000000..398a9128 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cf @@ -0,0 +1,994 @@ +#compdef cf +# ------------------------------------------------------------------------------ +# +# Copyright 2015 Ferran Rodenas & Danny Rosen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ +# +# Description +# ----------- +# +# Completion script for Cloud Foundry CLI (https://github.com/cloudfoundry/cli#downloads) +# +# ------------------------------------------------------------------------------ +# +# Authors +# ------- +# +# * Ferran Rodenas (https://github.com/frodenas) +# * Danny Rosen (https://github.com/dannyzen) +# +# ------------------------------------------------------------------------------ + +# ---------------------- +# ----- Helper functions +# ---------------------- + +# Output a selectable list of organizations +__cf_orgs() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf orgs | awk 'NR>3{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'ORG' cont_cmd +} + +# Output a selectable list of spaces +__cf_spaces() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf spaces | awk 'NR>3{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'SPACE' cont_cmd +} + +# Output a selectable list of applications +__cf_apps() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf apps | awk 'NR>4{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'APP' cont_cmd +} + +# Output a selectable list of stacks +__cf_stacks() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf stacks | awk 'NR>4{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'STACK' cont_cmd +} + +# Output a selectable list of services +__cf_marketplace_services() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf marketplace | awk 'NR>4{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'SERVICE' cont_cmd +} + +# Output a selectable list of services +__cf_services() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf services | awk 'NR>4{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'SERVICE' cont_cmd +} + +# Output a selectable list of domains +__cf_domains() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf domains | grep -v shared | awk 'NR>2{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'DOMAIN' cont_cmd +} + +# Output a selectable list of shared domains +__cf_shared_domains() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf domains | grep -v owned | awk 'NR>2{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'SHARED-DOMAIN' cont_cmd +} + +# Output a selectable list of hostnames +__cf_hostnames() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf routes | awk 'NR>3{print $2}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'ROUTE' cont_cmd +} + +# Output a selectable list of buildpacks +__cf_buildpacks() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf buildpacks | awk 'NR>3{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'BUILDPACK' cont_cmd +} + +# Output a selectable list of feature flags +__cf_feature_flags() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf feature-flags | awk 'NR>4{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'FEATURE-FLAG' cont_cmd +} + +# Output a selectable list of plugin repos +__cf_repo_plugins() { + declare -a cont_cmd + cont_cmd=($(CF_COLOR=false CF_TRACE=false cf list-plugin-repos | awk 'NR>3{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'REPO-PLUGIN' cont_cmd +} + +# Output a selectable list of plugins +__cf_plugins() { + declare -a cont_cmd + cont_cmd=($(cf plugins | awk 'NR>4{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'PLUGIN' cont_cmd +} + +# Output a selectable list of targets (requires cf-targets plugin) +__cf_targets() { + declare -a cont_cmd + cont_cmd=($(cf targets | awk '{print $1}')) + if [[ 'X$cont_cmd' != 'X' ]] + _describe 'TARGET' cont_cmd +} + + +# -------------------------- +# ----- end Helper functions +# -------------------------- + +# -------------- +# ----- Commands +# -------------- + +__login() { + _arguments \ + '-a=[API endpoint (e.g. https://api.example.com)]:api endpoint:' \ + '-u=[Username]:username:' \ + '-p=[Password]:password:' \ + '-o=[Organization]:organization name:__cf_orgs' \ + '-s=[Space]:space name:__cf_spaces' \ + '--sso[Use a one-time password to login]' \ + '--skip-ssl-validation[Skip SSL validation]' +} + +__logout() { + # no arguments +} + +__passwd() { + _arguments \ + '1:password:' +} + +__target() { + _arguments \ + '-o=[Organization]:organization name:__cf_orgs' \ + '-s=[Space]:space name:__cf_spaces' +} + +__api() { + _arguments \ + '1:API url:' \ + '--unset[Remove all api endpoint targeting]' \ + '--skip-ssl-validation[Skip SSL validation]' +} + +__auth() { + # no arguments +} + +__apps() { + # no arguments +} + +__app() { + _arguments \ + '1:application name:__cf_apps' \ + '--guid[Retrieve and display the given app guid. All other health and status output for the app is suppressed]' +} + +__push() { + _arguments \ + '1:application name:__cf_apps' \ + '-b=[Custom buildpack by name (e.g. my-buildpack) or GIT URL or GIT BRANCH URL]:buildpack name:__cf_buildpacks' \ + '-c=[Startup command, set to null to reset to default start command]:startup command:' \ + '-d=[Domain (e.g. example.com)]:domain (e.g. example.com):__cf_domains' \ + '-f=[Path to manifest]:file:_files:' \ + '-i=[Number of instances]:number of instances:' \ + '-k=[Disk limit (e.g. 256M, 1024M, 1G)]:disk limit (e.g. 256M, 1024M, 1G):' \ + '-m=[Memory limit (e.g. 256M, 1024M, 1G)]:memory limit (e.g. 256M, 1024M, 1G):' \ + '-n=[Hostname (e.g. my-subdomain)]:hostname (e.g. my-subdomain):' \ + '-p=[Path to app directory or to a zip file of the contents of the app directory]:file:_files' \ + '-s=[Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)]:stack name:__cf_stacks:' \ + '-t=[Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply]:maximum time (in seconds):' \ + '--no-hostname[Map the root domain to this app]' \ + '--no-manifest[Ignore manifest file]' \ + '--no-route[Do not map a route to this app and remove routes from previous pushes of this app]' \ + '--no-start[Do not start an app after pushing]' \ + '--random-route[Create a random route for this app]' +} + +__scale() { + _arguments \ + '1:application name:__cf_apps' \ + '-i=[Number of instances]:number of instances:' \ + '-k=[Disk limit (e.g. 256M, 1024M, 1G)]:disk limit (e.g. 256M, 1024M, 1G):' \ + '-m=[Memory limit (e.g. 256M, 1024M, 1G)]:memory limit (e.g. 256M, 1024M, 1G):' \ + '-f[Force restart of app without prompt]' +} + +__delete() { + _arguments \ + '1:application name:__cf_apps' \ + '--f[Force deletion without confirmation]' \ + '--r[Also delete any mapped routes]' +} + +__rename() { + _arguments \ + '1:application name:__cf_apps' \ + '2:application name:' +} + +__start() { + _arguments \ + '1:application name:__cf_apps' +} + +__stop() { + _arguments \ + '1:application name:__cf_apps' +} + +__restart() { + _arguments \ + '1:application name:__cf_apps' +} + +__restage() { + _arguments \ + '1:application name:__cf_apps' +} + +__restart-app-instance() { + _arguments \ + '1:application name:__cf_apps' \ + '2:application index:' +} + +__events() { + _arguments \ + '1:application name:__cf_apps' +} + +__files() { + _arguments \ + '1:application name:__cf_apps' \ + '2::path:' \ + '-i=[instance]' +} + +__logs() { + _arguments \ + '1:application name:__cf_apps' \ + '--recent[Dump recent logs instead of tailing]' +} + +__env() { + _arguments \ + '1:application name:__cf_apps' +} + +__set-env() { + _arguments \ + '1:application name:__cf_apps' \ + '2:env var name:' \ + '3:env var value:' +} + +__unset-env() { + _arguments \ + '1:application name:__cf_apps' \ + '2:env var name:' +} + +__stacks() { + # no arguments +} + +__stack() { + _arguments \ + '1:stack name:__cf_stacks' \ + '--guid[Retrieve and display the given stack guid. All other output for the stack is suppressed]' +} + +__copy-source() { + _arguments \ + '1:source application name:__cf_apps' \ + '2:target application name:' \ + '-o=[Org that contains the target application]:organization name:__cf_orgs' \ + '-s=[Space that contains the target application]:space name:__cf_spaces' \ + '--no-restart[Override restart of the application in target environment after copy-source completes]' +} + +__create-app-manifest() { + _arguments \ + '1:application name:__cf_apps' \ + '-p=[Specify a path for file creation. If path not specified, manifest file is created in current working directory]:path:_files' +} + +__marketplace() { + _arguments \ + '-s=[Show plan details for a particular service offering]' +} + +__services() { + # no arguments +} + +__service() { + _arguments \ + '1:service name:__cf_services' \ + '--guid[Retrieve and display the given service guid. All other output for the service is suppressed]' +} + +__create-service() { + _arguments \ + '1:service:__cf_marketplace_services' \ + '2:plan:' \ + '3:service name:' \ + '-c=[Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file]' \ + '-t=[User provided tags]' +} + +__update-service() { + _arguments \ + '1:service name:__cf_services' \ + '-p=[Change service plan for a service instance]' \ + '-c=[Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file]' \ + '-t=[User provided tags]' +} + +__rename-service() { + _arguments \ + '1:service name:__cf_services' \ + '2:service name:' +} + +__delete-service() { + _arguments \ + '1:service name:__cf_services' \ + '-f[Force deletion without confirmation]' +} + +__create-service-key() { + _arguments \ + '1:service name:__cf_services' \ + '2:service key:' \ + '-c=[Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file]' +} + +__service-keys() { + _arguments \ + '1:service name:__cf_services' +} + +__service-key() { + _arguments \ + '1:service name:__cf_services' \ + '2:service key:' +} + +__delete-service-key() { + _arguments \ + '1:service name:__cf_services' \ + '2:service key:' \ + '-f[Force deletion without confirmation]' +} + +__bind-service() { + _arguments \ + '1:application name:__cf_apps' \ + '2:service name:__cf_services' \ + '-c=[Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file]' +} + +__unbind-service() { + _arguments \ + '1:application name:__cf_apps' \ + '2:service name:__cf_services' +} + +__create-user-provided-service() { + _arguments \ + '1:service name:' \ + '-p=[Credentials]' \ + '-l=[Syslog Drain Url]' +} + +__update-user-provided-service() { + _arguments \ + '1:service name:__cf_services' \ + '-p=[Credentials]' \ + '-l=[Syslog Drain Url]' +} + +__orgs() { + # no arguments +} + +__org() { + _arguments \ + '1:organization name:__cf_orgs' \ + '--guid[Retrieve and display the given org guid. All other output for the org is suppressed]' +} + +__create-org() { + _arguments \ + '1:organization name:' \ + '-q=[Quota to assign to the newly created org (excluding this option results in assignment of default quota)]' +} + +__delete-org() { + _arguments \ + '1:organization name:__cf_orgs' \ + '-f[Force deletion without confirmation]' +} + +__spaces() { + # no arguments +} + +__space() { + _arguments \ + '1:space name:__cf_spaces' \ + '--guid[Retrieve and display the given space guid. All other output for the space is suppressed]' \ + '--security-group-rules[Retrieve the rules for all the security groups associated with the space]' +} + +__create-space() { + _arguments \ + '1:space name:' \ + '-o=[Org that contains the target application]:organization name:__cf_orgs' \ + '-q=[Quota to assign to the newly created space (excluding this option results in assignment of default quota)]' +} + +__delete-space() { + _arguments \ + '1:space name:__cf_spaces' \ + '-f[Force deletion without confirmation]' +} + +__domains() { + # no arguments +} + +__create-domain() { + _arguments \ + '1:organization name:__cf_orgs' \ + '2:domain:' +} + +__delete-domain() { + _arguments \ + '1:domain:__cf_domains' \ + '-f[Force deletion without confirmation]' +} + +__create-shared-domain() { + _arguments \ + '1:domain:' +} + +__delete-shared-domain() { + _arguments \ + '1:domain:__cf_shared_domains' \ + '-f[Force deletion without confirmation]' +} + +__routes() { + _arguments \ + '--orglevel[List all the routes for all spaces of current organization]' +} + +__create-route() { + _arguments \ + '1:space name:__cf_spaces' \ + '2:domain:__cf_domains' \ + '-n=[Hostname]' +} + +__check-route() { + _arguments \ + '1:hostname:__cf_hostnames' \ + '2:domain:__cf_domains' +} + +__map-route() { + _arguments \ + '1:application name:__cf_apps' \ + '2:domain:__cf_domains' \ + '-n=[Hostname]:hostname:__cf_hostnames:' +} + +__unmap-route() { + _arguments \ + '1:application name:__cf_apps' \ + '2:domain:__cf_domains' \ + '-n=[Hostname]:hostname:__cf_hostnames:' +} + +__delete-route() { + _arguments \ + '1:domain:__cf_domains' \ + '-n=[Hostname]:hostname:__cf_hostnames:' \ + '-f[Force deletion without confirmation]' +} + +__delete-orphaned-routes() { + _arguments \ + '-f[Force deletion without confirmation]' +} + +__buildpacks() { + # no arguments +} + +__create-buildpack() { + _arguments \ + '1:buildpack name:' \ + '2:path:_files' \ + '3:position:' \ + '--enable[Enable the buildpack to be used for staging]' \ + '--disable[Disable the buildpack from being used for staging]' +} + +__update-buildpack() { + _arguments \ + '1:buildpack name:__cf_buildpacks' \ + '-p=[Path to directory or zip file]:file:_files' \ + '-i=[The order in which the buildpacks are checked during buildpack auto-detection]' \ + '--enable[Enable the buildpack to be used for staging]' \ + '--disable[Disable the buildpack from being used for staging]' \ + '--lock[Lock the buildpack to prevent updates]' \ + '--unlock[Unlock the buildpack to enable updates]' +} + +__rename-buildpack() { + _arguments \ + '1:buildpack name:__cf_buildpacks' \ + '2:new buildpack name:' +} + +__delete-buildpack() { + _arguments \ + '1:buildpack name:__cf_buildpacks' \ + '-f[Force deletion without confirmation]' +} + +__running-environment-variable-group() { + # no arguments +} + +__staging-environment-variable-group() { + # no arguments +} + +__set-staging-environment-variable-group() { + # no arguments +} + +__set-running-environment-variable-group() { + # no arguments +} + +__feature-flags() { + # no arguments +} + +__feature-flag() { + _arguments \ + '1:feature name:__cf_feature_flags' +} + +__enable-feature-flag() { + _arguments \ + '1:feature name:__cf_feature_flags' +} + +__disable-feature-flag() { + _arguments \ + '1:feature name:__cf_feature_flags' +} + +__curl() { + _arguments \ + '1:path:' \ + '-i[Include response headers in the output]' \ + '-v[Enable CF_TRACE output for all requests and responses]' \ + '-X=[HTTP method]:http method:(GET POST PUT DELETE)' \ + '-h=[Custom headers to include in the request, flag can be specified multiple times]' \ + '-d=[HTTP data to include in the request body]' \ + '--output[Write curl body to FILE instead of stdout]' +} + +__config() { + _arguments \ + '--async-timeout=[Timeout for async HTTP requests]' \ + '--trace=[Trace HTTP requests]:trace:(true false)' \ + '--color=[Enable or disable color]:color:(true false)' \ + '--locale=[Set default locale. If LOCALE is CLEAR, previous locale is deleted]' +} + +__oauth-token() { + # no arguments +} + +__add-plugin-repo() { + _arguments \ + '1:repo name:' \ + '2:url:' +} + +__remove-plugin-repo() { + _arguments \ + '1:repo name:__cf_repo_plugins' \ + '2:url:' +} + +__list-plugin-repos() { + # no arguments +} + +__repo-plugins() { + _arguments \ + '-r=[Repo Name]:repo name:__cf_repo_plugins' +} + +__plugins() { + _arguments \ + '-checksum[Compute and show the sha1 value of the plugin binary file]' +} + +__install-plugin() { + _arguments \ + '1:plugin URL or path:_files' \ + '-r=[repo name where the plugin binary is located]:repo name:__cf_repo_plugins' +} + +__uninstall-plugin() { + _arguments \ + '1:plugin name:__cf_plugins' +} + +__save-target() { + _arguments \ + '1:target-name:' \ + '-f[Force save even if current target is already saved under another name]' +} + +__set-target() { + _arguments \ + '1:target-name:__cf_targets' \ + '-f[Force target change even if current target is unsaved]' +} + +__delete-target() { + _arguments \ + '1:target-name:__cf_targets' +} + +# ------------------ +# ----- end Commands +# ------------------ + +# ------------------- +# ----- 1st Arguments +# ------------------- + +local -a _1st_arguments +_1st_arguments=( + "login":"Log user in" + "logout":"Log user out" + "passwd":"Change user password" + "target":"Set or view the targeted org or space" + "api":"Set or view target api url" + "auth":"Authenticate user non-interactively" + "apps":"List all apps in the target space" + "app":"Display health and status for app" + "push":"Push a new app or sync changes to an existing app" + "scale":"Change or view the instance count, disk space limit, and memory limit for an app" + "delete":"Delete an app" + "rename":"Rename an app" + "start":"Start an app" + "stop":"Stop an app" + "restart":"Restart an app" + "restage":"Restage an app" + "restart-app-instance":"Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index" + "events":"Show recent app events" + "files":"Print out a list of files in a directory or the contents of a specific file" + "logs":"Tail or show recent logs for an app" + "env":"Show all env variables for an app" + "set-env":"Set an env variable for an app" + "unset-env":"Remove an env variable" + "stacks":"List all stacks" + "stack":"Show information for a stack" + "copy-source":"Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application" + "create-app-manifest":"Create an app manifest for an app that has been pushed successfully" + "marketplace":"List available offerings in the marketplace" + "services":"List all service instances in the target space" + "service":"Show service instance info" + "create-service":"Create a service instance" + "update-service":"Update a service instance" + "delete-service":"Delete a service instance" + "rename-service":"Rename a service instance" + "create-service-key":"Create key for a service instance" + "service-keys":"List keys for a service instance" + "service-key":"Show service key info" + "delete-service-key":"Delete a service key" + "bind-service":"Bind a service instance to an app" + "unbind-service":"Unbind a service instance from an app" + "create-user-provided-service":"Make a user-provided service instance available to cf apps" + "update-user-provided-service":"Update user-provided service instance name value pairs" + "orgs":"List all orgs" + "org":"Show org info" + "create-org":"Create an org" + "delete-org":"Delete an org" + "rename-org":"Rename an org" + "spaces":"List all spaces in an org" + "space":"Show space info" + "create-space":"Create a space" + "delete-space":"Delete a space" + "rename-space":"Rename a space" + "domains":"List domains in the target org" + "create-domain":"Create a domain in an org for later use" + "delete-domain":"Delete a domain" + "create-shared-domain":"Create a domain that can be used by all orgs (admin-only)" + "delete-shared-domain":"Delete a shared domain" + "routes":"List all routes in the current space or the current organization" + "create-route":"Create a url route in a space for later use" + "check-route":"Perform a simple check to determine whether a route currently exists or not" + "map-route":"Add a url route to an app" + "unmap-route":"Remove a url route from an app" + "delete-route":"Delete a route" + "delete-orphaned-routes":"Delete all orphaned routes (e.g.: those that are not mapped to an app)" + "buildpacks":"List all buildpacks" + "create-buildpack":"Create a buildpack" + "update-buildpack":"Update a buildpack" + "rename-buildpack":"Rename a buildpack" + "delete-buildpack":"Delete a buildpack" + "running-environment-variable-group":"Retrieve the contents of the running environment variable group" + "staging-environment-variable-group":"Retrieve the contents of the staging environment variable group" + "set-staging-environment-variable-group":"Pass parameters as JSON to create a staging environment variable group" + "set-running-environment-variable-group":"Pass parameters as JSON to create a running environment variable group" + "feature-flags":"Retrieve list of feature flags with status of each flag-able feature" + "feature-flag":"Retrieve an individual feature flag with status" + "enable-feature-flag":"Enable the use of a feature so that users have access to and can use the feature" + "disable-feature-flag":"Disable the use of a feature so that users have access to and can use the feature" + "curl":"Executes a raw request, content-type set to application/json by default" + "config":"write default values to the config" + "oauth-token":"Retrieve and display the OAuth token for the current session" + "add-plugin-repo":"Add a new plugin repository" + "remove-plugin-repo":"Remove a plugin repository" + "list-plugin-repos":"list all the added plugin repository" + "repo-plugins":"List all available plugins in all added repositories" + "plugins":"list all available plugin commands" + "install-plugin":"Install the plugin defined in command argument" + "uninstall-plugin":"Uninstall the plugin defined in command argument" + "targets":"List all saved targets (requires cf-targets plugin)" + "save-target":"Save the current target under a given name (requires cf-targets plugin)" + "set-target":"Restore a previously saved target (requires cf-targets plugin)" + "delete-target":"Delete a saved target (requires cf-targets plugin)" +) + +# ----------------------- +# ----- end 1st Arguments +# ----------------------- + +# ---------- +# ----- Main +# ---------- + +_arguments '*:: :->command' + +if (( CURRENT == 1 )); then + _describe -t commands "cf command" _1st_arguments + return +fi + +local -a _command_args +case "$words[1]" in + login) + __login ;; + logout) + __logout ;; + passwd) + __passwd ;; + target) + __target ;; + api) + __api ;; + auth) + __auth ;; + apps) + __apps ;; + app) + __app ;; + push) + __push ;; + scale) + __scale ;; + delete) + __delete ;; + rename) + __rename ;; + start) + __start ;; + stop) + __stop ;; + restart) + __restart ;; + restage) + __restage ;; + restart-app-instance) + __restart-app-instance ;; + events) + __events ;; + files) + __files ;; + logs) + __logs ;; + env) + __env ;; + set-env) + __set-env ;; + unset-env) + __unset-env ;; + stacks) + __stacks ;; + stack) + __stack ;; + copy-source) + __copy-source ;; + create-app-manifest) + __create-app-manifest ;; + marketplace) + __marketplace ;; + services) + __services ;; + service) + __service ;; + create-service) + __create-service ;; + update-service) + __update-service ;; + rename-service) + __rename-service ;; + delete-service) + __delete-service ;; + create-service-key) + __create-service-key ;; + service-keys) + __service-keys ;; + service-key) + __service-key ;; + delete-service-key) + __delete-service-key ;; + bind-service) + __bind-service ;; + unbind-service) + __unbind-service ;; + create-user-provided-service) + __create-user-provided-service ;; + update-user-provided-service) + __update-user-provided-service ;; + orgs) + __orgs ;; + org) + __org ;; + create-org) + __create-org ;; + delete-org) + __delete-org ;; + spaces) + __spaces ;; + space) + __space ;; + create-space) + __create-space ;; + delete-space) + __delete-space ;; + domains) + __domains ;; + create-domain) + __create-domain ;; + delete-domain) + __delete-domain ;; + create-shared-domain) + __create-shared-domain ;; + delete-shared-domain) + __delete-shared-domain ;; + routes) + __routes ;; + create-route) + __create-route ;; + check-route) + __check-route ;; + map-route) + __map-route ;; + unmap-route) + __unmap-route ;; + delete-route) + __delete-route ;; + delete-orphaned-routes) + __delete-orphaned-routes ;; + buildpacks) + __buildpacks ;; + create-buildpack) + __create-buildpack ;; + update-buildpack) + __update-buildpack ;; + rename-buildpack) + __rename-buildpack ;; + delete-buildpack) + __delete-buildpack ;; + running-environment-variable-group) + __running-environment-variable-group ;; + staging-environment-variable-group) + __staging-environment-variable-group ;; + set-staging-environment-variable-group) + __set-staging-environment-variable-group ;; + set-running-environment-variable-group) + __set-running-environment-variable-group ;; + feature-flags) + __feature-flags ;; + feature-flag) + __feature-flag ;; + enable-feature-flag) + __enable-feature-flag ;; + disable-feature-flag) + __disable-feature-flag ;; + curl) + __curl ;; + config) + __config ;; + oauth-token) + __oauth-token ;; + add-plugin-repo) + __add-plugin-repo ;; + remove-plugin-repo) + __remove-plugin-repo ;; + list-plugin-repos) + __list-plugin-repos ;; + repo-plugins) + __repo-plugins ;; + plugins) + __plugins ;; + install-plugin) + __install-plugin ;; + uninstall-plugin) + __uninstall-plugin ;; + save-target) + __save-target ;; + set-target) + __set-target ;; + delete-target) + __delete-target ;; +esac diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cheat b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cheat new file mode 100644 index 00000000..349249cd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cheat @@ -0,0 +1,73 @@ +#compdef cheat +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Cheat an interactive cheatsheets on the command-line. (https://github.com/chrisallenlane/cheat/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + +local cheats + +_cheat_load_cheats() { + cheats=("${(f)$(cheat -l | cut -d' ' -f1)}") +} + + +_cheat() { + + + _arguments -C -s -S -n \ + '(- 1 *)'{-d,--directories}'[List directories on CHEATPATH]: :->full' \ + '(- 1 *)'{-e,--edit}'[Edit cheatsheet]:cheat:->cheats' \ + '(- 1 *)'{-l,--list}'[List cheatsheets]: :->full' \ + '(- 1 *)'{-s,--search}'[Search cheatsheets for ]: :->full' \ + '(- 1 *)'{-v,--version}'[display version and copyright information]: :->full' \ + + case "$state" in + (full) + ;; + (cheats) + _cheat_load_cheats + _describe -t cheats 'cheats' cheats + ;; + (*) + _cheat_load_cheats + _describe -t cheats 'cheats' cheats + ;; + esac +} + +_cheat + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_choc b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_choc new file mode 100644 index 00000000..3ac8c59a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_choc @@ -0,0 +1,60 @@ +#compdef choc +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for choc (http://chocolatapp.com) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nicholas Penree (https://github.com/drudge) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +_arguments -C \ + '(-a --async)'{-a,--async}'[do not wait for the user to close the file in Chocolat]' \ + '(-w --wait)'{-w,--wait}'[wait for file to be closed by Chocolat]' \ + '(-n --no-reactivation)'{-n,--no-reactivation}'[after editing with -w, do not reactivate the calling app]' \ + '(-h --help)'{-h,--help}'[show help information]' \ + '(-v --version)'{-v,--version}'[print version information]' \ + '*:script or directory:_files' && ret=0 + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_chromium b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_chromium new file mode 100644 index 00000000..917739b5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_chromium @@ -0,0 +1,211 @@ +#compdef chromium + +# Copyright 2018 CERN for the benefit of the LHCb Collaboration + +# 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 CERN 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 +# OWNER 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. +# +# In applying this licence, CERN does not waive the privileges and immunities +# granted to it by virtue of its status as an Intergovernmental Organization +# or submit itself to any jurisdiction. + +_arguments \ + "--user-data-dir=[Specify the directory that user data is kept in]:directory:_path_files -/" \ + "--app=[Runs URL in app mode]:url:_urls" \ + "--incognito[Open in incognito mode]" \ + "--new-window[open in new window]" \ + "(--no-proxy-server --proxy-auto-detect --proxy-pac-url --password-store)--proxy-server=[specify proxy server]:[\://][\:]:_chromium_proxyurls" \ + "--no-proxy-server[Disables the proxy server]" \ + "--proxy-auto-detect[Autodetect proxy configuration]" \ + "--proxy-pac-url=[Specify proxy autoconfiguration URL]:proxy autoconfiguration url:_urls" \ + "--password-store=[Set the password store to use]:password store: _wanted arguments expl 'wallet store' compadd -- basic gnome kwallet" \ + "--version[print version]" \ + "*:: :{ _alternative _urls _files }" + +# excerpt from the chromium help message: +# +# Specify the HTTP/SOCKS4/SOCKS5 proxy server to use for requests. This overrides any environment variables or settings picked via the options dialog. An individual proxy server is specified +# using the format: +# +# +# +# Where is the protocol of the proxy server, and is one of: +# +# "http", "socks", "socks4", "socks5". +# +# If the is omitted, it defaults to "http". Also note that "socks" is equivalent to "socks5". +# +# Examples: +# +# --proxy-server="foopy:99" +# Use the HTTP proxy "foopy:99" to load all URLs. +# +# --proxy-server="socks://foobar:1080" +# Use the SOCKS v5 proxy "foobar:1080" to load all URLs. +# +# --proxy-server="socks4://foobar:1080" +# Use the SOCKS v4 proxy "foobar:1080" to load all URLs. +# +# --proxy-server="socks5://foobar:66" +# Use the SOCKS v5 proxy "foobar:66" to load all URLs. +# +# It is also possible to specify a separate proxy server for different URL types, by prefixing the proxy server specifier with a URL specifier: +# +# Example: +# +# --proxy-server="https=proxy1:80;http=socks4://baz:1080" +# Load https://* URLs using the HTTP proxy "proxy1:80". And load http://* +# URLs using the SOCKS v4 proxy "baz:1080". +# + +_chromium_proxyurls () { + #TODO: semicolon separated urls not yet implemented + # mostly copied from _urls + local ipre scheme host user uhosts ret=1 expl match glob suf + local localhttp + zstyle -a ":completion:${curcontext}:urls" local localhttp + local localhttp_servername="$localhttp[1]" + local localhttp_documentroot="$localhttp[2]" + local localhttp_userdir="$localhttp[3]" + zstyle -a ":completion:${curcontext}:urls" urls urls + if [[ $#urls -gt 1 || ( $#urls -eq 1 && ! -d $urls[1] ) ]] + then + [[ $#urls -eq 1 && -f $urls[1] ]] && urls=($(< $urls[1])) + _wanted urls expl 'URL' compadd "$@" -a urls && return 0 + urls=() + fi + urls="$urls[1]" + glob=(-g '*(^/)') + zparseopts -D -K -E 'g:=glob' + ipre="$IPREFIX" + if ! compset -P '(#b)([-+.a-z0-9]#):' + then + _tags -C argument prefixes + while _tags + do + while _next_label prefixes expl 'URL prefix' -S '' "$@" + do + compset -S '[^:/]*' && compstate[to_end]='' + compadd "$expl[@]" http:// socks:// socks4:// socks5:// && ret=0 + done + (( ret )) || return 0 + done + return 1 + fi + scheme="$match[1]" + case "$scheme" in + (http(|s)|socks(|4|5)) if ! compset -P // + then + _wanted -C "$scheme" prefixes expl 'end of prefix' compadd -S '' "$@" // + return + fi ;; + (file) [[ -prefix //(127.0.0.1|localhost)/ ]] && compset -P '//(127.0.0.1|localhost)' + [[ -prefix /// ]] && compset -P // + if ! compset -P // + then + _tags -C file files + while _tags + do + while _next_label files expl 'local file' + do + if [[ -prefix / ]] + then + _path_files "$expl[@]" -S '' "${glob[@]}" && ret=0 + _path_files "$expl[@]" -S/ -r '/' -/ && ret=0 + elif [[ -z "$PREFIX" ]] + then + compadd -S '/' -r '/' "$expl[@]" "$@" - "${PWD%/}" && ret=0 + fi + done + (( ret )) || return 0 + done + return 1 + fi ;; + esac + if ! compset -P '(#b)([^:/]#)([:/])' + then + uhosts=($urls/$scheme/$PREFIX*$SUFFIX(/:t)) + _tags hosts + while _tags + do + while _next_label hosts expl host + do + compset -S '[:/]*' || suf="/" + (( $#uhosts )) || _hosts -S "$suf" -r '/:' "$expl[@]" && ret=0 + [[ "$scheme" = http ]] && uhosts=($uhosts $localhttp_servername) + compadd -S "$suf" -r '/:' "$expl[@]" -a uhosts && ret=0 + done + (( ret )) || return 0 + done + return 1 + fi + host="$match[1]" + [[ $match[2] = ':' ]] && ! compset -P '<->/' && _message -e ports 'port number' && return 0 + _tags remote-files files || return 1 + if [[ "$localhttp_servername" = "$host" ]] + then + if compset -P \~ + then + if ! compset -P '(#b)([^/]#)/' + then + _users -S/ "$@" + return + fi + user="$match[1]" + while _tags + do + while _next_label files expl 'local file' + do + _path_files "$expl[@]" "$@" -W ~$user/$localhttp_userdir "${glob[@]}" && ret=0 + _path_files -S/ -r '/' "$expl[@]" -W ~$user/$localhttp_userdir-/ && ret=0 + done + (( ret )) || return 0 + done + else + while _tags + do + while _next_label files expl 'local file' + do + _path_files "$expl[@]" "$@" -W $localhttp_documentroot "${glob[@]}" && ret=0 + _path_files -S/ -r '/' "$expl[@]" -W $localhttp_documentroot -/ && ret=0 + done + (( ret )) || return 0 + done + fi + else + while _tags + do + (( $#urls )) && while _next_label files expl 'local file' + do + _path_files "$expl[@]" "$@" -W $urls/$scheme/$host "${glob[@]}" && ret=0 + _path_files -S/ -r '/' "$expl[@]" -W $urls/$scheme/$host -/ && ret=0 + done + [[ $scheme = (scp|sftp) ]] && _requested remote-files && _remote_files -h $host -- ssh && ret=0 + (( ret )) || return 0 + done + fi + return $ret +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cmake b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cmake new file mode 100644 index 00000000..ebbdc6bc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cmake @@ -0,0 +1,597 @@ +#compdef cmake -value-,CMAKE_GENERATOR,-default- +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------- +# Description +# ----------- +# +# Completion script for CMake (http://www.cmake.org). +# +# ------------------------------------------------------------------------- +# Authors +# ------- +# +# * Scott M. Kroll (initial version) +# * Paul Seyfert (handling of --build and updates) +# * Norbert Lange (presets, command mode, updates) +# +# ------------------------------------------------------------------------- +# Notes +# ----- +# +# * By default only C and C++ languages are supported for compiler flag +# variables. To define your own list of languages: +# +# cmake_langs=('C' 'C' +# 'CXX' 'C++') +# zstyle ':completion:*:cmake:*' languages $cmake_langs +# +# ------------------------------------------------------------------------- + +local context state line curcontext="$curcontext" cmake_args + +local cmake_build_options;cmake_build_options=( + '-S[Explicitly specify a source directory]:source directory:_path_files -/' + '-B[Explicitly specify a build directory]:build directory:_path_files -/' + '-C[Pre-load a script to populate the cache]:initial cache:_files' + '*-D-[Create a cmake cache entry]:property:_cmake_define_property' + '*-U[Remove matching entries from CMake cache]:globbing expression' + '-G[Specify a makefile generator]:generator:_cmake_generators' + '-T[Specify toolset name if supported by generator]:toolset name' + '-A[Specify platform name if supported by generator]:platform name' + + # Warnings + '(-Wdev)-Wno-dev[Suppress/Enable developer warnings]' + '(-Wno-dev)-Wdev[Suppress/Enable developer warnings]' + '(-Wdeprecated)-Wno-deprecated[Suppress/Enable deprecation warnings]' + '(-Wno-deprecated)-Wdeprecated[Suppress/Enable deprecation warnings]' + '(-Werror=dev)-Wno-error=dev[Make developer warnings (not) errors]' + '(-Wno-error=dev)-Werror=dev[Make developer warnings (not) errors]' + '(-Wno-error=deprecated)-Werror=deprecated[Make deprecated macro and function warnings (not) errors]' + '(-Werror=deprecated)-Wno-error=deprecated[Make deprecated macro and function warnings (not) errors]' + + '--preset=[Specify a configure preset]:preset:_cmake_presets' + '--list-presets[List available presets]' + + '-E[CMake command mode]:command:_cmake_command_help' + + '-L-[List cache variables]::_values "options" "[non-advanced cache variables]" "A[advanced cache variables]" "H[non-advanced cached variables with help]" "AH[advanced cache variables with help]"' + + '--build[Build a CMake-generated project binary tree]:project directory:_path_files -/' + '--install[Install a CMake-generated project binary tree]:project directory:_path_files -/' + '--open[Open generated project in the associated application]:project directory:_path_files -/' + + '-N[View mode only]' + '-P[Process script mode]:script:_files' + + '--find-package[Legacy pkg-config like mode. Do not use]' + + '--graphviz=[Generate graphviz of dependencies, see CMakeGraphVizOptions.cmake for more]:graphviz output:_files' + '--system-information[Dump information about this system]::system information output:_files' + + '--log-level=[Set the verbosity of messages from CMake files]:log level:(ERROR WARNING NOTICE STATUS VERBOSE DEBUG TRACE)' + '--log-context[Prepend log messages with context, if given]' + + '--debug-trycompile[Do not delete the try_compile build tree. Only useful on one try_compile at a time]' + '--debug-output[Put cmake in a debug mode]' + '--debug-find[Put cmake find in a debug mode]' + + '(--trace-expand)--trace[Put cmake in trace mode]' + '(--trace)--trace-expand[Put cmake in trace mode with variable expansion]' + '--trace-format=[Set the output format of the trace]:trace format:(human json-v1)' + '*--trace-source[Trace only this CMake file/module. Multiple options allowed]:filename:_files' + '--trace-redirect[Redirect trace output to a file instead of stderr]:trace output:_files' + + '--warn-uninitialized[Warn about uninitialized values]' + '--no-warn-unused-cli[Do not warn about command line options]' + '--warn-unused-vars[Warn about unused variables]' + '--check-system-vars[Find problems with variable usage in system files]' + + '--profiling-format[Output data for profiling CMake scripts]:profiling format:(google-trace)' + '--profiling-output[Select an output path for the profiling data]:filename:_files' + + ':cmake project:_path_files -/' +) + +# ------------------------ +# _cmake_generator_options +# +# arguments are $1: build working directory (top level Makefile or build.ninja file) +# $2: position of "--" in the command line +# ------------------------ +(( $+functions[_cmake_generator_options] )) || +_cmake_generator_options() { + # pass only the part of the command line starting at "--" to the completion + shift (( $2 - 1 )) words + (( CURRENT = $CURRENT + 1 - $2 )) + if [ -f $1/Makefile ] + then + $_comps[make] + elif [ -f $1/build.ninja ] + then + $_comps[ninja] + fi +} + +# -------------- +# _cmake_presets +# -------------- +(( $+functions[_cmake_presets] )) || +_cmake_presets() { + local invoke; invoke=(${words[@]}) + # TODO: remove all arguments -* except -S + invoke[$CURRENT]=--list-presets + + # TODO: Problems with quotes need eval + # would need a way to exec the array + local list_presets; list_presets=(${(f)"$(eval "${invoke[@]} 2> /dev/null" | sed -n 's,^[[:space:]]*"\([^"]*\)"[[:space:]]*-[[:space:]]*\(.*\),\1:\2,p' )"}) + + _describe 'presets' list_presets +} + +# -------------- +# _cmake_targets +# -------------- +(( $+functions[_cmake_targets] )) || +_cmake_targets() { + local -a targets + if [ -f $1/Makefile ] + then + # `make help` doesn't work for Makefiles in general, but for CMake generated Makefiles it does. + i=1 + for target in $(make help | \grep -e "\.\.\." | sed "s/\.\.\. //" | sed "s/ (the default.*//") ; do + targets[$i]=$target + (( i = $i + 1 )) + done + elif [ -f $1/build.ninja ] + then + # `ninja help` doesn't seem to be the list of targets we're interested in + i=1 + for target in $(ninja -C $1 -t targets all 2&>/dev/null | awk -F: '{print $1}') ; do + targets[$i]="$target" + (( i++ )) + done + fi + _describe 'build targets' targets +} + +_cmake_suggest_builddirs() { + _alternative ':current directory:(.)' 'directory::_directories' && return 0 +} + +_cmake_suggest_installdirs() { + _alternative ':current directory:(.)' 'directory::_directories' && return 0 +} + +_cmake_on_build() { + local build_extras;build_extras=( + '--[Native build tool options]' + '--target[specify build target]' + '--clean-first[build target clean first]' + '--config[For multi-configuration tools]' + '--parallel[maximum number of build processes]' + '--use-stderr') + local -a undescribed_build_extras + i=1 + for be in $build_extras ; do + undescribed_build_extras[$i]=$(echo $be | sed "s/\[.*//") + (( i++ )) + done + inbuild=false + dashdashposition=-1 + for ((i = (($CURRENT - 1)); i > 1 ; i--)); do + if [[ $words[$i] == --build ]] ; then + inbuild=true + buildat=$i + (( difference = $CURRENT - $i )) + elif [[ $words[$i] == -- ]] ; then + dashdashposition=$i + fi + done + # check if build mode has been left + outofbuild=false + for ((i = (($CURRENT - 1)); i > (($buildat + 1)); i--)); do + # don't check the word after --build (should be a directory) + if [[ ${undescribed_build_extras[(r)$words[$i]]} == $words[$i] ]] ; then continue ; fi + if [[ $words[(($i - 1))] == --target ]] ; then continue ; fi + if [[ $words[(($i - 1))] == --config ]] ; then continue ; fi + if [[ $words[(($i - 1))] == --parallel ]] ; then continue ; fi + outofbuild=true + done + if (( $dashdashposition > 0 )) ; then + _cmake_generator_options $words[(($buildat + 1))] $dashdashposition && return 0 + fi + if [[ "$inbuild" == false || "$difference" -eq 1 ]] ; then + # either there is no --build or completing the directory after --build + _arguments -C -s \ + - build_opts \ + "$cmake_build_options[@]" \ + - build_cmds \ + "$cmake_suggest_build[@]" && return 0 + elif [[ $words[(($CURRENT - 1))] == --target ]] ; then + # after --build

    --target, suggest targets + _cmake_targets $words[(($buildat + 1))] && return 0 + elif [[ $words[(($CURRENT - 1))] == --config ]] ; then + # after --build --config, no idea + return 0 + elif [[ $words[(($CURRENT - 1))] == --parallel ]] ; then + # after --build --parallel + return 0 + elif [ "$outofbuild" = true ] ; then + # after --build --, suggest other cmake_build_options (like -Wno-dev) + _arguments "$cmake_build_options[@]" && return 0 + else + # after --build , suggest other cmake_build_options (like -Wno-dev) or --build options (like --clean-first) + _arguments "$build_extras[@]" "$cmake_build_options[@]" && return 0 + fi +} + +_cmake_on_install() { + local build_extras;build_extras=( + '--[Native build tool options]' + '--prefix[Override the installation prefix, CMAKE_INSTALL_PREFIX]' + '--config[For multi-configuration generators(e.g. Visual Studio)]' + '--component[Component-based install]' + '--strip[Strip before installing.]' + ) + local -a undescribed_build_extras + i=1 + for be in $build_extras ; do + undescribed_build_extras[$i]=$(echo $be | sed "s/\[.*//") + (( i++ )) + done + inbuild=false + dashdashposition=-1 + for ((i = (($CURRENT - 1)); i > 1 ; i--)); do + if [[ $words[$i] == --install ]] ; then + inbuild=true + buildat=$i + (( difference = $CURRENT - $i )) + elif [[ $words[$i] == -- ]] ; then + dashdashposition=$i + fi + done + outofbuild=false + for ((i = (($CURRENT - 1)); i > (($buildat + 1)); i--)); do + # don't check the word after --install (should be a directory) + if [[ ${undescribed_build_extras[(r)$words[$i]]} == $words[$i] ]] ; then continue ; fi + if [[ $words[(($i - 1))] == --prefix ]] ; then continue ; fi + if [[ $words[(($i - 1))] == --config ]] ; then continue ; fi + if [[ $words[(($i - 1))] == --component ]] ; then continue ; fi + outofbuild=true + done + if (( $dashdashposition > 0 )) ; then + _cmake_generator_options $words[(($buildat + 1))] $dashdashposition && return 0 + fi + if [[ "$inbuild" == false || "$difference" -eq 1 ]] ; then + # either there is no --install or completing the directory after --install + _arguments -C -s \ + - build_opts \ + "$cmake_build_options[@]" \ + - build_cmds \ + "$cmake_suggest_install[@]" && return 0 + elif [[ $words[(($CURRENT - 1))] == --prefix ]] ; then + # after --install --prefix, no idea + return 0 + elif [[ $words[(($CURRENT - 1))] == --config ]] ; then + # after --install --config, no idea + return 0 + elif [[ $words[(($CURRENT - 1))] == --component ]] ; then + # after --build --component, no idea + return 0 + elif [ "$outofbuild" = true ] ; then + # after --build --, suggest other cmake_build_options (like -Wno-dev) + _arguments "$cmake_build_options[@]" && return 0 + else + # after --build , suggest other cmake_build_options (like -Wno-dev) or --build options (like --clean-first) + _arguments "$build_extras[@]" "$cmake_build_options[@]" && return 0 + fi +} + +local cmake_help_actions;cmake_help_actions=( + '(- 1)'{--help,-help,-usage,-h,-H}'[Print usage information and exit]' + '(- 1)'{--version,-version}'[Print version number and exit]' + '(- 1)--help-full[Print all help manuals and exit]' + '(- 1)--help-manual[Print one help manual and exit]:module-name: _cmake_list_names --help-manual-list "manual name"' + '(- 1)--help-manual-list[List help manuals available and exit]' + '(- 1)--help-command[Print help for one command and exit]:command-name: _cmake_list_names --help-command-list "command name"' + '(- 1)--help-command-list[List commands with help available and exit]' + '(- 1)--help-commands[Print cmake-commands manual and exit]' + '(- 1)--help-module[Print help for one module and exit]:module-name: _cmake_list_names --help-module-list "module name"' + '(- 1)--help-module-list[List modules with help available and exit]' + '(- 1)--help-modules[Print cmake-modules manual and exit]' + '(- 1)--help-policy[Print help for one policy and exit]:policy-name: _cmake_list_names --help-policy-list "policy name"' + '(- 1)--help-policy-list[List policies with help available and exit]' + '(- 1)--help-policies[Print cmake-policies manual and exit]' + '(- 1)--help-property[Print help for one property and exit]:property-name: _cmake_list_names --help-property-list "property name" brakremove' + '(- 1)--help-property-list[List properties with help available and exit]' + '(- 1)--help-properties[Print cmake-properties manual and exit]' + '(- 1)--help-variable[Print help for one variable and exit]:variable-name: _cmake_list_names --help-variable-list "variable name" brakremove' + '(- 1)--help-variable-list[List variables with help available and exit]' + '(- 1)--help-variables[Print cmake-variables manual and exit]' +) +_cmake_help() { + _arguments -C -s - help "$cmake_help_actions[@]" +} + +# ----------------- +# _cmake_list_names +# ----------------- +(( $+functions[_cmake_list_names] )) || +_cmake_list_names() { + local command; command="$@[1]" + local desc; desc="$@[2]" + local opts; opts=($@[3]) + local list_names; list_names=(${(f)"$($service $command 2> /dev/null)"}) + # Older CMake (< 3.0) writes out the version + list_names=(${^list_names##cmake version*}) + + if [[ ${opts[(i)brakremove]} -le ${#opts} ]]; then + list_names=(${^list_names//\[/\\\[}) + list_names=(${^list_names//\]/\\\]}) + fi + + _values ${desc} ${list_names[@]:-1} && return 0 +} + +# ---------------------- +# _cmake_define_property +# ---------------------- +(( $+functions[_cmake_define_property] )) || +_cmake_define_property() { + if compset -P '*='; then + _wanted property-values expl 'property value' _cmake_define_property_values ${${IPREFIX%=}#-D} && return 0 + else + _wanted property-names expl 'property name' _cmake_define_property_names -qS= && return 0 + fi +} + +# ---------------------------- +# _cmake_define_property_names +# ---------------------------- +(( $+functions[_cmake_define_property_names] )) || +_cmake_define_property_names() { + local alternatives; alternatives=( + 'common-property-names:common property name:_cmake_define_common_property_names -qS=' + ) + local -A cmake_langs + zstyle -a ":completion:${curcontext}:" languages cmake_langs + [[ $#cmake_langs -eq 0 ]] && cmake_langs=('C' 'C' 'CXX' 'C++') + + for cmake_lang in ${(k)cmake_langs}; do + cmake_lang_desc="${cmake_langs[$cmake_lang]}" + alternatives+=("${cmake_lang//:/-}-property-names:${cmake_lang_desc} language property name:_cmake_define_lang_property_names -qS= ${cmake_lang} ${cmake_lang_desc}") + done + + _alternative "${alternatives[@]}" +} + +# --------------------------------- +# _cmake_define_lang_property_names +# --------------------------------- +(( $+functions[_cmake_define_lang_property_names] )) || +_cmake_define_lang_property_names() { + local cmake_lang="$@[-2]" cmake_lang_desc="$@[-1]" + local properties; properties=( + "CMAKE_${cmake_lang}_COMPILER:${cmake_lang_desc} compiler" + "CMAKE_${cmake_lang}_COMPILER_LAUNCHER:${cmake_lang_desc} compiler launcher (e.g. ccache)" + "CMAKE_${cmake_lang}_FLAGS:${cmake_lang_desc} compiler flags for all builds" + "CMAKE_${cmake_lang}_FLAGS_DEBUG:${cmake_lang_desc} compiler flags for all Debug build" + "CMAKE_${cmake_lang}_FLAGS_RELEASE:${cmake_lang_desc} compiler flags for all Release build" + "CMAKE_${cmake_lang}_FLAGS_MINSIZREL:${cmake_lang_desc} compiler flags for all MinSizRel build" + "CMAKE_${cmake_lang}_FLAGS_RELWITHDEBINFO:${cmake_lang_desc} compiler flags for all RelWithDebInfo build" + "CMAKE_${cmake_lang}_STANDARD:${cmake_lang_desc} language standard" + "CMAKE_${cmake_lang}_STANDARD_REQUIRED:${cmake_lang_desc} language standard is required" + "CMAKE_${cmake_lang}_EXTENSIONS:${cmake_lang_desc} enable compiler specific extensions" + ) + + _describe -t "${cmake_lang//:/-}-property-names" "${cmake_lang_desc} property name" properties $@[0,-3] && return 0 +} + +# ----------------------------------- +# _cmake_define_common_property_names +# ----------------------------------- +(( $+functions[_cmake_define_common_property_names] )) || +_cmake_define_common_property_names() { + local properties; properties=( + 'CMAKE_MODULE_PATH:Search path for CMake modules (FindPROJECT.cmake)' + 'CMAKE_PREFIX_PATH:Search path for installations (PROJECTConfig.cmake)' + 'CMAKE_BUILD_TYPE:Specifies the build type for make based generators' + 'CMAKE_TOOLCHAIN_FILE:Absolute or relative path to a CMake script which sets up toolchain related variables' + 'CMAKE_COLOR_MAKEFILE:Enables/disables color output when using the Makefile generator' + 'CMAKE_INSTALL_PREFIX:Install directory used by install' + 'CMAKE_EXPORT_COMPILE_COMMANDS:Enable/disable output of compilation database during generation' + 'CMAKE_RULE_MESSAGES:Specify whether to report a message for each make rule' + 'CMAKE_VERBOSE_MAKEFILE:Enable verbose output from Makefile builds' + 'CMAKE_UNITY_BUILD:Batch include source files' + ) + + _describe -t 'common-property-names' 'common property name' properties $@ +} + +local _cmake_build_types=('Debug' 'Release' 'RelWithDebInfo' 'MinSizeRel') +local _cmake_c_standards=(90 99 11) +local _cmake_cxx_standards=(98 11 14 17 20) + +# ---------------------------- +# _cmake_define_property_values +# ---------------------------- +(( $+functions[_cmake_define_property_values] )) || +_cmake_define_property_values() { + local ret=1 + setopt localoptions extendedglob + case $@[-1] in + (CMAKE_BUILD_TYPE) _wanted build-types expl 'build type' _values 'build type' ${_cmake_build_types[@]} && ret=0;; + (CMAKE_CXX_STANDARD) _wanted cxx-standards expl 'cxx standard' _values 'cxx standard' ${_cmake_cxx_standards[@]} && ret=0;; + (CMAKE_C_STANDARD) _wanted c-standards expl 'c standard' _values 'c standard' ${_cmake_c_standards[@]} && ret=0;; + (CMAKE_TOOLCHAIN_FILE) _wanted toolchain-files expl 'file' _cmake_toolchain_files && ret=0;; + (CMAKE_COLOR_MAKEFILE) _wanted booleans expl 'boolean' ${_cmake_booleans[@]} && ret=0;; + (CMAKE_RULE_MESSAGES) _wanted booleans expl 'boolean' ${_cmake_booleans[@]} && ret=0;; + (CMAKE_VERBOSE_MAKEFILE) _wanted booleans expl 'boolean' ${_cmake_booleans[@]} && ret=0;; + (CMAKE_UNITY_BUILD) _wanted booleans expl 'boolean' ${_cmake_booleans[@]} && ret=0;; + (CMAKE_INSTALL_PREFIX) _files -/ && ret=0;; + (CMAKE_EXPORT_COMPILE_COMMANDS) _wanted booleans expl 'boolean' ${_cmake_booleans[@]} && ret=0;; + (CMAKE_*_COMPILER) _wanted compilers expl 'compiler' _cmake_compilers && ret=0;; + (CMAKE_*_COMPILER_LAUNCHER) _wanted compilers expl 'compiler launcher' _cmake_launchers && ret=0;; + (CMAKE_*_FLAGS(|_?*)) _message -e compiler-flags 'compiler flags' && _dispatch $service -value-,CPPFLAGS,-default- && ret=0;; + (CMAKE_*_STANDARD_REQUIRED) _wanted booleans expl 'boolean' ${_cmake_booleans[@]} && ret=0;; + (CMAKE_*_EXTENSIONS) _wanted booleans expl 'boolean' ${_cmake_booleans[@]} && ret=0;; + (*) _files && ret=0;; + esac + + return ret +} + +local _cmake_generator_list +_cmake_generator_list=( + 'Green Hills MULTI' + 'Unix Makefiles' + 'Ninja' + 'Ninja Multi-Config' + 'CodeBlocks - Ninja' + 'CodeBlocks - Unix Makefiles' + 'CodeLite - Ninja' + 'CodeLite - Unix Makefiles' + 'Eclipse CDT4 - Ninja' + 'Eclipse CDT4 - Unix Makefiles' + 'Kate - Ninja' + 'Kate - Unix Makefiless' + 'Sublime Text 2 - Ninja' + 'Sublime Text 2 - Unix Makefiles' +) + +# ----------------- +# _cmake_generators +# ----------------- +(( $+functions[_cmake_generators] )) || +_cmake_generators() { + _describe -t generators 'generator' _cmake_generator_list +} + +# ---------------------- +# _cmake_toolchain_files +# ---------------------- +(( $+functions[_cmake_toolchain_files] )) || +_cmake_toolchain_files() { + _files -g '*\.cmake*' +} + + +local _cmake_booleans=(_describe -t booleans 'boolean' 'YES' 'NO') + +# --------------- +# _cmake_compilers +# +# by default just executable commands, but can be overridden by users. +# --------------- +(( $+functions[_cmake_compilers] )) || +_cmake_compilers() { + _command_names -e +} + +# --------------- +# _cmake_launchers +# +# by default just executable commands, but can be overridden by users. +# useful commands might be ccache, distcc, ... +# --------------- +(( $+functions[_cmake_launchers] )) || +_cmake_launchers() { + _command_names -e +} + +local _cmake_commands=( + 'capabilities:Report capabilities built into cmake in JSON format' \ + 'cat:concat the files and print them to the standard output' \ + 'chdir:run command in a given directory' \ + 'compare_files:check if file1 is same as file2' \ + 'copy:copy files to destination (either file or directory)' \ + 'copy_directory:copy content of ... directories to destination directory' \ + 'copy_if_different:copy files if it has changed' \ + 'echo:displays arguments as text' \ + 'echo_append:displays arguments as text but no new line' \ + 'env:run command in a modified environment' \ + 'environment:display the current environment' \ + 'make_directory:create parent and directories' \ + 'md5sum:create MD5 checksum of files' \ + 'sha1sum:create SHA1 checksum of files' \ + 'sha224sum:create SHA224 checksum of files' \ + 'sha256sum:create SHA256 checksum of files' \ + 'sha384sum:create SHA384 checksum of files' \ + 'sha512sum:create SHA512 checksum of files' \ + 'remove:remove the file(s), use -f to force it' \ + 'remove_directory:remove directories and their contents' \ + 'rename:rename a file or directory (on one volume)' \ + 'rm:remove files or directories' \ + 'server:start cmake in server mode' \ + 'sleep:sleep for given number of seconds' \ + 'tar:create or extract a tar or zip archive' \ + 'time:run command and display elapsed time' \ + 'touch:touch a ' \ + 'touch_nocreate:touch a but do not create it' \ + 'create_symlink:create a symbolic link new -> old' \ + 'create_hardlink:create a hard link new -> old' \ + 'true:do nothing with an exit code of 0' \ + 'false:do nothing with an exit code of 1' +) +_cmake_command() { + _arguments -C \ + '-E[CMake command mode]:command:(("${_cmake_commands[@]}"))' + +} +local cmake_suggest_build;cmake_suggest_build=( + '--build[build]:build dir:_cmake_suggest_builddirs' +) + +local cmake_suggest_install;cmake_suggest_install=( + '--install[install]:install dir:_cmake_suggest_installdirs' +) + +if [[ "$service" = -value-*CMAKE_GENERATOR* ]]; then + _cmake_generators +elif [ $CURRENT -eq 2 ] ; then + _arguments -C -s \ + - help \ + "$cmake_help_actions[@]" \ + - command \ + '-E[CMake command mode]:command:( )' \ + - build_opts \ + "$cmake_build_options[@]" \ + - build_cmds \ + "$cmake_suggest_build[@]" \ + - install_cmds \ + "$cmake_suggest_install[@]" && return 0 +elif [[ $words[2] = --help* ]] ; then + _cmake_help +elif [[ $words[2] == --build ]] ; then + _cmake_on_build +elif [[ $words[2] == --install ]] ; then + _cmake_on_install +elif [[ $words[2] == -E ]]; then + _cmake_command +else + _arguments "$cmake_build_options[@]" +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_coffee b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_coffee new file mode 100644 index 00000000..10b6b816 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_coffee @@ -0,0 +1,81 @@ +#compdef coffee +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Coffee.js v0.6.11 (http://coffeejs.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mario Fernandez (https://github.com/sirech) +# * Dong Weiming (https://github.com/dongweiming) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 version opts first second third +typeset -A opt_args +version=(${(f)"$(_call_program version $words[1] --version)"}) +version=${${(z)${version[1]}}[3]} +first=$(echo $version|cut -d '.' -f 1) +second=$(echo $version|cut -d '.' -f 2) +third=$(echo $version|cut -d '.' -f 3) +if (( $first < 2 )) && (( $second < 7 )) && (( $third < 3 ));then + opts+=('(-l --lint)'{-l,--lint}'[pipe the compiled JavaScript through JavaScript Lint]' + '(-r --require)'{-r,--require}'[require a library before executing your script]:library') +fi + + +_arguments -C \ + '(- *)'{-h,--help}'[display this help message]' \ + '(- *)'{-v,--version}'[display the version number]' \ + $opts \ + '(-b --bare)'{-b,--bare}'[compile without a top-level function wrapper]' \ + '(-e --eval)'{-e,--eval}'[pass a string from the command line as input]:Inline Script' \ + '(-i --interactive)'{-i,--interactive}'[run an interactive CoffeeScript REPL]' \ + '(-j --join)'{-j,--join}'[concatenate the source CoffeeScript before compiling]:Destination JS file:_files -g "*.js"' \ + '(--nodejs)--nodejs[pass options directly to the "node" binary]' \ + '(-c --compile)'{-c,--compile}'[compile to JavaScript and save as .js files]' \ + '(-o --output)'{-o,--output}'[set the output directory for compiled JavaScript]:Output Directory:_files -/' \ + '(-n -t -p)'{-n,--nodes}'[print out the parse tree that the parser produces]' \ + '(-n -t -p)'{-p,--print}'[print out the compiled JavaScript]' \ + '(-n -t -p)'{-t,--tokens}'[print out the tokens that the lexer/rewriter produce]' \ + '(-s --stdio)'{-s,--stdio}'[listen for and compile scripts over stdio]' \ + '(-w --watch)'{-w,--watch}'[watch scripts for changes and rerun commands]' \ + '*:script or directory:_files' && ret=0 + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_composer b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_composer new file mode 100644 index 00000000..76e12605 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_composer @@ -0,0 +1,76 @@ +#compdef composer +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for composer (https://getcomposer.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Daniel Gomes (me@danielcsgomes.com) +# * Valerii Hiora (https://github.com/vhbit) +# * loranger (https://github.com/loranger) +# +# ------------------------------------------------------------------------------ + +local curcontext=$curcontext state line +declare -A opt_args + +_composer_get_command_list () { + composer --no-ansi | sed "1,/Available commands/d" | awk '/ [a-z]+/ { print $1 }' +} + +_composer_get_required_list () { + composer show -s --no-ansi | sed '1,/requires/d' | awk 'NF > 0 && !/^requires \(dev\)/{ print $1 }' +} + + +_composer () { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments \ + '1: :->command'\ + '*: :->args' + if [ -f composer.json ]; then + case $state in + command) + compadd `_composer_get_command_list` + ;; + *) + compadd `_composer_get_required_list` + ;; + esac + else + compadd create-project init search selfupdate show + fi +} + +compdef _composer composer \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_conan b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_conan new file mode 100644 index 00000000..a9214de7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_conan @@ -0,0 +1,626 @@ +#compdef conan +# ------------------------------------------------------------------------------ +# Copyright (c) 2010-2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for conan 0.28.1 (https://www.conan.io). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_conan() { + + local context state state_descr line + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(- : *)'{-v,--version}'[display version information]' \ + '(-h --help)1: :_conan_commands' \ + '(-h --help)*:: :->command_args' + + case $state in + command_args) + (( $+functions[_conan_${words[1]}_args] )) && _conan_${words[1]}_args + ;; + esac +} + +(( $+functions[_conan_commands] )) || +_conan_commands() { + local consumer_commands creator_commands package_development_commands misc_commands deprecated_commands + consumer_commands=( + 'install:installs the requirements specified in a "conanfile.py" or "conanfile.txt"' + 'config:manages conan configuration information' + 'get:gets a file or list a directory of a given reference or package' + 'info:prints information about a package recipe'\''s dependency graph' + 'search:search package recipes and binaries in the local cache or in a remote server' + ) + creator_commands=( + 'new:creates a new package recipe template with a '\''conanfile.py'\''' + 'create:export, build package and test it with a consumer project' + 'upload:uploads a package recipe and the generated binary packages to a specified remote' + 'export:copies the package recipe (conanfile.py and associated files) to your local cache' + 'export-pkg:exports a recipe & creates a package with given files calling '\''package'\''' + 'test:runs a test-folder/conanfile.py to test an existing package' + ) + package_development_commands=( + 'source:calls your conanfile.py "source()" method to configure the source directory' + 'build:utility command to run your current project "conanfile.py" build() method' + 'package:calls your conanfile.py "package" method for a specific package recipe' + ) + misc_commands=( + 'profile:list profiles in the ".conan/profiles" folder, or show profile details' + 'remote:handles the remote list and the package recipes associated to a remote' + 'user:update your cached user name (and auth token) to avoid it being requested later' + 'imports:execute the "imports" stage of a conanfile.txt or a conanfile.py' + 'copy:copy conan recipes and packages to another user/channel.' + 'remove:remove any package recipe or binary matching a pattern' + 'alias:creates and export an alias recipe' + ) + _describe -t 'consumer-commands' "consumer commands" consumer_commands + _describe -t 'creator-commands' "creator commands" creator_commands + _describe -t 'package-development-commands' "package development commands" package_development_commands + _describe -t 'misc-commands' "misc commands" misc_commands +} + +(( $+functions[_conan_alias_args] )) || +_conan_alias_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1:alias reference:_conan_package_references' \ + '(-h --help)2:target reference:_conan_package_references' +} + +(( $+functions[_conan_build_args] )) || +_conan_build_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + "(-h --help -f --file)"{-f,--file}'[specify conanfile filename]: :_conan_conanfiles' \ + "(-h --help -sf --source-folder)"{-sf,--source-folder}'[local folder containing the sources. Defaulted to the directory of the conanfile. A relative path can also be specified (relative to the current directory)]: :_files -/' \ + "(-h --help -bf --build-folder)"{-bf,--build-folder}'[build folder, working directory of the build process. Defaulted to the current directory. A relative path can also be specified (relative to the current directory)]: :_files -/' \ + "(-h --help -pf --package-folder)"{-pf,--package-folder}'[folder to install the package (when the build system or build() method does it). Defaulted to the '\''{build_folder}/package'\'' folder. A relative path can be specified, relative to the current folder. Also an absolute path is allowed.]: :_files -/' \ + "(-h --help -if --install-folder)"{-if,--install-folder}'[local folder containing the conaninfo.txt and conanbuildinfo.txt files (from a previous conan install execution). Defaulted to --build-folder]: :_files -/' \ + '(-h --help)1: :_conan_conanfiles' +} + +(( $+functions[_conan_config_args] )) || +_conan_config_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_config_commands' \ + '(-h --help)*:: :->command_args' + + case $state in + command_args) + (( $+functions[_conan_config_${words[1]}_args] )) && _conan_config_${words[1]}_args + ;; + esac +} + +(( $+functions[_conan_config_commands] )) || +_conan_config_commands() { + local commands + commands=( + 'rm:rm an existing config element' + 'set:set/add value' + 'get:get the value of existing element' + 'install:install a full configuration from a zip file, local or remote' + ) + _describe -t 'commands' "command" commands +} + +(( $+functions[_conan_config_rm_args] )) || +_conan_config_rm_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_config_keys' +} + +(( $+functions[_conan_config_get_args] )) || +_conan_config_get_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_config_keys' +} + +(( $+functions[_conan_config_set_args] )) || +_conan_config_set_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_config_set_key_values' +} + +(( $+functions[_conan_config_set_key_values] )) || +_conan_config_set_key_values() { + local ret=1 + if compset -P '*='; then + _wanted property-values expl 'config value' _conan_config_values ${IPREFIX%=} && ret=0 + else + _wanted property-names expl 'config key' _conan_config_keys -qS= && ret=0 + fi + return ret +} + +(( $+functions[_conan_config_install_args] )) || +_conan_config_install_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1:config file:_files' +} + +(( $+functions[_conan_copy_args] )) || +_conan_copy_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + "(-h --help --all -p --package)"{-p,--package}'[copy specified package ID]:package reference:_conan_package_references' \ + '(-h --help --all -p --package)--all[copy all packages from the specified package recipe]' \ + '(-h --help --force)--force[override destination packages and the package recipe]' \ + '(-h --help)1: :_conan_package_references' \ + '(-h --help)2: :_conan_user_channels' +} + +(( $+functions[_conan_export_args] )) || +_conan_export_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -p --path)'{-p,--path}'[folder with a conanfile.py (default current directory)]: :_files -/' \ + '(-h --help -k --keep-source)'{-k,--keep-source}'[do not remove the source folder in the local cache]' \ + '(-h --help -f --file)'{-f,--file}'[specify conanfile filename]: :_conan_conanfiles' \ + '(-h --help)1: :_conan_channel_or_package_references' +} + +(( $+functions[_conan_get_args] )) || +_conan_get_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + "(-h --help -p --package)"{-p,--package}'[package ID]: :_conan_package_references' \ + '(-h --help -r --remote)'{-r,--remote}'[get from this specific remote]: :_conan_remotes' \ + '(-h --help -raw --raw)'{-raw,--raw}'[do not decorate the text]' \ + '(-h --help)1: :_conan_package_references' \ + '(-h --help)2:file or directory path:_files' +} + +(( $+functions[_conan_imports_args] )) || +_conan_imports_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -f --file)'{-f,--file}'[use another filename]: :_conan_conanfiles' \ + '(-h --help -imf --import-folder)'{-imf,--import-folder}'[directory to copy the artifacts to. By default it will be the current directory]: :_files -/' \ + '(-h --help -if --install-folder)'{-if,--install-folder}'[local folder containing the conaninfo.txt and conanbuildinfo.txt files (from a previous conan install execution)]: :_files -/' \ + '(-h --help -u --undo)'{-u,--undo}'[undo imports (remove imported files)]' \ + '(-h --help)1: :_conan_directory_or_package_references' +} + +(( $+functions[_conan_info_args] )) || +_conan_info_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -f --file)'{-f,--file}'[specify conanfile filename]: :_conan_conanfiles' \ + '(-h --help -n --only)'{-n,--only}'[filter fields]: :_conan_info_only_values' \ + '(-h --help --paths)--paths[show package paths in local cache]' \ + '(-h --help --package-filter)--package-filter[print information only for packages that match the filtere.g., MyPackage/1.2@user/channel or MyPackage*]: :_conan_package_references' \ + '(-h --help -bo --build_order)'{-bo,--build_order}'[given a modified reference, return an ordered list to build (CI)]' \ + '(-h --help -j --json)'{-j,--json}'[only with --build_order option, return the information in a json]: :_files -g "*.json"' \ + '(-h --help -g --graph)'{-g,--graph}'[creates file with project dependencies graph]: :_files -g "*.(dot|html)"' \ + '(-h --help -u --update)'{-u,--update}'[check updates exist from upstream remotes]' \ + '(-h --help -sc --scope)'{-sc,--scope}'[use the specified scope in the install command]: :_conan_scopes' \ + '(-h --help -pr --profile)'{-pr,--profile}'[apply the specified profile to the install command]: :_conan_profiles' \ + '(-h --help -r --remote)'{-r,--remote}'[look in the specified remote server]: :_conan_remotes' \ + '(-h --help)'{-o,--options}'[options to build the package, overwriting the defaults. e.g., -o with_qt=true]: :_conan_options' \ + '(-h --help)'{-s,--settings}'[settings to build the package, overwriting the defaults. e.g., -s compiler=gcc]: :_conan_settings' \ + '(-h --help)'{-e,--env}'[environment variables that will be set during the package build, -e CXX=/usr/bin/clang++]: :_conan_environment_variables' \ + '(-h --help -b --build)'{-b,--build}'[given a build policy (same install command "build" parameter), return an ordered list of packages that would be built from sources in install command (simulation)]: :_conan_build_policies' \ + '(-h --help)1: :_conan_conanfiles_or_package_references' +} + +(( $+functions[_conan_info_only_values] )) || +_conan_info_only_values() { + local values + values=( + 'id:show only "id"' + 'build_id:show only "build_id"' + 'remote:show only "remote"' + 'url:show only "url"' + 'license:show only "license"' + 'requires:show only "requires"' + 'update:show only "update"' + 'required:show only "required"' + 'date:show only "date"' + 'author:show only "author"' + 'export_folder:use with --paths' + 'build_folder:use with --paths' + 'package_folder:use with --paths' + 'source_folder:use with --paths' + 'None:show only references' + ) + _describe -t 'values' "value" values +} + +(( $+functions[_conan_install_args] )) || +_conan_install_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -f --file)'{-f,--file}'[specify conanfile filename]: :_conan_conanfiles' \ + '(-h --help -g --generator)'{-g,--generator}'[generators to use]: :_conan_generators' \ + '(-h --help --werror)--werror[error instead of warnings for graph inconsistencies]' \ + '(-h --help -if --install-folder)'{-if,--install-folder}'[Use this directory as the directory where to put the generatorfiles, conaninfo/conanbuildinfo.txt etc.]: :_files -/' \ + '(-h --help -m --manifests)'{-m,--manifests}'[install dependencies manifests in folder for later verify]: :_files -/' \ + '(-h --help -mi --manifests-interactive)'{-mi,--manifests-interactive}'[install dependencies manifests in folder for later verify]: :_files -/' \ + '(-h --help -v --verify)'{-v,--verify}'[verify dependencies manifests against stored ones]: :_files -/' \ + '(-h --help --no-imports)--no-imports[install specified packages but avoid running imports]' \ + '(-h --help -u --update)'{-u,--update}'[check updates exist from upstream remotes]' \ + '(-h --help -sc --scope)'{-sc,--scope}'[use the specified scope in the install command]: :_conan_scopes' \ + '(-h --help -pr --profile)'{-pr,--profile}'[apply the specified profile to the install command]: :_conan_profiles' \ + '(-h --help -r --remote)'{-r,--remote}'[look in the specified remote server]: :_conan_remotes' \ + '(-h --help)'{-o,--options}'[options to build the package, overwriting the defaults. e.g., -o with_qt=true]: :_conan_options' \ + '(-h --help)'{-s,--settings}'[settings to build the package, overwriting the defaults. e.g., -s compiler=gcc]: :_conan_settings' \ + '(-h --help)'{-e,--env}'[environment variables that will be set during the package build, -e CXX=/usr/bin/clang++]: :_conan_environment_variables' \ + '(-h --help -b --build)'{-b,--build}'[given a build policy (same install command "build" parameter), return an ordered list of packages that would be built from sources in install command (simulation)]: :_conan_build_policies' \ + '(-h --help)1: :_conan_conanfiles' +} + +(( $+functions[_conan_new_args] )) || +_conan_new_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help -t --test)'{-t,--test}'[create test_package skeleton to test package]' \ + '(-h --help -i --header)'{-i,--header}'[create a headers only package template]' \ + '(-h --help -c --pure_c)'{-c,--pure_c}'[create a C language package only package, deleting "self.settings.compiler.libcxx" setting in the configure method]' \ + '(-h --help -s --sources)'{-s,--sources}'[create a package with embedded sources in "src" folder, using "exports_sources" instead of retrieving external code with the "source()" method]' \ + '(-h --help -b --bare)'{-b,--bare}'[create the minimum package recipe, without build() or package() methods. Useful in combination with "package_files" command]' \ + '(-h --help -cis --ci_shared)'{-cis,--ci_shared}'[package will have a "shared" option to be used in CI]' \ + '(-h --help -cilg --ci_travis_gcc)'{-cilg,--ci_travis_gcc}'[generate travis-ci files for linux gcc]' \ + '(-h --help -cilc --ci_travis_clang)'{-cilc,--ci_travis_clang}'[generate travis-ci files for linux clang]' \ + '(-h --help -cilg --ci_travis_gcc)'{-cilg,--ci_travis_gcc}'[generate travis-ci files for linux gcc]' \ + '(-h --help -cio --ci_travis_osx)'{-cio,--ci_travis_osx}'[generate travis-ci files for OSX apple-clang]' \ + '(-h --help -ciw --ci_appveyor_win)'{-ciw,--ci_appveyor_win}'[generate appveyor files for Appveyor Visual Studio]' \ + '(-h --help -ciglg --ci_gitlab_gcc)'{-ciglg,--ci_gitlab_gcc}'[generate GitLab files for linux gcc]' \ + '(-h --help -ciglc --ci_gitlab_clang)'{-ciglc,--ci_gitlab_clang}'[generate GitLab files for linux clang]' \ + '(-h --help -cilg --ci_travis_gcc)'{-cilg,--ci_travis_gcc}'[generate travis-ci files for linux gcc]' \ + '(-h --help -gi --gitignore)'{-gi,--gitignore}'[generate a .gitignore with the known patterns to excluded]' \ + '(-h --help -ciu --ci_upload_url)'{-ciu,--ci_upload_url}'[define URL of the repository to upload]: :_urls' \ + '(-h --help)1: :_conan_package_references' +} + +(( $+functions[_conan_package_args] )) || +_conan_package_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + "(-h --help -sf --source-folder)"{-sf,--source-folder}'[local folder containing the sources. Defaulted to the directory of the conanfile. A relative path can also be specified (relative to the current directory)]: :_files -/' \ + "(-h --help -bf --build-folder)"{-bf,--build-folder}'[build folder, working directory of the build process. Defaulted to the current directory. A relative path can also be specified (relative to the current directory)]: :_files -/' \ + "(-h --help -pf --package-folder)"{-pf,--package-folder}'[folder to install the package (when the build system or build() method does it). Defaulted to the '\''{build_folder}/package'\'' folder. A relative path can be specified, relative to the current folder. Also an absolute path is allowed.]: :_files -/' \ + "(-h --help -if --install-folder)"{-if,--install-folder}'[local folder containing the conaninfo.txt and conanbuildinfo.txt files (from a previous conan install execution). Defaulted to --build-folder]: :_files -/' \ + '(-h --help)1: :_conan_package_references' \ + '(-h --help)2:package ID:' +} + +(( $+functions[_conan_profile_args] )) || +_conan_profile_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_profile_commands' \ + '(-h --help)*:: :->command_args' + + case $state in + command_args) + (( $+functions[_conan_profile_${words[1]}_args] )) && _conan_profile_${words[1]}_args + ;; + esac +} + +(( $+functions[_conan_profile_commands] )) || +_conan_profile_commands() { + local commands + commands=( + 'list:list current profiles' + 'show:show the values defined for a profile' + 'new:creates a new empty profile' + 'update:update a profile' + 'get:get a profile key' + 'remove:remove a profile key' + ) + _describe -t 'commands' "command" commands +} + +(( $+functions[_conan_profile_list_args] )) || +_conan_profile_list_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +(( $+functions[_conan_profile_show_args] )) || +_conan_profile_show_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_profiles' +} + +(( $+functions[_conan_profile_new_args] )) || +_conan_profile_new_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)--detect[autodetect settings and fill \[settings\] section]' \ + '(-h --help)1:profile name:' +} + +(( $+functions[_conan_profile_update_args] )) || +_conan_profile_update_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_settings' \ + '(-h --help)2: :_conan_profiles' +} + +(( $+functions[_conan_profile_get_args] )) || +_conan_profile_get_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_setting_keys' \ + '(-h --help)2: :_conan_profiles' +} + +(( $+functions[_conan_profile_remove_args] )) || +_conan_profile_remove_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_setting_keys' \ + '(-h --help)2: :_conan_profiles' +} + +(( $+functions[_conan_remote_args] )) || +_conan_remote_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_remote_commands' \ + '(-h --help)*:: :->command_args' + + case $state in + command_args) + (( $+functions[_conan_remote_${words[1]}_args] )) && _conan_remote_${words[1]}_args + ;; + esac +} + +(( $+functions[_conan_remote_commands] )) || +_conan_remote_commands() { + local commands + commands=( + 'list:list current remotes' + 'add:add a remote' + 'remove:remove a remote' + 'update:update the remote url' + 'list_ref:list the package recipes and its associated remotes' + 'add_ref:associate a recipe'\''s reference to a remote' + 'remove_ref:dissociate a recipe'\''s reference and its remote' + 'update_ref:update the remote associated with a package recipe' + ) + _describe -t 'commands' "command" commands +} + +(( $+functions[_conan_remote_list_args] )) || +_conan_remote_list_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +(( $+functions[_conan_remote_add_args] )) || +_conan_remote_add_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1:name of the remote:' \ + '(-h --help)2:url of the remote:_urls' \ + '(-h --help)3:verify SSL certificated:(True False)' +} + +(( $+functions[_conan_remote_remove_args] )) || +_conan_remote_remove_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_remotes' +} + +(( $+functions[_conan_remote_update_args] )) || +_conan_remote_update_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-h --help)1: :_conan_remotes' \ + '(-h --help)2:url of the remote:_urls' \ + '(-h --help)3:verify SSL certificated:(True False)' +} + +(( $+functions[_conan_remote_list_ref_args] )) || +_conan_remote_list_ref_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +# TODO complete conan remote add_ref +# TODO complete conan remote remove_ref +# TODO complete conan remote update_ref +# TODO complete conan remove +# TODO complete conan search +# TODO complete conan source +# TODO complete conan upload +# TODO complete conan user +# TODO complete conan export-pkg +# TODO complete conan test + + +(( $+functions[_conan_conanfiles] )) || +_conan_conanfiles() { + _files -g '*.py' +} + +(( $+functions[_conan_directory_or_package_references] )) || +_conan_conanfiles_or_package_references() { + _alternative \ + 'conanfile: :_conan_conanfiles' \ + 'package-references: :_conan_package_references' +} + +(( $+functions[_conan_directory_or_package_references] )) || +_conan_directory_or_package_references() { + _alternative \ + 'directory: :_files -/' \ + 'package-references: :_conan_package_references' +} + +(( $+functions[_conan_channel_or_package_references] )) || +_conan_channel_or_package_references() { + _alternative \ + 'package-references: :_conan_package_references' \ + 'user-channels: :_conan_user_channels' +} + +(( $+functions[_conan_package_references] )) || +_conan_package_references() { + _guard '[^\-]#' 'package reference' # TODO complete package references +} + +(( $+functions[_conan_user_channels] )) || +_conan_user_channels() { + _guard '[^\-]#' 'user channel' # TODO complete user channels +} + +(( $+functions[_conan_remotes] )) || +_conan_remotes() { + local remotes; remotes=(${(f)"$(_call_program remotes $service remote list)"}) + _describe -t remotes 'remote' remotes "$@" +} + +(( $+functions[_conan_scopes] )) || +_conan_scopes() { + _guard '[^\-]#' 'scope' # TODO complete scopes +} + +(( $+functions[_conan_build_policies] )) || +_conan_build_policies() { + _guard '[^\-]#' 'build policy' # TODO complete build policies +} + +(( $+functions[_conan_generators] )) || +_conan_generators() { + _guard '[^\-]#' 'generator' # TODO complete generators +} + +(( $+functions[_conan_profiles] )) || +_conan_profiles() { + local profiles; profiles=(${(f)"$(_call_program profiles $service profile list)"}) + _describe -t profiles 'profile' profiles "$@" +} + +(( $+functions[_conan_config_keys] )) || +_conan_config_keys() { + _guard '[^\-]#' 'config key' # TODO complete config keys +} + +(( $+functions[_conan_config_values] )) || +_conan_config_values() { + _guard '[^\-]#' 'config value' # TODO complete config values +} + +(( $+functions[_conan_options] )) || +_conan_options() { + local ret=1 + if compset -P '*='; then + _wanted option-values expl 'option value' _conan_option_values ${IPREFIX%=} && ret=0 + else + _wanted option-names expl 'option key' _conan_option_keys -qS= && ret=0 + fi + return ret +} + +(( $+functions[_conan_option_keys] )) || +_conan_option_keys() { + _guard '[^\-]#' 'option key' # TODO complete option keys +} + +(( $+functions[_conan_option_values] )) || +_conan_option_values() { + _guard '[^\-]#' 'option value' # TODO complete option values +} + +(( $+functions[_conan_settings] )) || +_conan_settings() { + local ret=1 + if compset -P '*='; then + _wanted setting-values expl 'setting value' _conan_setting_values ${IPREFIX%=} && ret=0 + else + _wanted setting-names expl 'setting key' _conan_setting_keys -qS= && ret=0 + fi + return ret +} + +(( $+functions[_conan_setting_keys] )) || +_conan_setting_keys() { + _guard '[^\-]#' 'setting key' # TODO complete setting keys +} + +(( $+functions[_conan_setting_values] )) || +_conan_setting_values() { + _guard '[^\-]#' 'setting value' # TODO complete setting values +} + +(( $+functions[_conan_environment_variables] )) || +_conan_environment_variables() { + local ret=1 + if compset -P '*='; then + _wanted environment_variable-values expl 'environment variable value' _conan_environment_variable_values ${IPREFIX%=} && ret=0 + else + _wanted environment_variable-names expl 'environment variable' _conan_environment_variable_keys -qS= && ret=0 + fi + return ret +} + +(( $+functions[_conan_environment_variable_keys] )) || +_conan_environment_variable_keys() { + _parameters -g "*export*" +} + +(( $+functions[_conan_environment_variable_values] )) || +_conan_environment_variable_values() { + _guard '[^\-]#' 'environment variable value' # TODO complete environment variable values +} + + +_conan "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_concourse b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_concourse new file mode 100644 index 00000000..36353447 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_concourse @@ -0,0 +1,1517 @@ +#compdef concourse fly +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for concourse 5.2.0 (https://concourse-ci.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + +local _concourse_fly_target \ + _concourse_fly_pipeline \ + _concourse_fly_pipeline_config \ + _concourse_fly_job \ + _concourse_fly_resource \ + _concourse_fly_resource_type + +(( $+functions[_concourse_fly] )) || +_concourse_fly() { + + local context state state_descr line ret=1 + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(- : *)'{-v,--version}'[print the version of Fly and exit]' \ + {-t,--target=}'[concourse target name]: :_concourse_fly_targets' \ + --verbose'[print API requests and responses]' \ + --print-table-headers'[print table headers even for redirected output]' \ + '(-): :->command' \ + '(-)*:: :->arguments' \ + && ret=0 + + case $state in + (command) + _concourse_fly_commands + ;; + (arguments) + curcontext=${curcontext%:*:*}:concourse-fly-$words[1]: + if (( $+functions[_concourse_fly_${words[1]}_args] )); then + _concourse_fly_target=${(v)opt_args[(i)-t|--target]} + _concourse_fly_${words[1]}_args && ret=0 + else + _message "unknown command ${words[1]}" && ret=1 + fi + ;; + esac + + return ret +} + +(( $+functions[_concourse_fly_commands] )) || +_concourse_fly_commands() { + local commands=( + {ab,abort-build}":abort a build" + {bs,builds}":list builds data" + {cr,check-resource}":check a resource" + {crt,check-resource-type}":check a resource-type" + {cl,checklist}":print a Checkfile of the given pipeline" + {ctc,clear-task-cache}":clears cache from a task container" + {cs,containers}":print the active containers" + {c,curl}":curl the api" + {dtg,delete-target}":delete target" + {dp,destroy-pipeline}":destroy a pipeline" + {dt,destroy-team}":destroy a team and delete all of its data" + {etg,edit-target}":edit a target" + {e,execute}":execute a one-off build using local bits" + {ep,expose-pipeline}":make a pipeline publicly viewable" + {fp,format-pipeline}":format a pipeline config" + {gp,get-pipeline}":get a pipeline's current configuration" + {gt,get-team}":show team configuration" + "help:print help message" + {hp,hide-pipeline}":hide a pipeline from the public" + {i,intercept,hijack}":execute a command in a container" + {js,jobs}":list the jobs in the pipelines" + {lw,land-worker}":land a worker" + {l,login}":authenticate with the target" + {o,logout}":release authentication with the target" + {op,order-pipelines}":orders pipelines" + {pj,pause-job}":pause a job" + {pp,pause-pipeline}":pause a pipeline" + {ps,pipelines}":list the configured pipelines" + {pw,prune-worker}":prune a stalled, landing, landed, or retiring worker" + {rp,rename-pipeline}":rename a pipeline" + {rt,rename-team}":rename a team" + {rvs,resource-versions}":list the versions of a resource" + {rs,resources}":list the resources in the pipeline" + {sp,set-pipeline}":create or update a pipeline's configuration" + {st,set-team}":create or modify a team to have the given credentials" + "status:login status" + {s,sync}":download and replace the current fly from the target" + {ts,targets}":list saved targets" + {t,teams}":list the configured teams" + {tj,trigger-job}":start a job in a pipeline" + {uj,unpause-job}":unpause a job" + {up,unpause-pipeline}":un-pause a pipeline" + "userinfo:user information" + {vp,validate-pipeline}":validate a pipeline config" + {vs,volumes}":list the active volumes" + {w,watch}":stream a build's output" + {ws,workers}":list the registered workers" + ) + _describe -t commands commands commands +} + +(( $+functions[_concourse_fly_ab_args] )) || +_concourse_fly_ab_args() { + _concourse_fly_abort-build_args +} + +(( $+functions[_concourse_fly_bs_args] )) || +_concourse_fly_bs_args() { + _concourse_fly_builds_args +} + +(( $+functions[_concourse_fly_cl_args] )) || +_concourse_fly_cl_args() { + _concourse_fly_checklist_args +} + +(( $+functions[_concourse_fly_cr_args] )) || +_concourse_fly_cr_args() { + _concourse_fly_check-resource_args +} + +(( $+functions[_concourse_fly_crt_args] )) || +_concourse_fly_crt_args() { + _concourse_fly_check-resource-type_args +} + +(( $+functions[_concourse_fly_ctc_args] )) || +_concourse_fly_ctc_args() { + _concourse_fly_clear-task-cache_args +} + +(( $+functions[_concourse_fly_cs_args] )) || +_concourse_fly_cs_args() { + _concourse_fly_containers_args +} + +(( $+functions[_concourse_fly_c_args] )) || +_concourse_fly_c_args() { + _concourse_fly_curl_args +} + +(( $+functions[_concourse_fly_dtg_args] )) || +_concourse_fly_dtg_args() { + _concourse_fly_delete-target_args +} + +(( $+functions[_concourse_fly_dp_args] )) || +_concourse_fly_dp_args() { + _concourse_fly_destroy-pipeline_args +} + +(( $+functions[_concourse_fly_dt_args] )) || +_concourse_fly_dt_args() { + _concourse_fly_destroy-team_args +} + +(( $+functions[_concourse_fly_etg_args] )) || +_concourse_fly_etg_args() { + _concourse_fly_edit-target_args +} + +(( $+functions[_concourse_fly_e_args] )) || +_concourse_fly_e_args() { + _concourse_fly_execute_args +} + +(( $+functions[_concourse_fly_ep_args] )) || +_concourse_fly_ep_args() { + _concourse_fly_expose-pipeline_args +} + +(( $+functions[_concourse_fly_fp_args] )) || +_concourse_fly_fp_args() { + _concourse_fly_format-pipeline_args +} + +(( $+functions[_concourse_fly_gp_args] )) || +_concourse_fly_gp_args() { + _concourse_fly_get-pipeline_args +} + +(( $+functions[_concourse_fly_gt_args] )) || +_concourse_fly_gt_args() { + _concourse_fly_get-team_args +} + +(( $+functions[_concourse_fly_hp_args] )) || +_concourse_fly_hp_args() { + _concourse_fly_hide-pipeline_args +} + +(( $+functions[_concourse_fly_hijack_args] )) || +_concourse_fly_hijack_args() { + _concourse_fly_intercept_args +} + +(( $+functions[_concourse_fly_i_args] )) || +_concourse_fly_i_args() { + _concourse_fly_intercept_args +} + +(( $+functions[_concourse_fly_js_args] )) || +_concourse_fly_js_args() { + _concourse_fly_jobs_args +} + +(( $+functions[_concourse_fly_lw_args] )) || +_concourse_fly_lw_args() { + _concourse_fly_land-worker_args +} + +(( $+functions[_concourse_fly_l_args] )) || +_concourse_fly_l_args() { + _concourse_fly_login_args +} + +(( $+functions[_concourse_fly_o_args] )) || +_concourse_fly_o_args() { + _concourse_fly_logout_args +} + +(( $+functions[_concourse_fly_op_args] )) || +_concourse_fly_op_args() { + _concourse_fly_order-pipelines_args +} + +(( $+functions[_concourse_fly_pj_args] )) || +_concourse_fly_pj_args() { + _concourse_fly_pause-job_args +} + +(( $+functions[_concourse_fly_pp_args] )) || +_concourse_fly_pp_args() { + _concourse_fly_pause-pipeline_args +} + +(( $+functions[_concourse_fly_ps_args] )) || +_concourse_fly_ps_args() { + _concourse_fly_pipelines_args +} + +(( $+functions[_concourse_fly_pw_args] )) || +_concourse_fly_pw_args() { + _concourse_fly_prune-worker_args +} + +(( $+functions[_concourse_fly_rp_args] )) || +_concourse_fly_rp_args() { + _concourse_fly_rename-pipeline_args +} + +(( $+functions[_concourse_fly_rt_args] )) || +_concourse_fly_rt_args() { + _concourse_fly_rename-team_args +} + +(( $+functions[_concourse_fly_rs_args] )) || +_concourse_fly_rs_args() { + _concourse_fly_resources_args +} + +(( $+functions[_concourse_fly_rvs_args] )) || +_concourse_fly_rvs_args() { + _concourse_fly_resource-versions_args +} + +(( $+functions[_concourse_fly_sp_args] )) || +_concourse_fly_sp_args() { + _concourse_fly_set-pipeline_args +} + +(( $+functions[_concourse_fly_st_args] )) || +_concourse_fly_st_args() { + _concourse_fly_set-team_args +} + +(( $+functions[_concourse_fly_s_args] )) || +_concourse_fly_s_args() { + _concourse_fly_sync_args +} + +(( $+functions[_concourse_fly_ts_args] )) || +_concourse_fly_ts_args() { + _concourse_fly_targets_args +} + +(( $+functions[_concourse_fly_t_args] )) || +_concourse_fly_t_args() { + _concourse_fly_teams_args +} + +(( $+functions[_concourse_fly_tj_args] )) || +_concourse_fly_tj_args() { + _concourse_fly_trigger-job_args +} + +(( $+functions[_concourse_fly_uj_args] )) || +_concourse_fly_uj_args() { + _concourse_fly_unpause-job_args +} + +(( $+functions[_concourse_fly_up_args] )) || +_concourse_fly_up_args() { + _concourse_fly_unpause-pipeline_args +} + +(( $+functions[_concourse_fly_vp_args] )) || +_concourse_fly_vp_args() { + _concourse_fly_validate-pipeline_args +} + +(( $+functions[_concourse_fly_vs_args] )) || +_concourse_fly_vs_args() { + _concourse_fly_volumes_args +} + +(( $+functions[_concourse_fly_w_args] )) || +_concourse_fly_w_args() { + _concourse_fly_watch_args +} + +(( $+functions[_concourse_fly_ws_args] )) || +_concourse_fly_ws_args() { + _concourse_fly_workers_args +} + +(( $+functions[_concourse_fly_help_args] )) || +_concourse_fly_help_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +(( $+functions[_concourse_fly_status_args] )) || +_concourse_fly_status_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +(( $+functions[_concourse_fly_userinfo_args] )) || +_concourse_fly_userinfo_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_abort-build_args] )) || +_concourse_fly_abort-build_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-j --job)'{-j,--job=}'[name of a job to cancel]: :_concourse_fly_pipeline_slash_jobs' \ + '(-b --build)'{-b,--build=}'[job build number to cancel, or build id]: :_concourse_fly_builds' +} + +(( $+functions[_concourse_fly_builds_args] )) || +_concourse_fly_builds_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-a --all-teams)'{-a,--all-teams}'[show builds for the all teams that user has access to]' \ + '(-c --count)'{-c,--count=}'[number of builds you want to limit the return to]: :number' \ + '--current-team[show builds for the currently targeted team]' \ + '(-j --job -p --pipeline)'{-j,--job=}'[name of a job to get builds for]: :_concourse_fly_pipeline_slash_jobs' \ + '--json[print command result as JSON]' \ + '(-j --job -p --pipeline)'{-p,--pipeline=}'[name of a pipeline to get builds for]: :_concourse_fly_pipelines' \ + '--since=[start of the range to filter builds]: :_concourse_fly_dates' \ + '--until=[end of the range to filter builds]: :_concourse_fly_dates' +} + +(( $+functions[_concourse_fly_checklist_args] )) || +_concourse_fly_checklist_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[the pipeline from which to generate the Checkfile]: :_concourse_fly_pipelines' +} + +(( $+functions[_concourse_fly_check-resource_args] )) || +_concourse_fly_check-resource_args() { + + local context state state_descr line ret=1 + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-r --resource)'{-r,--resource=}'[name of a resource to check]: :_concourse_fly_pipeline_slash_resources' \ + '(-f --from)'{-f,--from=}'[version of the resource to check from]: :->version' \ + && ret=0 + + case $state in + (version) + _concourse_fly_resource=${(v)opt_args[(i)-r|--resource]} + _concourse_fly_pipeline_resource_versions && ret=0 + ;; + esac + + return ret +} + +(( $+functions[_concourse_fly_check-resource-type_args] )) || +_concourse_fly_check-resource-type_args() { + + local context state state_descr line ret=1 + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-r --resource-type)'{-r,--resource-type=}'[name of a resource type to check]: :_concourse_fly_pipeline_slash_resource_types' \ + '(-f --from)'{-f,--from=}'[version of the resource type to check from]: :->version' \ + && ret=0 + + case $state in + (version) + _concourse_fly_resource_type=${(v)opt_args[(i)-r|--resource-type]} + _concourse_fly_pipeline_resource_type_versions && ret=0 + ;; + esac + + return ret +} + +(( $+functions[_concourse_fly_clear-task-cache_args] )) || +_concourse_fly_clear-task-cache_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-j --job)'{-j,--job=}'[name of a job to cancel]: :_concourse_fly_pipeline_slash_jobs' \ + '(-s --step)'{-s,--step=}'[step name to clear cache from]:task step' \ + '(-c --cache-path)'{-c,--cache-path=}'[cache directory to clear out]: :_files -/' \ + '(-n --non-interactive)'{-n,--non-interactive=}'[destroy the task cache(s) without confirmation]' +} + +(( $+functions[_concourse_fly_containers_args] )) || +_concourse_fly_containers_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_curl_args] )) || +_concourse_fly_curl_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '--print-and-exit[print curl command and exit]' +} + +(( $+functions[_concourse_fly_delete-target_args] )) || +_concourse_fly_delete-target_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-a --all)'{-a,--all}'[delete all targets]' +} + +(( $+functions[_concourse_fly_destroy-pipeline_args] )) || +_concourse_fly_destroy-pipeline_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[the pipeline to destroy]: :_concourse_fly_pipelines' \ + '(-n --non-interactive)'{-n,--non-interactive}'[destroy the pipeline without confirmation]' +} + +(( $+functions[_concourse_fly_destroy-team_args] )) || +_concourse_fly_destroy-team_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-n --team-name)'{-n,--team-name=}'[the team to delete]: :_concourse_fly_teams' \ + '(-n --non-interactive)'{-n,--non-interactive}'[force apply configuration]' +} + +(( $+functions[_concourse_fly_edit-target_args] )) || +_concourse_fly_edit-target_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '--target-name=[update target name]: :_concourse_fly_targets' \ + '(-u --concourse-url)'{-u,--concourse-url=}'[update concourse URL]: :_urls' \ + '(-n --team-name)'{-n,--team-name=}'[update concourse URL]: :_concourse_fly_teams' +} + +(( $+functions[_concourse_fly_execute_args] )) || +_concourse_fly_execute_args() { + + local context state state_descr line ret=1 + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-c --config)'{-c,--config=}'[the task config to execute]: :_concourse_config_files' \ + '(-p --privileged)'{-p,--privileged}'[run the task with full privileges]' \ + '--include-ignored[disregard .gitignore entries and uploads everything]' \ + '*'{-i,--input=}'[an input to provide to the task]: :->input' \ + '*'{-m,--input-mapping=}'[map a resource to a different name as task input]: :->input-mapping' \ + '(-j --inputs-from)'{-j,--inputs-from=}'[a job to base the inputs on]: :_concourse_fly_pipeline_slash_jobs' \ + '*'{-o,--output=}'[an output to fetch from the task]: :->output' \ + '--image=[image resource for the one-off build]: :_concourse_fly_images' \ + '*--tag=[a tag for a specific environment]: :_concourse_fly_tags' \ + '*'{-v,--var=}'[specify a string value to set for a variable in the pipeline]: :->var' \ + '*'{-y,--yaml-var=}'[specify a YAML value to set for a variable in the pipeline]: :->var' \ + '(-l --load-vars-from)'{-l,--load-vars-from=}'[variable flag that can be used for filling in template values in configuration from a YAML file]: :_files' \ + && ret=0 + + _concourse_fly_pipeline_config=${(v)opt_args[(i)-c|--config]} + + case $state in + (input-mapping) + # TODO complete --input-mapping + _message 'input mapping' + ;; + (input) + _concourse_fly_input_equal_paths && ret=0 + ;; + (output) + _concourse_fly_output_equal_paths && ret=0 + ;; + (var) + _concourse_fly_var_equal_values && ret=0 + ;; + esac + + return ret +} + +(( $+functions[_concourse_fly_expose-pipeline_args] )) || +_concourse_fly_expose-pipeline_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[pipeline to expose]: :_concourse_fly_pipelines' +} + +(( $+functions[_concourse_fly_format-pipeline_args] )) || +_concourse_fly_format-pipeline_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-c --config)'{-c,--config=}'[pipeline configuration file]: :_concourse_config_files' \ + '(-w --write)'{-w,--write}'[do not print to stdout, overwrite the file in place]' +} + +(( $+functions[_concourse_fly_get-pipeline_args] )) || +_concourse_fly_get-pipeline_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[get configuration of this pipeline]: :_concourse_fly_pipelines' \ + '(-j --json)'{-j,--json}'[print config as json instead of yaml]' +} + +(( $+functions[_concourse_fly_get-team_args] )) || +_concourse_fly_get-team_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-n --team)'{-n,--team=}'[get configuration of this team]: :_concourse_fly_teams' \ + '(-j --json)'{-j,--json}'[print config as json instead of yaml]' +} + +(( $+functions[_concourse_fly_hide-pipeline_args] )) || +_concourse_fly_hide-pipeline_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[pipeline to hide]: :_concourse_fly_pipelines' +} + +(( $+functions[_concourse_fly_intercept_args] )) || +_concourse_fly_intercept_args() { + # TODO complete --handle + # TODO complete --check + # TODO complete --step + # TODO complete --step-type + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-j --job --handle -c --check -u --url)'{-j,--job=}'[name of a job to hijack]: :_concourse_fly_pipeline_slash_jobs' \ + '(-j --job --handle -c --check -u --url)--handle=[handle id of a job to hijack]:job handle' \ + '(-j --job --handle -c --check -u --url)'{-c,--check=}'[name of a resource'\''s checking container to hijack]:name' \ + '(-j --job --handle -c --check -u --url)'{-u,--url=}'[URL for the build, job, or check container to hijack]: :_urls' \ + '(-b --build)'{-b,--build=}'[build number within the job, or global build ID]: :_concourse_fly_builds' \ + '(-s --step)'{-s,--step=}'[name of step to hijack]:step' \ + '--step-type=[type of step to hijack]:step type' \ + '(-a --attempt)'{-a,--attempt=}'[attempt number of step to hijack]: :_values -s, "number" 1 2 3 4 5 6 7 8 9' \ + '(-):command name: _command_names -e' \ + '*::arguments:_normal' +} + +(( $+functions[_concourse_fly_jobs_args] )) || +_concourse_fly_jobs_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[get jobs in this pipeline]: :_concourse_fly_pipelines' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_land-worker_args] )) || +_concourse_fly_land-worker_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-w --worker)'{-w,--worker=}'[worker to land]: :_concourse_fly_workers' +} + +(( $+functions[_concourse_fly_login_args] )) || +_concourse_fly_login_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-c --concourse-url)'{-c,--concourse-url=}'[concourse URL to authenticate with]: :_urls' \ + '(-k --insecure)'{-k,--insecure}'[skip verification of the endpoint'\''s SSL certificate]' \ + '(-u --username)'{-u,--username=}'[username for basic auth]: :_users' \ + '(-p --password)'{-p,--password=}'[password for basic auth]:password' \ + '(-n --team-name)'{-n,--team-name=}'[team to authenticate with]: :_concourse_fly_teams' \ + '--ca-cert=[path to Concourse PEM-encoded CA certificate file]: :_files -g "*.pem"' \ + '(-b --open-browser)'{-b,--open-browser}'[open browser to the auth endpoint]' +} + +(( $+functions[_concourse_fly_logout_args] )) || +_concourse_fly_logout_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-a --all)'{-a,--all}'[logout of all targets]' +} + +(( $+functions[_concourse_fly_order-pipelines_args] )) || +_concourse_fly_order-pipelines_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[name of pipeline to order]: :_concourse_fly_pipelines' +} + +(( $+functions[_concourse_fly_pause-job_args] )) || +_concourse_fly_pause-job_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-j --job)'{-j,--job=}'[name of a job to pause]: :_concourse_fly_pipeline_slash_jobs' +} + +(( $+functions[_concourse_fly_pause-pipeline_args] )) || +_concourse_fly_pause-pipeline_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[pipeline to pause]: :_concourse_fly_pipelines' +} + +(( $+functions[_concourse_fly_pipelines_args] )) || +_concourse_fly_pipelines_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-a --all)'{-a,--all}'[show all pipelines]' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_prune-worker_args] )) || +_concourse_fly_prune-worker_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-w --worker)'{-w,--worker=}'[worker to prune]: :_concourse_fly_workers' \ + '(-a --all-stalled)'{-a,--all-stalled}'[prune all stalled workers]' +} + +(( $+functions[_concourse_fly_rename-pipeline_args] )) || +_concourse_fly_rename-pipeline_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-o --old-name)'{-o,--old-name=}'[pipeline to rename]: :_concourse_fly_pipelines' \ + '(-n --new-name)'{-n,--new-name=}'[name to set as pipeline name]: :_concourse_fly_pipelines' +} + +(( $+functions[_concourse_fly_rename-team_args] )) || +_concourse_fly_rename-team_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-o --old-name)'{-o,--old-name=}'[current team name]: :_concourse_fly_teams' \ + '(-n --new-name)'{-n,--new-name=}'[new team name]: :_concourse_fly_teams' +} + +(( $+functions[_concourse_fly_resources_args] )) || +_concourse_fly_resources_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[get resources in this pipeline]: :_concourse_fly_pipelines' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_resource-versions_args] )) || +_concourse_fly_resource-versions_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-c --count)'{-c,--count=}'[number of builds you want to limit the return to]:number' \ + '(-r --resource)'{-r,--resource=}'[name of a resource to get versions for]: :_concourse_fly_pipeline_slash_resources' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_set-pipeline_args] )) || +_concourse_fly_set-pipeline_args() { + + local context state state_descr line ret=1 + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-n --non-interactive)'{-n,--non-interactive}'[skips interactions, uses default values]' \ + '--no-color[disable color output]' \ + '--check-creds[validate credential variables against credential manager]' \ + '(-p --pipeline)'{-p,--pipeline=}'[pipeline to configure]: :_concourse_fly_pipelines' \ + '(-c --config)'{-c,--config=}'[pipeline configuration file]: :_concourse_config_files' \ + '*'{-v,--var=}'[specify a string value to set for a variable in the pipeline]: :->var' \ + '*'{-y,--yaml-var=}'[specify a YAML value to set for a variable in the pipeline]: :->var' \ + '(-l --load-vars-from)'{-l,--load-vars-from=}'[variable flag that can be used for filling in template values in configuration from a YAML file]: :_files' \ + && ret=0 + + _concourse_fly_pipeline_config=${(v)opt_args[(i)-c|--config]} + + case $state in + (var) + _concourse_fly_var_equal_values && ret=0 + ;; + esac + + return ret +} + +(( $+functions[_concourse_fly_set-team_args] )) || +_concourse_fly_set-team_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-n --team-name)'{-n,--team-name=}'[the team to create or modify]: :_concourse_fly_teams' \ + '--non-interactive[force apply configuration]' \ + '*--local-user=[list of whitelisted local concourse users]: :_users' \ + '(-c --config)'{-c,--config=}'[configuration file for specifying team params]: :_concourse_config_files' \ + '*--bitbucket-cloud-user=[list of whitelisted Bitbucket Cloud users]:user name' \ + '*--bitbucket-cloud-team=[list of whitelisted Bitbucket Cloud teams]:team name' \ + '*--cf-user=[list of whitelisted CloudFoundry users]:user name' \ + '*--cf-org=[list of whitelisted CloudFoundry orgs]:org name' \ + '*--cf-space=[list of whitelisted CloudFoundry spaces]:space name' \ + '*--github-user=[list of whitelisted GitHub users]:user name' \ + '*--github-org=[list of whitelisted GitHub orgs]:org name' \ + '*--github-team=[list of whitelisted GitHub teams]:team name' \ + '*--gitlab-user=[list of whitelisted GitLab users]:user name' \ + '*--gitlab-group=[list of whitelisted GitLab groups]:group name' \ + '*--ldap-user=[list of whitelisted LDAP users]:user name' \ + '*--ldap-group=[list of whitelisted LDAP groups]:group name' \ + '*--oauth-user=[list of whitelisted OAuth2 users]:user name' \ + '*--oauth-group=[list of whitelisted OAuth2 groups]:group name' \ + '*--oidc-user=[list of whitelisted OIDC users]:user name' \ + '*--oidc-group=[list of whitelisted OIDC groups]:group name' +} + +(( $+functions[_concourse_fly_sync_args] )) || +_concourse_fly_sync_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-f --force)'{-f,--force}'[sync even if versions already match]' +} + +(( $+functions[_concourse_fly_targets_args] )) || +_concourse_fly_targets_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' +} + +(( $+functions[_concourse_fly_teams_args] )) || +_concourse_fly_teams_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-d --details)'{-d,--details}'[print authentication configuration]' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_trigger-job_args] )) || +_concourse_fly_trigger-job_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-j --job)'{-j,--job=}'[name of a job to trigger]: :_concourse_fly_pipeline_slash_jobs' \ + '(-w --watch)'{-w,--watch}'[start watching the build output]' +} + +(( $+functions[_concourse_fly_unpause-job_args] )) || +_concourse_fly_unpause-job_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-j --job)'{-j,--job=}'[name of a job to unpause]: :_concourse_fly_pipeline_slash_jobs' +} + +(( $+functions[_concourse_fly_unpause-pipeline_args] )) || +_concourse_fly_unpause-pipeline_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-p --pipeline)'{-p,--pipeline=}'[pipeline to unpause]: :_concourse_fly_pipelines' +} + +(( $+functions[_concourse_fly_validate-pipeline_args] )) || +_concourse_fly_validate-pipeline_args() { + + local context state state_descr line ret=1 + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-c --config)'{-c,--config=}'[pipeline configuration file]: :_concourse_config_files' \ + '(-s --strict)'{-s,--strict}'[fail on warnings]' \ + '(-o --output)'{-o,--output}'[output templated pipeline to stdout]' \ + '*'{-v,--var=}'[specify a string value to set for a variable in the pipeline]: :->var' \ + '*'{-y,--yaml-var=}'[specify a YAML value to set for a variable in the pipeline]: :->var' \ + '(-l --load-vars-from)'{-l,--load-vars-from=}'[variable flag that can be used for filling in template values in configuration from a YAML file]: :_files' \ + && ret=0 + + _concourse_fly_pipeline_config=${(v)opt_args[(i)-c|--config]} + + case $state in + (var) + _concourse_fly_var_equal_values && ret=0 + ;; + esac + + return ret +} + +(( $+functions[_concourse_fly_volumes_args] )) || +_concourse_fly_volumes_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-d --details)'{-d,--details}'[print additional information for each volume]' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_watch_args] )) || +_concourse_fly_watch_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-j --job)'{-j,--job=}'[watches builds of the given job]: :_concourse_fly_pipeline_slash_jobs' \ + '(-b --build)'{-b,--build=}'[watches a specific build]: :_concourse_fly_builds' \ + '(-t --timestamps)'{-t,--timestamps}'[print with local timestamp]' +} + +(( $+functions[_concourse_fly_workers_args] )) || +_concourse_fly_workers_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-d --details)'{-d,--details}'[print additional information for each worker]' \ + '--json[print command result as JSON]' +} + +(( $+functions[_concourse_fly_targets] )) || +_concourse_fly_targets() { + local targets=($(_call_program targets $service targets | awk '{print $1}')) + _describe -t targets 'target' targets $@ || _message 'no target found' +} + +(( $+functions[_concourse_fly_teams] )) || +_concourse_fly_teams() { + if [[ -n ${_concourse_fly_target} ]]; then + local teams=($(_call_program teams $service -t ${_concourse_fly_target} teams | awk '{print $1}')) + _describe -t teams 'team' teams $@ || _message 'no team found' + else + _message 'team' + fi +} + +(( $+functions[_concourse_fly_pipelines] )) || +_concourse_fly_pipelines() { + if [[ -n ${_concourse_fly_target} ]]; then + local pipelines=($(_call_program pipelines $service -t ${_concourse_fly_target} pipelines | awk '{print $1}')) + _describe -t pipelines 'pipeline' pipelines $@ || _message 'no pipeline found' + else + _message 'pipeline' + fi +} + +(( $+functions[_concourse_fly_pipeline_jobs] )) || +_concourse_fly_pipeline_jobs() { + if [[ -n ${_concourse_fly_target} ]] && [[ -n ${_concourse_fly_pipeline} ]]; then + local jobs=($(_call_program jobs $service -t ${_concourse_fly_target} jobs -p ${_concourse_fly_pipeline} 2>&1 | awk '{print $1}')) + _describe -t jobs "${_concourse_fly_pipeline} job" jobs $@ || _message 'no job found' + else + _message 'job' + fi +} + +(( $+functions[_concourse_fly_pipeline_resources] )) || +_concourse_fly_pipeline_resources() { + if [[ -n ${_concourse_fly_target} ]] && [[ -n ${_concourse_fly_pipeline} ]]; then + local resources=($(_call_program resources $service -t ${_concourse_fly_target} resources -p ${_concourse_fly_pipeline} | awk '{print $1}')) + _describe -t resources 'resource' resources $@ || _message 'no resource found' + else + _message 'resource' + fi +} + +(( $+functions[_concourse_fly_pipeline_resource_types] )) || +_concourse_fly_pipeline_resource_types() { + if [[ -n ${_concourse_fly_target} ]] && [[ -n ${_concourse_fly_pipeline} ]]; then + local resource_types=($(_call_program resource-types $service -t ${_concourse_fly_target} resources -p ${_concourse_fly_pipeline} | awk '{print $2}')) + _describe -t resource-types 'resource type' resource_types $@ || _message 'no resource type found' + else + _message 'resource type' + fi +} + +(( $+functions[_concourse_fly_workers] )) || +_concourse_fly_workers() { + if [[ -n ${_concourse_fly_target} ]]; then + local workers=($(_call_program workers $service -t ${_concourse_fly_target} workers | awk '{print $1}')) + _describe -t workers 'worker' workers $@ || _message 'no worker found' + else + _message 'worker' + fi +} + +(( $+functions[_concourse_fly_builds] )) || +_concourse_fly_builds() { + if [[ -n ${_concourse_fly_target} ]]; then + local builds=($(_call_program builds $service -t ${_concourse_fly_target} builds | awk '{print $1}')) + _describe -t builds 'build' builds $@ || _message 'no build found' + else + _message 'build' + fi +} + +(( $+functions[_concourse_fly_pipeline_resource_versions] )) || +_concourse_fly_pipeline_resource_versions() { + if [[ -n ${_concourse_fly_target} ]] && [[ -n ${_concourse_fly_resource} ]]; then + local resource_versions=($(_call_program resource-versions $service -t ${_concourse_fly_target} resource-versions -r ${_concourse_fly_resource} | awk '{print $2}')) + _describe -t resource-versions 'resource version' resource_versions $@ || _message 'no version found' + else + _message 'resource version' + fi +} + +(( $+functions[_concourse_fly_pipeline_config_vars] )) || +_concourse_fly_pipeline_config_vars() { + if [[ -n ${_concourse_fly_pipeline_config} ]]; then + local variables=($(grep -Po '(?<=\(\()[^\)]+' ${_concourse_fly_pipeline_config})) + _describe -t variables 'variables' variables $@ || _message 'no variable found' + else + _message 'variable' + fi +} + +(( $+functions[_concourse_fly_pipeline_config_inputs] )) || +_concourse_fly_pipeline_config_inputs() { + if [[ -n ${_concourse_fly_pipeline_config} ]]; then + if (( $+commands[yq] )); then + local inputs=($(yq -r '.. | .inputs? | arrays | .[].name' ${_concourse_fly_pipeline_config} 2>&1)) + _describe -t inputs 'input' inputs $@ || _message 'no input found' + else + _message 'install yq (https://github.com/kislyuk/yq) to get completion of inputs' + fi + else + _message 'input' + fi +} + +(( $+functions[_concourse_fly_pipeline_config_outputs] )) || +_concourse_fly_pipeline_config_outputs() { + if [[ -n ${_concourse_fly_pipeline_config} ]]; then + if (( $+commands[yq] )); then + local outputs=($(yq -r '.. | .outputs? | arrays | .[].name' ${_concourse_fly_pipeline_config})) + _describe -t outputs 'output' outputs $@ || _message 'no output found' + else + _message 'install yq (https://github.com/kislyuk/yq) to get completion of outputs' + fi + else + _message 'output' + fi +} + +(( $+functions[_concourse_fly_pipeline_resource_type_versions] )) || +_concourse_fly_pipeline_resource_type_versions() { + # seems like there is no command for listing resource type versions... + _message 'resource type version' +} + +(( $+functions[_concourse_fly_tags] )) || +_concourse_fly_tags() { + # seems like there is no command for listing tags... + _message 'tag' +} + +(( $+functions[_concourse_fly_dates] )) || +_concourse_fly_dates() { + # _dates completer does not seem to work on zsh 5.7.1 + _dates -f '%Y-%m-%d %H:%M:%S' +} + +(( $+functions[_concourse_fly_pipeline_slash_jobs] )) || +_concourse_fly_pipeline_slash_jobs() { + local ret=1 + if compset -P '*/'; then + _concourse_fly_pipeline="${${IPREFIX%/}##*=}" + _concourse_fly_pipeline_jobs && ret=0 + else + _concourse_fly_pipelines -qS/ && ret=0 + fi + return ret +} + +(( $+functions[_concourse_fly_pipeline_slash_resources] )) || +_concourse_fly_pipeline_slash_resources() { + local ret=1 + if compset -P '*/'; then + _concourse_fly_pipeline="${${IPREFIX%/}##*=}" + _concourse_fly_pipeline_resources && ret=0 + else + _concourse_fly_pipelines -qS/ && ret=0 + fi + return ret +} + +(( $+functions[_concourse_fly_pipeline_slash_resource_types] )) || +_concourse_fly_pipeline_slash_resource_types() { + local ret=1 + if compset -P '*/'; then + _concourse_fly_pipeline="${${IPREFIX%/}##*=}" + _concourse_fly_pipeline_resource_types && ret=0 + else + _concourse_fly_pipelines -qS/ && ret=0 + fi + return ret +} + +(( $+functions[_concourse_fly_var_equal_values] )) || +_concourse_fly_var_equal_values() { + local ret=1 + if compset -P '*='; then + _message 'value' && ret=0 + else + _concourse_fly_pipeline_config_vars -qS= && ret=0 + fi + return ret +} + +(( $+functions[_concourse_fly_input_equal_paths] )) || +_concourse_fly_input_equal_paths() { + local ret=1 + if compset -P '*='; then + _files && ret=0 + else + _concourse_fly_pipeline_config_inputs -qS= && ret=0 + fi + return ret +} + +(( $+functions[_concourse_fly_output_equal_paths] )) || +_concourse_fly_output_equal_paths() { + local ret=1 + if compset -P '*='; then + _files && ret=0 + else + _concourse_fly_pipeline_config_outputs -qS= && ret=0 + fi + return ret +} + +(( $+functions[_concourse_server] )) || +_concourse_server() { + + local context state state_descr line ret=1 + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(- : *)'{-v,--version}'[print the version of Concourse and exit]' \ + '(-): :->command' \ + '(-)*:: :->arguments' \ + && ret=0 + + case $state in + (command) + _concourse_commands && ret=0 + ;; + (arguments) + curcontext=${curcontext%:*:*}:concourse-$words[1]: + if (( $+functions[_concourse_${words[1]}_args] )); then + _concourse_${words[1]}_args && ret=0 + else + _message "unknown command ${words[1]}" && ret=1 + fi + ;; + esac + + return ret +} + +(( $+functions[_concourse_commands] )) || +_concourse_commands() { + local commands=( + "generate-key:generate RSA key for use with Concourse components" + "land-worker:safely drain a worker's assignments for temporary downtime" + "migrate:run database migrations" + "quickstart:run both 'web' and 'worker' together, auto-wired" + "retire-worker:safely remove a worker from the cluster permanently" + "web:run the web UI and build scheduler" + "worker:run and register a worker" + ) + _describe -t commands commands commands +} + +(( $+functions[_concourse_generate-key_args] )) || +_concourse_generate-key_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(-t --type)'{-t,--type=}'[the type of key to generate]:key type:(rsa ssh)' \ + '(-f --filename)'{-f,--filename=}'[file path where the key shall be created. When generating ssh keys, the public key will be stored in a file with the same name but with .pub appended]: :_files' \ + '(-b --bits)'{-b,--bits=}'[the number of bits in the key to create]:integer' +} + +(( $+functions[_concourse_land-worker_args] )) || +_concourse_land-worker_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '--name=[the name of the worker you wish to land]:worker name' \ + '*--tsa-host=[TSA host to forward the worker through]: :_concourse_host_colon_ports' \ + '--tsa-public-key=[file containing a public key to expect from the TSA]: :_files' \ + '--tsa-worker-private-key=[file containing a public key to expect from the TSA]: :_files' +} + +(( $+functions[_concourse_migrate_args] )) || +_concourse_migrate_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(- : *)--current-db-version[print the current database version and exit]' \ + '(- : *)--supported-db-version[print the max supported database version and exit]' \ + '(- : *)--migrate-db-to-version=[migrate to the specified database version and exit]:database version' \ + '--encryption-key=[a 16 or 32 length key used to encrypt sensitive information before storing it in the database]:encryption key' \ + '--postgres-host=[the host to connect to]: :_hosts' \ + '--postgres-port=[the port to connect to]: :_concourse_ports' \ + '--postgres-socket=[path to a UNIX domain socket to connect to]: :_files' \ + '--postgres-user=[the user to sign in as]: :_users' \ + '--postgres-password=[the user'\''s password]:password' \ + '--postgres-sslmode=[whether or not to use SSL]:SSL mode:((disable require verify-ca verify-full))' \ + '--postgres-ca-cert=[CA cert file location, to verify when connecting with SSL]: :_files' \ + '--postgres-client-cert=[client cert file location]: :_files' \ + '--postgres-client-key=[client key file location]: :_files' \ + '--postgres-connect-timeout=[dialing timeout]:duration' \ + '--postgres-database=[the name of the database to use]:database name' +} + +(( $+functions[_concourse_retire-worker_args] )) || +_concourse_retire-worker_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '--name=[the name of the worker you wish to retire]:worker name' \ + '*--tsa-host=[TSA host to forward the worker through]: :_concourse_host_colon_ports' \ + '--tsa-public-key=[file containing a public key to expect from the TSA]: :_files' \ + '--tsa-worker-private-key=[file containing a public key to expect from the TSA]: :_files' +} + +(( $+functions[_concourse_web_args] )) || +_concourse_web_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '--peer-address=[network address of this web node, reachable by other web nodes]: :_concourse_host_colon_ports' \ + '--log-level=[minimum level of logs to see]: :_concourse_log_levels' \ + '--bind-ip=[IP address on which to listen for web traffic]: :_concourse_ip_addresses' \ + '--bind-port=[port on which to listen for HTTP traffic]: :_concourse_ports' \ + '--tls-bind-port=[port on which to listen for HTTPS traffic]: :_concourse_ports' \ + '--tls-cert=[file containing an SSL certificate]: :_files' \ + '--tls-key=[file containing an RSA private key, used to encrypt HTTPS traffic]: :_files' \ + '--external-url=[URL used to reach any ATC from the outside world]: :_urls' \ + '--encryption-key=[a 16 or 32 length key used to encrypt sensitive information before storing it in the database]:encryption key' \ + '--old-encryption-key=[encryption key previously used for encrypting sensitive information]:encryption key' \ + '--debug-bind-ip=[IP address on which to listen for the pprof debugger endpoints]: :_concourse_ip_addresses' \ + '--debug-bind-port=[port on which to listen for the pprof debugger endpoints]: :_concourse_ports' \ + '--intercept-idle-timeout=[length of time for a intercepted session to be idle before terminating]: :_concourse_durations' \ + '--enable-global-resources[enable equivalent resources across pipelines and teams to share a single version history]' \ + '--global-resource-check-timeout=[time limit on checking for new versions of resources]: :_concourse_durations' \ + '--resource-checking-interval=[interval on which to check for new versions of resources]: :_concourse_durations' \ + '--resource-type-checking-interval=[interval on which to check for new versions of resource types]: :_concourse_durations' \ + '--container-placement-strategy=[method by which a worker is selected during container placement]:strategy:((volume-locality random fewest-build-containers))' \ + '--baggageclaim-response-header-timeout=[how long to wait for Baggageclaim to send the response header]: :_concourse_durations' \ + '--cli-artifacts-dir=[directory containing downloadable CLI binaries]: :_files -/' \ + '--log-db-queries[log database queries]' \ + '--build-tracker-interval=[interval on which to run build tracking]: :_concourse_durations' \ + '--default-build-logs-to-retain=[default build logs to retain, 0 means all]:number' \ + '--max-build-logs-to-retain=[maximum build logs to retain, 0 means not specified]:number' \ + '--default-days-to-retain-build-logs=[default days to retain build logs. 0 means unlimited]:number' \ + '--max-days-to-retain-build-logs=[maximum days to retain build logs, 0 means not specified]:number' \ + '--default-task-cpu-limit=[default max number of cpu shares per task, 0 means unlimited]:number' \ + '--default-task-memory-limit=[default maximum memory per task, 0 means unlimited]:number' \ + '--enable-build-auditing[enable auditing for all api requests connected to builds]' \ + '--enable-container-auditing[enable auditing for all api requests connected to containers]' \ + '--enable-job-auditing[enable auditing for all api requests connected to jobs]' \ + '--enable-pipeline-auditing[enable auditing for all api requests connected to pipelines]' \ + '--enable-resource-auditing[enable auditing for all api requests connected to resources]' \ + '--enable-system-auditing[enable auditing for all api requests connected to system transactions]' \ + '--enable-team-auditing[enable auditing for all api requests connected to teams]' \ + '--enable-worker-auditing[enable auditing for all api requests connected to workers]' \ + '--enable-volume-auditing[enable auditing for all api requests connected to volumes]' \ + '--postgres-host=[the host to connect to]: :_hosts' \ + '--postgres-port=[the port to connect to]: :_concourse_ports' \ + '--postgres-socket=[path to a UNIX domain socket to connect to]: :_files' \ + '--postgres-user=[the user to sign in as]: :_users' \ + '--postgres-password=[the user'\''s password]:password' \ + '--postgres-sslmode=[whether or not to use SSL]:SSL mode:((disable require verify-ca verify-full))' \ + '--postgres-ca-cert=[CA cert file location, to verify when connecting with SSL]: :_files' \ + '--postgres-client-cert=[client cert file location]: :_files' \ + '--postgres-client-key=[client key file location]: :_files' \ + '--postgres-connect-timeout=[dialing timeout]: :_concourse_durations' \ + '--postgres-database=[the name of the database to use]:database name' \ + '--secret-retry-attempts=[the number of attempts secret will be retried to be fetched, in case a retriable error happens]:number' \ + '--secret-retry-interval=[the interval between secret retry retrieval attempts]: :_concourse_durations' \ + '--secret-cache-enabled[enable in-memory cache for secrets]' \ + '--secret-cache-duration=[if the cache is enabled, secret values will be cached for not longer than this duration]: :_concourse_durations' \ + '--secret-cache-purge-interval=[if the cache is enabled, expired items will be removed on this internal]: :_concourse_durations' \ + '--credhub-url=[CredHub server address used to access secrets]: :_urls' \ + '--credhub-path-prefix=[path under which to namespace credential lookup]:path' \ + '--credhub-ca-cert=[path to PEM-encoded CA cert files to use to verify the CredHub server SSL cert]: :_files' \ + '--credhub-client-cert=[path to the client certificate for mutual TLS authorization]: :_files' \ + '--credhub-client-key=[path to the client private key for mutual TLS authorization]: :_files' \ + '--credhub-insecure-skip-verify[enable insecure SSL verification]' \ + '--credhub-client-id=[client ID for CredHub authorization]:client ID' \ + '--credhub-client-secret=[client secret for CredHub authorization]:client secret' \ + '--kubernetes-in-cluster[enables the in-cluster client]' \ + '--kubernetes-config-path=[path to Kubernetes config when running ATC outside Kubernetes]: :_files' \ + '--kubernetes-namespace-prefix=[prefix to use for Kubernetes namespaces under which secrets will be looked up]:prefex' \ + '--aws-secretsmanager-access-key=[AWS Access key ID]:access key' \ + '--aws-secretsmanager-secret-key=[AWS Secret Access Key]:secret key' \ + '--aws-secretsmanager-session-token=[AWS Session Token]:session token' \ + '--aws-secretsmanager-region=[AWS region to send requests to]:region' \ + '--aws-secretsmanager-pipeline-secret-template=[AWS Secrets Manager secret identifier template used for pipeline specific parameter]:template' \ + '--aws-secretsmanager-team-secret-template=[AWS Secrets Manager secret identifier template used for team specific parameter]:template' \ + '--aws-ssm-access-key=[AWS Access key ID]:access key' \ + '--aws-ssm-secret-key=[AWS Secret Access Key]:secret key' \ + '--aws-ssm-session-token=[AWS Session Token]:session token' \ + '--aws-ssm-region=[AWS region to send requests to]:region' \ + '--aws-ssm-pipeline-secret-template=[AWS SSM parameter name template used for pipeline specific parameter]:template' \ + '--aws-ssm-team-secret-template=[AWS SSM parameter name template used for team specific parameter]:template' \ + '--vault-url=[vault server address used to access secrets]: :_urls' \ + '--vault-path-prefix=[path under which to namespace credential lookup]:prefix' \ + '--vault-shared-path=[path under which to lookup shared credentials]:path' \ + '--vault-ca-cert=[path to a PEM-encoded CA cert file to use to verify the vault server SSL cert]: :_files' \ + '--vault-ca-path=[path to a directory of PEM-encoded CA cert files to verify the vault server SSL cert]: :_files -/' \ + '--vault-client-cert=[path to the client certificate for Vault authorization]: :_files' \ + '--vault-client-key=[path to the client private key for Vault authorization]: :_files' \ + '--vault-server-name=[if set, is used to set the SNI host when connecting via TLS]:server name' \ + '--vault-insecure-skip-verify[enable insecure SSL verification]' \ + '--vault-client-token=[client token for accessing secrets within the Vault server]:client token' \ + '--vault-auth-backend=[auth backend to use for logging in to Vault]:auth backend' \ + '--vault-auth-backend-max-ttl=[time after which to force a re-login]: :_concourse_durations' \ + '--vault-retry-max=[the maximum time between retries when logging in or re-authing a secret]: :_concourse_durations' \ + '--vault-retry-initial=[the initial time between retries when logging in or re-authing a secret]: :_concourse_durations' \ + '*--vault-auth-param=[parameter to pass when logging in via the backend]: :_concourse_name_colon_values' \ + {-n,--noop}'[don'\''t actually do any automatic scheduling or checking]' \ + '--worker-garden-url=[a Garden API endpoint to register as a worker]: :_urls' \ + '--worker-baggageclaim-url=[a Baggageclaim API endpoint to register with the worker]: :_urls' \ + '*--worker-resource=[a resource type to advertise for the worker]: :_concourse_type_colon_images' \ + '--metrics-host-name=[host string to attach to emitted metrics]: :_hosts' \ + '*--metrics-attribute=[a key-value attribute to attach to emitted metrics]: :_concourse_name_colon_values' \ + '--capture-error-metrics[enable capturing of error log metrics]' \ + '--datadog-agent-host=[datadog agent host to expose dogstatsd metrics]: :_hosts' \ + '--datadog-agent-port=[datadog agent port to expose dogstatsd metrics]: :_concourse_ports' \ + '--datadog-prefix=[prefix for all metrics to easily find them in Datadog]:prefix' \ + '--influxdb-url=[influxDB server address to emit points to]: :_urls' \ + '--influxdb-database=[influxDB database to write points to]:database name' \ + '--influxdb-username=[influxDB server username]: :_users' \ + '--influxdb-password=[influxDB server password]:password' \ + '--influxdb-insecure-skip-verify[skip SSL verification when emitting to InfluxDB]' \ + '--emit-to-logs[emit metrics to logs]' \ + '--newrelic-account-id=[new Relic Account ID]:account ID' \ + '--newrelic-api-key=[new Relic Insights API Key]:API key' \ + '--newrelic-service-prefix=[an optional prefix for emitted New Relic events]:prefix' \ + '--prometheus-bind-ip=[IP to listen on to expose Prometheus metrics]: :_concourse_ip_addresses' \ + '--prometheus-bind-port=[port to listen on to expose Prometheus metrics]: :_concourse_ports' \ + '--riemann-host=[riemann server address to emit metrics to]: :_hosts' \ + '--riemann-port=[port of the Riemann server to emit metrics to]: :_concourse_ports' \ + '--riemann-service-prefix=[an optional prefix for emitted Riemann services]:prefix' \ + '*--riemann-tag=[tag to attach to emitted metrics]:tag' \ + '--x-frame-options=[the value to set for X-Frame-Options]:options' \ + '--cluster-name=[a name for this Concourse cluster, to be displayed on the dashboard page]:name' \ + '--gc-interval=[interval on which to perform garbage collection]: :_concourse_durations' \ + '--gc-one-off-grace-period=[period after which one-off build containers will be garbage-collected]: :_concourse_durations' \ + '--gc-missing-grace-period=[period after which to reap containers and volumes that were created but went missing from the worker]: :_concourse_durations' \ + '--syslog-hostname=[client hostname with which the build logs will be sent to the syslog server]: :_hosts' \ + '--syslog-address=[remote syslog server address with port]: :_concourse_host_colon_ports' \ + '--syslog-transport=[transport protocol for syslog messages]:protocol:((tcp udp tls))' \ + '--syslog-drain-interval=[interval over which checking is done for new build logs to send to syslog server]: :_concourse_durations' \ + '--syslog-ca-cert=[paths to PEM-encoded CA cert files to use to verify the Syslog server SSL cert]: :_files' \ + '--cookie-secure[force sending secure flag on http cookies]' \ + '--auth-duration=[length of time for which tokens are valid]: :_concourse_durations' \ + '--session-signing-key=[file containing an RSA private key, used to sign auth tokens]: :_files' \ + '*--add-local-user=[list of username:password combinations for all your local users]: :_concourse_username_colon_passwords' \ + '*--main-team-local-user=[list of whitelisted local concourse users]: :_users' \ + {-c,--main-team-config=}'[configuration file for specifying team params]: :_concourse_config_files' \ + '*--main-team-bitbucket-cloud-user=[list of whitelisted Bitbucket Cloud users]: :_users' \ + '*--main-team-bitbucket-cloud-team=[list of whitelisted Bitbucket Cloud teams]:team' \ + '*--main-team-cf-user=[list of whitelisted CloudFoundry users]: :_users' \ + '*--main-team-cf-org=[list of whitelisted CloudFoundry orgs]:org name' \ + '*--main-team-cf-space=[list of whitelisted CloudFoundry spaces]:space name' \ + '*--main-team-github-user=[list of whitelisted GitHub users]: :_users' \ + '*--main-team-github-org=[list of whitelisted GitHub orgs]:org name' \ + '*--main-team-github-team=[list of whitelisted GitHub teams]:team name' \ + '*--main-team-gitlab-user=[list of whitelisted GitLab users]: :_users' \ + '*--main-team-gitlab-group=[list of whitelisted GitLab groups]:group name' \ + '*--main-team-ldap-user=[list of whitelisted LDAP users]: :_users' \ + '*--main-team-ldap-group=[list of whitelisted LDAP groups]:group name' \ + '*--main-team-oauth-user=[list of whitelisted OAuth2 users]: :_users' \ + '*--main-team-oauth-group=[list of whitelisted OAuth2 groups]:group name' \ + '*--main-team-oidc-user=[list of whitelisted OIDC users]: :_users' \ + '*--main-team-oidc-group=[list of whitelisted OIDC groups]:group name' \ + '--bitbucket-cloud-client-id=[client id]:client ID' \ + '--bitbucket-cloud-client-secret=[client secret]:client secret' \ + '--cf-client-id=[client id]:client ID' \ + '--cf-client-secret=[client secret]:client secret' \ + '--cf-api-url=[the base API URL of your CF deployment]: :_urls' \ + '--cf-ca-cert=[CA Certificate]: :_files' \ + '--cf-skip-ssl-validation[skip SSL validation]' \ + '--github-client-id=[client id]:client ID' \ + '--github-client-secret=[client secret]:client secret' \ + '--github-host=[hostname of GitHub Enterprise deployment]: :_hosts' \ + '--github-ca-cert=[CA certificate of GitHub Enterprise deployment]: :_files' \ + '--gitlab-client-id=[client id]:client ID' \ + '--gitlab-client-secret=[client secret]:client secret' \ + '--gitlab-host=[hostname of Gitlab Enterprise deployment]: :_hosts' \ + '--ldap-display-name=[the auth provider name displayed to users on the login page]:display name' \ + '--ldap-host=[the host and optional port of the LDAP server]: :_hosts' \ + '--ldap-bind-dn=[bind DN for searching LDAP users and groups]:bind DN' \ + '--ldap-bind-pw=[bind Password for the user specified by bind-dn]:bind password' \ + '--ldap-insecure-no-ssl[required if LDAP host does not use TLS]' \ + '--ldap-insecure-skip-verify[skip certificate verification]' \ + '--ldap-start-tls[start on insecure port, then negotiate TLS]' \ + '--ldap-ca-cert=[CA certificate]: :_files' \ + '--ldap-user-search-base-dn= [baseDN to start the search from]:baseDN' \ + '--ldap-user-search-filter=[optional filter to apply when searching the directory]:filter' \ + '--ldap-user-search-username=[attribute to match against the inputted username]:attribute' \ + '--ldap-user-search-scope=[can either be: '\''sub'\'' - search the whole sub tree or '\''one'\'' - only search one level]:scope:((sub one))' \ + '--ldap-user-search-id-attr=[a mapping of attributes on the user entry to claims]:attribute mapping' \ + '--ldap-user-search-email-attr=[a mapping of attributes on the user entry to claims]:attribute mapping' \ + '--ldap-user-search-name-attr=[a mapping of attributes on the user entry to claims]:attribute mapping' \ + '--ldap-group-search-base-dn=[baseDN to start the search from]:baseDN' \ + '--ldap-group-search-filter=[optional filter to apply when searching the directory]:filter' \ + '--ldap-group-search-scope=[can either be: '\''sub'\'' - search the whole sub tree or '\''one'\'' - only search one level]:scope:((sub one))' \ + '--ldap-group-search-user-attr=[adds an additional requirement to the filter that an attribute in the group match the user'\''s attribute value]:attribute' \ + '--ldap-group-search-group-attr=[adds an additional requirement to the filter that an attribute in the group match the user'\''s attribute value]:attribute' \ + '--ldap-group-search-name-attr=[the attribute of the group that represents its name]:attribute' \ + '--oauth-display-name=[the auth provider name displayed to users on the login page]:display name' \ + '--oauth-client-id=[client id]:client ID' \ + '--oauth-client-secret=[client secret]:client secret' \ + '--oauth-auth-url=[Authorization URL]: :_urls' \ + '--oauth-token-url=[Token URL]: :_urls' \ + '--oauth-userinfo-url=[UserInfo URL]: :_urls' \ + '*--oauth-scope=[any additional scopes that need to be requested during authorization]:scope' \ + '--oauth-groups-key=[the groups key indicates which claim to use to map external groups to Concourse teams]:group key' \ + '--oauth-user-id-key=[the user id key indicates which claim to use to map an external user id to a Concourse user id]:id key' \ + '--oauth-user-name-key=[the user name key indicates which claim to use to map an external user name to a Concourse user name]:name key' \ + '--oauth-ca-cert=[CA Certificate]: :_files' \ + '--oauth-skip-ssl-validation[skip SSL validation]' \ + '--oidc-display-name=[the auth provider name displayed to users on the login page]:display name' \ + '--oidc-issuer=[An OIDC issuer URL that will be used to discover provider configuration]: :_urls' \ + '--oidc-client-id=[client id]:client ID' \ + '--oidc-client-secret=[client secret]:client secret' \ + '*--oidc-scope=[any additional scopes that need to be requested during authorization]:scope' \ + '--oidc-groups-key=[the groups key indicates which claim to use to map external groups to Concourse teams]:group key' \ + '--oidc-user-name-key=[the user name key indicates which claim to use to map an external user name to a Concourse user name]:user name key' \ + '*--oidc-hosted-domains=[list of whitelisted domains when using Google, only users from a listed domain will be allowed to log in]:domain' \ + '--oidc-ca-cert=[CA Certificate]: :_files' \ + '--oidc-skip-ssl-validation[skip SSL validation]' \ + '--tsa-log-level=[minimum level of logs to see]: :_concourse_log_levels' \ + '--tsa-bind-ip=[IP address on which to listen for SSH]: :_concourse_ip_addresses' \ + '--tsa-peer-address=[network address of this web node, reachable by other web nodes]: :_urls' \ + '--tsa-bind-port=[port on which to listen for SSH]: :_concourse_ports' \ + '--tsa-debug-bind-ip=[IP address on which to listen for the pprof debugger endpoints]: :_concourse_ip_addresses' \ + '--tsa-debug-bind-port=[port on which to listen for the pprof debugger endpoints]: :_concourse_ports' \ + '--tsa-host-key=[path to private key to use for the SSH server]: :_files' \ + '--tsa-authorized-keys=[path to file containing keys to authorize, in SSH authorized_keys format]: :_files' \ + '--tsa-team-authorized-keys=[path to file containing keys to authorize, in SSH authorized_keys format]: :_concourse_name_colon_paths' \ + '--tsa-atc-url=[ATC API endpoints to which workers will be registered]: :_urls' \ + '--tsa-session-signing-key=[path to private key to use when signing tokens in requests to the ATC during registration]: :_files' \ + '--tsa-heartbeat-interval=[interval on which to heartbeat workers to the ATC]: :_concourse_durations' \ +} + +(( $+functions[_concourse_worker_args] )) || +_concourse_worker_args() { + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '--name=[the name to set for the worker during registration]:name' \ + '*--tag=[a tag to set during registration]:tag' \ + '--team=[the name of the team that this worker will be assigned to]:team name' \ + '--http-proxy=[HTTP proxy endpoint to use for containers]: :_urls' \ + '--https-proxy=[HTTPS proxy endpoint to use for containers]: :_urls' \ + '*--no-proxy=[blacklist of addresses to skip the proxy when reaching]: :_urls' \ + '--ephemeral[if set, the worker will be immediately removed upon stalling]' \ + '--certs-dir=[directory to use when creating the resource certificates volume]: :_files -/' \ + '--work-dir=[directory in which to place container data]: :_files -/' \ + '--bind-ip=[IP address on which to listen for the Garden server]: :_concourse_ip_addresses' \ + '--bind-port=[port on which to listen for the Garden server]: :_concourse_ports' \ + '--debug-bind-ip=[IP address on which to listen for the pprof debugger endpoints]: :_concourse_ip_addresses' \ + '--debug-bind-port=[port on which to listen for the pprof debugger endpoints]: :_concourse_ports' \ + '--healthcheck-bind-ip=[IP address on which to listen for health checking requests]: :_concourse_ip_addresses' \ + '--healthcheck-bind-port=[port on which to listen for health checking requests]: :_concourse_ports' \ + '--healthcheck-timeout=[HTTP timeout for the full duration of health checking]: :_concourse_durations' \ + '--sweep-interval=[interval on which containers and volumes will be garbage collected from the worker]: :_concourse_durations' \ + '--volume-sweeper-max-in-flight=[maximum number of volumes which can be swept in parallel]:number' \ + '--container-sweeper-max-in-flight=[maximum number of containers which can be swept in parallel]:number' \ + '--rebalance-interval=[duration after which the registration should be swapped to another random SSH gateway]: :_concourse_durations' \ + '--connection-drain-timeout=[duration after which a worker should give up draining forwarded connections on shutdown]: :_concourse_durations' \ + '--external-garden-url=[API endpoint of an externally managed Garden server to use instead of running the embedded Garden server]: :_urls' \ + '--resource-types=[path to directory containing resource types the worker should advertise]: :_files -/' \ + '--log-level=[minimum level of logs to see]: :_concourse_log_levels' \ + '*--tsa-host=[TSA host to forward the worker through]: :_hosts' \ + '--tsa-public-key=[file containing a public key to expect from the TSA]: :_files' \ + '--tsa-worker-private-key=[file containing the private key to use when authenticating to the TSA]: :_files' \ + '--garden-use-houdini[use the insecure Houdini Garden backend]' \ + '--garden-bin=[path to gdn executable (or leave as gdn to find it in $PATH)]: :_files' \ + '--garden-config=[path to a config file to use for Garden]: :_files' \ + '--garden-dns-proxy-enable[enable proxy DNS server]' \ + '--baggageclaim-log-level=[minimum level of logs to see]: :_concourse_log_levels' \ + '--baggageclaim-bind-ip=[IP address on which to listen for API traffic]: :_concourse_ip_addresses' \ + '--baggageclaim-bind-port=[port on which to listen for API traffic]: :_concourse_ports' \ + '--baggageclaim-debug-bind-ip=[IP address on which to listen for the pprof debugger endpoints]: :_concourse_ip_addresses' \ + '--baggageclaim-debug-bind-port=[port on which to listen for the pprof debugger endpoints]: :_concourse_ports' \ + '--baggageclaim-volumes=[directory in which to place volume data]: :_files -/' \ + '--baggageclaim-driver=[driver to use for managing volumes]:driver:((detect naive btrfs overlay))' \ + '--baggageclaim-btrfs-bin=[path to btrfs binary]: :_files' \ + '--baggageclaim-mkfs-bin=[path to mkfs.btrfs binary]: :_files' \ + '--baggageclaim-overlays-dir=[path to directory in which to store overlay data]: :_files -/' \ + '--baggageclaim-disable-user-namespaces[disable remapping of user/group IDs in unprivileged volumes]' +} + +(( $+functions[_concourse_config_files] )) || +_concourse_config_files() { + _files -g "*.(yml|yaml)" +} + +(( $+functions[_concourse_ip_addresses] )) || +_concourse_ip_addresses() { + _message 'IP address' +} + +(( $+functions[_concourse_ports] )) || +_concourse_ports() { + _message 'port number' +} + +(( $+functions[_concourse_host_colon_ports] )) || +_concourse_host_colon_ports() { + local ret=1 + if compset -P '*:'; then + _concourse_ports && ret=0 + else + _alternative \ + 'hosts: :_hosts -qS:' \ + 'ip-addresses: :_guard "[[:digit:]]*" "IP address"' \ + && ret=0 + fi + return ret +} + +(( $+functions[_concourse_type_colon_images] )) || +_concourse_type_colon_images() { + local ret=1 + if compset -P '*:'; then + _message 'type' && ret=0 + else + _message 'image' && ret=0 + fi + return ret +} + +(( $+functions[_concourse_name_colon_values] )) || +_concourse_name_colon_values() { + local ret=1 + if compset -P '*:'; then + _message 'name' && ret=0 + else + _message 'value' && ret=0 + fi + return ret +} + +(( $+functions[_concourse_username_colon_passwords] )) || +_concourse_username_colon_passwords() { + local ret=1 + if compset -P '*:'; then + _message 'username' && ret=0 + else + _message 'password' && ret=0 + fi + return ret +} + +(( $+functions[_concourse_name_colon_paths] )) || +_concourse_name_colon_paths() { + local ret=1 + if compset -P '*:'; then + _message 'name' && ret=0 + else + _files && ret=0 + fi + return ret +} + +(( $+functions[_concourse_durations] )) || +_concourse_durations() { + _message 'duration, eg: "5s", "5m", "5h", "5d"' +} + +(( $+functions[_concourse_log_levels] )) || +_concourse_log_levels() { + local levels=( + 'debug:debug traces' + 'info:normal log level' + 'error:log only errors' + 'fatal:log only fatal errors' + ) + _describe -t log-levels 'log level' levels +} + +case $service in + concourse) _concourse_server "$@" ;; + fly) _concourse_fly "$@" ;; + *) _message "unknown command ${service}" && ret=1 ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_console b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_console new file mode 100644 index 00000000..7e5b4548 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_console @@ -0,0 +1,64 @@ +#compdef console +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for symfony console (https://github.com/symfony/Console). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * loranger (https://github.com/loranger) +# * Yohan Tambè (https://github.com/Cronos87) +# +# ------------------------------------------------------------------------------ + +_find_console () { + echo "php $(find . -maxdepth 2 -mindepth 1 -name 'console' -type f | head -n 1)" +} + +_console_get_command_list () { + IFS=" " + `_find_console` --no-ansi | \ + sed "1,/Available commands/d" | \ + awk '/ [a-z]+/ { print $0 }' | \ + sed -E 's/^[ ]+//g' | \ + sed -E 's/[:]+/\\:/g' | \ + sed -E 's/[ ]{2,}/\:/g' +} + +_console () { + local -a commands + IFS=$'\n' + commands=(`_console_get_command_list`) + _describe 'commands' commands +} + +compdef _console php console +compdef _console console diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cppcheck b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cppcheck new file mode 100644 index 00000000..85063111 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_cppcheck @@ -0,0 +1,115 @@ +#compdef cppcheck +# ------------------------------------------------------------------------------ +# Copyright (c) 2019 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for cppcheck -- a tool for static C/C++ code analysis (http://cppcheck.sourceforge.net) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Georgy Komarov (https://github.com/jubnzv) +# +# ------------------------------------------------------------------------------ +# Notes +# ----- +# +# Created for Cppcheck version 1.90. +# +# ------------------------------------------------------------------------------ + +_cppcheck_files() { + _path_files -/ -g "*.(c|cpp|cxx|h|hpp|C)" +} + +_cppcheck() { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + "--addon=[Execute addon]" \ + "--cppcheck-build-dir=[Analysis output directory]:directory:_files -/" \ + "--check-config[Check cppcheck configuration]" \ + "--check-library[Show information when library files have incomplete info]" \ + "--config-exclude=[Path to be excluded from configuration checking]:directory:_files -/" \ + "--config-exclude-files=[A file that contains a list of config-excludes]:file:_files" \ + "--doc[Print a list of all available checks]" \ + "--dump[Dump xml data for each translation unit]" \ + "-D[Define preprocessor symbol]" \ + "-U[Undefine preprocessor symbol]" \ + "-E[Print preprocessor output on stdout and don't do any further processing]" \ + "--enable[Enable additional checks]:id:(all warning style performance portability information unusedFunction missingInclude)" \ + "--error-exitcode=[Integer to return if errors are found]" \ + "--errorlist[Print a list of all the error messages in XML format]" \ + "--exitcode-suppressions=[Used when certain messages should be displayed but should not cause a non-zero exitcode]:_files" \ + "--file-list=[Specify the files to check in a text file]:_files" \ + {-f,--force}"[Force checking of all configurations in files]" \ + {-h,--help}"[Print this help]" \ + "-I[A file that contains a list of config-excludes]:directory:_files -/" \ + "--include-file=[Specify directory paths to search for included header files in a text file]:file:_files" \ + "--include=[Force inclusion of a file before the checked file]:file:_files" \ + "-i[Give a source file or source file directory to exclude from the check]:directory or file:_files" \ + "--inconclusive[Report even though the analysis is inconclusive]" \ + "--inline-suppr[Enable inline suppressions]" \ + "-j[Number of threads to do the checking simultaneously]" \ + "-l[No new threads should be started if the load average is exceeds this value]" \ + {-x,--language=}"[Forces cppcheck to check all files as the given language]:language:(c c++)" \ + "--cfg=[Load file that contains information about types and functions]" \ + "--max-ctu-depth=[Maximum depth in whole program analysis]" \ + "--output-file=[File to save results]:file:_files" \ + "--project=[Run Cppcheck on project]:file:_files" \ + "--max-configs=[Maximum number of configurations to check in a file]" \ + "--platform=[Set platform specific types and sizes]:platforms:(unix32 unix64 win32A win32W win64 native unspecified)" \ + "--plist-output=[Generate Clang-plist output files in folder]:_files" \ + {-q,--quiet}"[Do not show progress reports]" \ + {-rp,--relative-paths}"[Use relative paths in output]" \ + {-rp,--relative-paths}"=[Use relative paths in output (separated with ;)]:_files" \ + "--report-progress[Report progress messages while checking a file]" \ + "--std=[Set standard]:std:(c89 c99 c11 c++03 c++11 c++14 c++17 c++20)" \ + "--suppress=[Suppress warnings (format: \[error id\]:\[filename\]:\[line\])]" \ + "--suppressions-list=[Suppress warnings listed in the file]:_files" \ + "--template=[Format the error messages]" \ + "--template=[Format the error message location]" \ + {-v,--verbose}"[Output more detailed error information]" \ + "--version[Print out version number]" \ + "--xml[Write results in xml format to stderr]" \ + "--xml-version=[Select the XML file version]" \ + '*: :_cppcheck_files' +} + +_cppcheck "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dad b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dad new file mode 100644 index 00000000..9ceee06b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dad @@ -0,0 +1,68 @@ +#compdef dad +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for dad a command line manager of aria2 daemon. (https://github.com/baskerville/diana). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + +_dad() { + local -a commands + + commands=( + "start:Start aria2c daemon" + "stop:Stop aria2c daemon" + ) + + _arguments -C \ + '(- 1 *)'-h"[Show help and exit]" \ + "-d[Set download dir]:download_dir:->val" \ + "-s[Set secret token]:secret_token:->val" \ + "-u[Set aria2c username]:username:->val" \ + "-p[Set aria2c password]:password:->val" \ + '1:cmd:->cmds' \ + '*: : :->args' \ + + case "$state" in + (cmds) + _describe -t commands 'commands' commands + ;; + (*) + ;; + esac +} + +_dad + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_debuild b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_debuild new file mode 100644 index 00000000..20c676eb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_debuild @@ -0,0 +1,40 @@ +#compdef debuild +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for debuild 2.10. +# +# Status: incomplete. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +# FIXME --noconf is only allowed in first position +_arguments \ + '(- 1 *)'{-h,--help}'[show help]' \ + '(- 1 *)--version[show version and copyright information]' \ + {--no-conf,--noconf}'[don'\''t read devscripts config files]' \ + {-r-,--rootcmd=}'[command used to become root if debuild not setuid root (default: fakeroot)]: :_command_names' \ + '*'{-e-,--preserve-envvar=}'[preserve environment variable]: :_vars' \ + '(-e --preserve-envvar)--preserve-env[preserve all environment vars (except PATH)]' \ + '*'{-e-,--set-envvar=}'[preserve environment variable]: :_vars -qS=' \ + '--prepend-path=[prepend to the sanitised PATH]: :_files -/' \ + '(-D)-d[skip checking of build dependencies]' \ + '(-d)-D[force checking of build dependencies]' \ + '--check-dirname-level[how much to check directory names]:level:((0\:never 1\:only\ if\ program\ changes\ directory\ \(default\) 2\:always))' \ + '--check-dirname-regex[Perl regex defining matching directory names, the string PACKAGE will be replaced by the package name (default: '\''PACKAGE(-.+)?'\'')]:regex' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dget b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dget new file mode 100644 index 00000000..d540121e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dget @@ -0,0 +1,70 @@ +#compdef dget +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for dget +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Kris Shannon +# * Shohei YOSHIDA +# +# ------------------------------------------------------------------------------ + +_dget() { + local context state line expl + local -A opt_args + + _arguments -A "-*" \ + '(--no-conf -h --help)'{-h,--help}'[Show help message]' \ + '(--no-conf -V --version)'{-v,--version}'[Print license, copyright, and version information and exit]' \ + '(--no-conf -b --backup)'{-b,--backup}'[Move files that would be overwritten to ./backup]' \ + '(--no-conf -q --quiet)'{-q,--quiet}'[Suppress wget/curl output]' \ + '(--no-conf -x --extract -d --download-only --build)'{-d,--download-only}'[Do not extract downloaded source]' \ + '(--no-conf -x --extract -d --download-only --build)'{-x,--extract}'[Unpack downloaded source]' \ + '(--no-conf -x --extract -d --download-only --build)--build[Build package with dpkg-buildpackage after download]' \ + '(--no-conf -u --allow-unauthenticated)'{-u,--allow-unauthenticated}'[Make no attempt to verify source package signature]' \ + '(--no-conf)--path[Check this directory in addition to the apt archive]:DIR:_files -/' \ + '(--no-conf --insecure)--insecure[Do not check SSL certificates when downloading]' \ + '(--no-conf --no-cache)--no-cache[Disable server-side HTTP cache]' \ + "(--no-conf)--no-conf[Don't read devscripts config files]" \ + '(-)*:debian package or URL: _alternative "_deb_packages available" "_urls"' +} + +_dget "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dhcpcd b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dhcpcd new file mode 100644 index 00000000..82b821fb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_dhcpcd @@ -0,0 +1,53 @@ +#compdef dhcpcd +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for dhcpcd 2.3.2. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '1:network interface:_net_interfaces' \ + - release \ + '(-k --release)'{-k,--release}'[causes an existing dhcpcd process running on the interface to release it'\''s lease, deconfigure the interface and then exit]' \ + - exit \ + '(-x --exit)'{-x,--exit}'[causes an existing dhcpcd process running on the interface to exit]' \ + - main \ + '(-d --debug)'{-d,--debug}'[echo debug and informational messages to the console]' \ + '(-h --hostname)'{-h,--hostname}'[specify the hostname sent, or an empty string to stop any hostname from being sent]:hostname:_hosts' \ + '(-i --classid)'{-i,--classid}'[override the DHCP vendor classid field we send]:classid' \ + '(-l --leasetime)'{-l,--leasetime}'[request a specific lease time in seconds]:lease time \(seconds\)' \ + '(-m --metric)'{-m,--metric}'[added routes will use the metric on systems where this is supported]:metric' \ + '(-n --renew)'{-n,--renew}'[notifies an existing dhcpcd process running on the interface to renew it'\''s lease]' \ + '(-p --persistent)'{-p,--persistent}'[don'\''t deconfigure the interface and configuration at exit]' \ + '(-r --request)'{-r,--request}'[skip the broadcast request step and just request an address]:address' \ + '(-s --inform)'{-s,--inform}'[behaves exactly like -r, but sends a DHCP inform instead of a request]:address' \ + '(-t --timeout)'{-t,--timeout}'[timeout after seconds, instead of the default 20]:timeout \(seconds\)' \ + '(-u --userclass)'{-u,--userclass}'[tags the DHCP message with the userclass class]:class' \ + '*'{-H,--sethostname}'[forces dhcpcd to set the hostname as supplied by the DHCP server]' \ + '({-I --clientid)'{-I,--clientid}'[send clientid as a client identifier string]:clientid' \ + '*'{-S,--mscsr}'[request Microsoft specific Classless Static Routes (RFC 3442) code as well]' \ + '(-A --noarp)'{-A,--noarp}'[don'\''t request or claim the address by ARP]' \ + '(-G --nogateway)'{-G,--nogateway}'[don'\''t set any default routes]' \ + '(-L --noipv4ll)'{-L,--noipv4ll}'[don'\''t use IPv4LL at all]' \ + '(-M --nomtu)'{-M,--nomtu}'[don'\''t set the MTU of the interface]' \ + '(-N --nontp)'{-N,--nontp}'[don'\''t touch /etc/ntpd.conf or restart the ntp service]' \ + '(-R --nodns)'{-R,--nodns}'[don'\''t send DNS information to resolvconf or touch /etc/resolv.conf]' \ + '(-T --test)'{-T,--test}'[on receipt of discover messages, simply print the contents of the DHCP message to the console]' \ + '(-Y --nonis)'{-Y,--nonis}'[don'\''t touch /etc/yp.conf or restart the ypbind service]' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_diana b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_diana new file mode 100644 index 00000000..ef51a0d8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_diana @@ -0,0 +1,150 @@ +#compdef diana +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Diana a command line interface to the aria2 daemon. (https://github.com/baskerville/diana). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + +local GIDs PGIDs + +_diana_load_gids() { + GIDs=() + local downloads hashArr fileName + + downloads=$(diana list | cut -d' ' -f1) + + if [ ${#downloads} -eq "0" ]; then + return + fi + + hashArr=("${(f)$(echo "$downloads")}") + for ((i=1; i<=${#hashArr[@]}; i++)); do + fileName=$(diana files $hashArr[i] | grep "[X]" | rev | cut -d'/' -f1 | rev); + GIDs+=("$hashArr[i]:$fileName"); + done +} + +_diana_load_paused_gids() { + PGIDs=() + local downloads hashArr fileName + + downloads=$(diana paused | cut -d' ' -f1) + + if [ ${#downloads} -eq "0" ]; then + return + fi + + hashArr=("${(f)$(echo "$downloads")}") + for ((i=1; i<=${#hashArr[@]}; i++)); do + fileName=$(diana files $hashArr[i] | grep "[X]" | rev | cut -d'/' -f1 | rev); + PGIDs+=("$hashArr[i]:$fileName"); + done +} + +_diana_command_arguments() { + case $words[1] in + (remove) + _diana_load_gids + _describe -t output 'Downloads to delete' GIDs + ;; + (info) + _diana_load_gids + _describe -t output 'Downloads to get info' GIDs + ;; + (files) + _diana_load_gids + _describe -t output 'Get files for downloads' GIDs + ;; + (forcerm) + _diana_load_gids + _describe -t output 'Downloads to delete' GIDs + ;; + (pause) + _diana_load_gids + _describe -t output 'Downloads to pause' GIDs + ;; + (resume) + _diana_load_paused_gids + _describe -t output 'Downloads to resume' PGIDs + ;; + (preview) + _diana_load_gids + _describe -t output 'Downloads to preview' GIDs + ;; + esac + + +} + +_diana() { + local -a commands + + commands=( + "list:Output the list of active downloads." + "paused:Output the list of paused downloads." + "stopped:Output the list of stopped downloads." + "info:Output information regarding the given GIDs." + "files:Output the files owned by the downloads corresponding to the given GIDs." + "errors:Output the list of errors." + "stats:Output download bandwidth statistics." + "add:Download the given items (local or remote URLs to torrents, etc.)." + "remove:Remove the downloads corresponding to the given GIDs." + "forcerm:Forcibly remove the downloads corresponding to the given GIDs." + "pause:Pause the downloads corresponding to the given GIDs." + "resume:Resume the downloads corresponding to the given GIDs." + "preview:Preview all the files from all the downloads corresponding to the given GIDs." + "sleep:Pause all the active downloads." + "wake:Resume all the paused downloads." + "purge:Clear the list of stopped downloads and errors." + "clean:Stop seeding completed downloads." + ) + +_arguments -C \ + '1:cmd:->cmds' \ + '*:: :->args' \ + +case "$state" in + (cmds) + _describe -t commands 'commands' commands + ;; + (*) + _diana_command_arguments + ;; +esac +} + +_diana + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_docpad b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_docpad new file mode 100644 index 00000000..21ff5337 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_docpad @@ -0,0 +1,83 @@ +#compdef docpad +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for docpad (https://github.com/bevry/docpad). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Changwoo Park (https://github.com/pismute) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 + +local -a _1st_arguments +_1st_arguments=( + 'run: run [options], does everything - skeleton, generate, watch, server' + 'server: server [options], creates a server for your generated project' + 'skeleton: skeleton [options], will create a new project in your cwd based off an existing skeleton' + 'render: render [path], render the file at and output its results to stdout:path:_files' + 'generate: (re)generates your project' + 'watch: watches your project for changes, and (re)generates whenever a change is made' + 'install: ensure everything is installed correctly' + 'clean: ensure everything is cleaned correctly' + 'info: display the information about your docpad instance' + 'help: output the help' +) + +_arguments -C \ + '(-h --help)'{-h,--help}'[output usage information]'\ + '(-V --version)'{-V,--version}'[output the version number]'\ + '(-o --out)'{-o,--out}'[where to output the rendered directory or files]:path:_files'\ + '(-c --config)'{-c,--config}'[a custom configuration file to load in]:path:_files'\ + '(-e --env)'{-e,--env}'[the environment name to use for this instance, multiple names can be separated with a comma]'\ + '(-d --debug)'{-d,--debug}'+[the level of debug messages you would like to display, if specified defaults to 7, otherwise 6]:number'\ + '(-f --force)'{-f,--force}'[force a re-install of all modules]'\ + '1: :->cmds'\ + '*: :_files'&& ret=0 + +case $state in + cmds) + _describe -t commands 'docpad command' _1st_arguments && ret=0 + ;; + +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_drush b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_drush new file mode 100644 index 00000000..1a5a363e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_drush @@ -0,0 +1,191 @@ +#compdef drush +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Drush (http://drush.ws). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Vasily Kraev (https://github.com/vasilykraev) +# +# ------------------------------------------------------------------------------ + +_drush() { + local curcontext='$curcontext' state line cmds ret=1 + integer NORMARG + typeset -A opt_args + + global_args=('--debug' '--verbose' '--yes' '--no' '--simulate' '--root=' '--uri=') + + _arguments -C \ + '(--*)'{--version,--version}'[Show drush version.]' \ + '(- *)'{-d,--debug}'[Display even more information, including internal messages.]' \ + '(- *)'{-v,--verbose}'[Display extra information about the command.]' \ + '(- *)'{-y,--yes}'[Assume "yes" as answer to all prompts.]' \ + '(- *)'{-n,--no}'[Assume "no" as answer to all prompts.]' \ + '(- *)'{-s,--simulate}'[Simulate all relevant actions (don'\''t actually change the system).]' \ + '(- *)'{-r,--root=}'[Drupal root directory to use (default: current directory).]' \ + '(- *)'{-l,--uri=}'[URI of the drupal site to use (only needed in multisite environments or when running on an alternate port).]' \ + '1: :->cmds' \ + '*::arg:->args' \ + && ret=0 + +case $state in + cmds) + _values 'drush command' \ + '(archive-dump)'{archive-dump,ard,arb}'[Backup your code, files, and database into a single file.]' \ + '(archive-restore)'{archive-restore,arr}'[Expand a site archive into a Drupal web site.]' \ + '(cache-clear)'{cache-clear,cc}'[Clear a specific cache, or all drupal caches.]' \ + '(core-status)'{core-status,status,st}'[Provides a birds-eye view of the current Drupal installation, if any.]' \ + '(core-cron)'{core-cron,cron}'[Run all cron hooks in all active modules for specified site.]' \ + '(core-execute)'{core-execute,exec}'[Execute a shell command. Usually used with a site alias.]' \ + '(drupal-directory)'{drupal-directory,dd}'[Return the filesystem path for modules/themes and other key folders.]' \ + 'help[Print this help message.]' \ + 'image-flush[Flush all derived images for a given style.]' \ + '(site-alias)'{site-alias,sa}'[Print an alias record.]' \ + '(site-install)'{site-install,si}'[Install Drupal along with modules/themes/configuration using the specified install profile.]' \ + 'test-clean[Clean temporary tables and files.]' \ + 'test-run[Run tests. Note that you must use the --uri option.]' \ + '(updatedb)'{updatedb,updb}'[Apply any database updates required (as with running update.php).]' \ + '(variable-delete)'{variable-delete,vdel}'[Delete a variable.]' \ + '(variable-get)'{variable-get,vget}'[Get a list of some or all site variables and values.]' \ + '(variable-set)'{variable-set,vset}'[Set a variable.]' \ + '(pm-list)'{pm-list,pml}'[Show a list of available extensions (modules and themes).]' \ + '(pm-disable)'{pm-disable,dis}'[Disable one or more extensions (modules or themes). Disable dependant extensions as well.]' \ + '(pm-download)'{pm-download,dl}'[Download projects from drupal.org or other sources.]' \ + '(pm-enable)'{pm-enable,en}'[Enable one or more extensions (modules or themes). Enable dependant extensions as well.]' \ + 'pm-uninstall[Uninstall one or more modules.]' \ + 'pm-update[Update Drupal core and contrib projects and apply any pending database updates (Same as pm-updatecode + updatedb).]' \ + '(sql-cli)'{sql-cli,sqlc}'[Open a SQL command-line interface using Drupals credentials.]' \ + 'sql-drop[Drop all tables in a given database.]' \ + 'sql-dump[Exports the Drupal DB as SQL using mysqldump or equivalent.]' \ + '(sql-query)'{sql-query,sqlq}'[Execute a query against the site database.]' \ + 'sql-sync[Copy and import source database to target database. Transfers via rsync.]' \ + '(user-login)'{user-login,uli}'[Display a one time login link for the given user account (defaults to uid 1).]' \ + '(user-password)'{user-password,upwd}'[(Re)Set the password for the user account with the specified name.]' \ + '(devel-reinstall)'{devel-reinstall,dre}'[Disable, Uninstall, and Install a list of projects. (devel)]' \ + '(devel-token)'{devel-token,token}'[List available tokens (devel)]' \ + '(generate-content)'{generate-content,genc}'[Create content. (devel_generate)]' \ + '(generate-menus)'{generate-menus,genm}'[Create menus and menu items. (devel_generate)]' \ + '(generate-terms)'{generate-terms,gent}'[Create terms in specified vocabulary. (devel_generate)]' \ + '(generate-users)'{generate-users,genu}'[Create users. (devel_generate)]' \ + '(generate-vocabs)'{generate-vocabs,genv}'[Create vocabularies. (devel_generate)]' \ + '(features-diff)'{features-diff,fd}'[Show the difference between the default and overridden state of a feature.]' \ + '(features-export)'{features-export,fe}'[Export a feature from your site into a module.]' \ + '(features-list)'{features-list,fl}'[List all the available features for your site.]' \ + '(features-revert)'{features-revert,fr}'[Revert a feature module on your site.]' \ + '(features-revert-all)'{features-revert-all,fra}'[Revert all enabled feature module on your site.]' \ + '(features-update)'{features-update,fu}'[Update a feature module on your site.]' \ + '(features-update-all)'{features-update-all,fua}'[Update all feature modules on your site.]' \ + && ret=0 + ;; + args) + case $line[1] in + (archive-dump|ard) + _arguments \ + '(--description)--description=[Filter out extensions that are provided by drupal core.]' \ + '(--destination)--destination=[The full path and filename in which the archive should be stored. If omitted, it will be saved to the drush-backups directory.]' \ + '(--no-core)--no-core[Exclude Drupal core, so the backup only contains the site specific stuff.]' \ + '(--pipe)--pipe[Only print the destination of the archive. Useful for scripts that don'\''t pass --destination.]' \ + '(--tar-options)--tar-options=[Options passed thru to the tar command.]' \ + && ret=0 + compadd -a global_args + ;; + (archive-restore|arr) + _arguments \ + '(--db-prefix)--db-prefix[An optional table prefix to use during restore.]' \ + '(--db-su)--db-su[Account to use when creating the new database. Optional.]' \ + '(--db-su-pw)--db-su-pw[Password for the "db-su" account. Optional.]' \ + '(--db-url)--db-url=[A Drupal 6 style database URL indicating the target for database restore. If not provided, the archived settings.php is used. ]' \ + '(--destination)--destination[Specify where the Drupal site should be expanded, including the docroot. Defaults to the current working directory.]' \ + '(--overwrite)--overwrite[Allow drush to overwrite any files in the destination.]' \ + && ret=0 + compadd -a global_args + ;; + (user-password|upwd) + _arguments \ + '--password=:Set the password for the username someuser.' \ + && ret=0 + ;; + (help) + _values 'commands' 'arb' 'archive-dump' 'archive-restore' 'ard' 'arr' 'cache-clear' 'cc' 'core-cron' 'core-execute' 'core-status' 'cron' 'dd' 'devel-reinstall' 'devel-token' 'dis' 'dl' 'dre' 'drupal-directory' 'en' 'exec' 'fd' 'fe' 'features-diff' 'features-export' 'features-list' 'features-revert' 'features-revert-all' 'features-update' 'features-update-all' 'fl' 'fr' 'fra' 'fu' 'fua' 'genc' 'generate-content' 'generate-menus' 'generate-terms' 'generate-users' 'generate-vocabs' 'genm' 'gent' 'genu' 'genv' 'help' 'image-flush' 'pm-disable' 'pm-download' 'pm-enable' 'pm-list' 'pm-uninstall' 'pm-update' 'pml' 'sa' 'si' 'site-alias' 'site-install' 'sql-cli' 'sql-drop' 'sql-dump' 'sql-query' 'sql-sync' 'sqlc' 'sqlq' 'st' 'status' 'test-clean' 'test-run' 'token' 'uli' 'updatedb' 'updb' 'upwd' 'user-login' 'user-password' 'variable-delete' 'variable-get' 'variable-set' 'vdel' 'vget' 'vset' + ;; + (cc) + _values 'options' 'all' 'drush' 'theme-registry' 'menu' 'css-js' 'block' + ;; + (pm-list|pml) + _arguments \ + '(--core)--core[Filter out extensions that are not in drupal core.]' \ + '(--no-core)--no-core[Filter out extensions that are provided by drupal core.]' \ + '(--pipe)--pipe[Returns a whitespace delimited list of the names of the resulting extensions.]' \ + '(--status)--status=-[Filter by extension status. Choices: enabled, disabled and/or "not installed".]:status:(enabled disabled)' \ + '(--type)--type=-[Filter by extension type. Choices: module, theme.]:type:(module theme)' \ + && ret=0 + ;; + (pm-disable|dis) + _modules=( $(drush pml --status=enabled --pipe) ) + if [[ $_modules != "" ]]; then + _values 'enabled modules' $_modules + fi + ;; + (pm-enable|en) + _arguments -C \ + '--resolve-dependencies[Attempt to download any missing dependencies. At the moment, only works when the module name is the same as the project name.]' \ + '--skip[Skip automatic downloading of libraries (c.f. devel).]' && ret=0 + _modules=( $(drush pml --status="disabled,not installed" --pipe) ) + if [[ $_modules != "" ]]; then + _values -s 'not yet enabled modules' $_modules && ret=0 + fi + ;; + (*) + _values 'Global options' \ + {-d,--debug}'[Display even more information, including internal messages.]' \ + {-v,--verbose}'[Display extra information about the command.]' \ + {-y,--yes}'[Assume "yes" as answer to all prompts.]' \ + {-n,--no}'[Assume "no" as answer to all prompts.]' \ + {-s,--simulate}'[Simulate all relevant actions (don'\''t actually change the system).]' \ + {-r,--root=}'[Drupal root directory to use (default: current directory).]' \ + {-l,--uri=}'[URI of the drupal site to use (only needed in multisite environments or when running on an alternate port).]' + ;; + esac + ;; +esac +} + +_drush '$@' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ecdsautil b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ecdsautil new file mode 100644 index 00000000..5d0a6f3c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ecdsautil @@ -0,0 +1,53 @@ +#compdef ecdsautil +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ecdsaultils v0.4.0 (https://github.com/tcatm/ecdsautils) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Robinhuett +# +# ------------------------------------------------------------------------------ + +_ecdsautil_args() { + case $words[1] in + (sign) + _arguments '1:somefile:_files' + ;; + (verify) + _arguments '-s[signature]:secret:_files' '-p[publickey]:pubkey:_files' +'-n[signaturecount]:signaturecount:""' ':file:_files' + ;; + esac +} + +_ecdsautil() { + local -a commands + + commands=( + "help:Show help" + "generate-key:generate a new secret on stdout" + "show-key:output public key of secret read from stdin" + "sign:sign file" + "verify:verify signature of file" + ) + + _arguments -C \ + '1:cmd:->cmds' \ + '*:: :->args' \ + + case "$state" in + (cmds) + _describe -t commands 'commands' commands + ;; + (*) + _ecdsautil_args + ;; + esac +} + +_ecdsautil "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_emulator b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_emulator new file mode 100644 index 00000000..265dccd1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_emulator @@ -0,0 +1,137 @@ +#compdef emulator +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for emulator (Android Emulator) 12.0 +# (http://developer.android.com/guide/developing/tools/emulator.html). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +typeset -A opt_args +local context state line curcontext="$curcontext" + +_list_avds() { + local -a _avds=($HOME/.android/avd/*.ini(N.:t:r)) + echo "${_avds[@]}" +} + +# TODO All image options are contextual to -sysdir value +# TODO All skin options are contextual to -skindir value +# TODO snapshot options are mutually exclusive +# TODO Use '-snapshot-list' output for snapshot names +# TODO -logcat: use completer from _adb +# TODO Complete options with device values +# TODO Complete -prop +_arguments \ + '(- : *)-version[display emulator version number]' \ + '(- : *)-help[display help information]' \ + '(- : *)-help-disk-images[about disk images]' \ + '(- : *)-help-keys[supported key bindings]' \ + '(- : *)-help-debug-tags[debug tags for -debug ]' \ + '(- : *)-help-char-devices[character specification]' \ + '(- : *)-help-environment[environment variables]' \ + '(- : *)-help-keyset-file[key bindings configuration file]' \ + '(- : *)-help-virtual-device[virtual device management]' \ + '(- : *)-help-sdk-images[about disk images when using the SDK]' \ + '(- : *)-help-build-images[about disk images when building Android]' \ + '(- : *)-help-all[prints all help content]' \ + '(- : *)-help-'{version,list-avds,sysdir,system,writable-system,image,datadir,kernel,ramdisk,initdata,data,partition-size,cache,no-cache,nocache,sdcard,snapstorage,no-snapstorage,snapshot,no-snapshot,no-snapshot-save,no-snapshot-load,snapshot-list,no-snapshot-update-time,wipe-data,avd,skindir,skin,noskin,no-skin,memory,cores,accel,no-accel,netspeed,netdelay,netfast,trace,show-kernel,shell,no-jni,nojni,logcat,noaudio,no-audio,audio,raw-keys,radio,port,ports,onion,onion-alpha,onion-rotation,scale,dpi-device,http-proxy,timezone,dns-server,cpu-delay,no-boot-anim,no-window,report-console,gps,keyset,shell-serial,tcpdump,bootchart,charmap,prop,shared-net-id,nand-limits,memcheck,qemu,verbose}'[print option-specific help]' \ + '-list-avds[list available AVDs]' \ + '-sysdir[search for system disk images in the directory]: :_files -/' \ + '(-system -image)'{-system,-image}'[read initial system image from the file]: :_files -g "*.img"' \ + '-writable-system[make system image writable after '\''adb remount'\'']' \ + '-datadir[write user data into the directory]: :_files -/' \ + '-kernel[use specific emulated kernel]: :_files' \ + '-ramdisk[ramdisk image (default /ramdisk.img]: :_files -g "*.img"' \ + '-initdata[same as '\''-init-data '\'']: :_files' \ + '-data[data image (default /userdata-qemu.img]: :_files -g "*.img"' \ + '-partition-size[system/data partition size]:size (in MBs)' \ + '(-no-cache -nocache)-cache[cache partition image (default is temporary file)]: :_files -g "*.img"' \ + '(-cache -no-cache -nocache)'{-no-cache,-nocache}'[disable the cache partition]' \ + '-sdcard[SD card image (default /sdcard.img]: :_files -g "*.img"' \ + '(-no-snapstorage)-snapstorage[file that contains all state snapshots (default /snapshots.img)]: :_files -g "*.img"' \ + '(-snapstorage)-no-snapstorage[do not mount a snapshot storage file (this disables all snapshot functionality)]' \ + '-snapshot[name of snapshot within storage file for auto-start and auto-save (default '\''default-boot'\'')]:snapshot name' \ + '-no-snapshot[perform a full boot and do not do not auto-save, but qemu vmload and vmsave operate on snapstorage]' \ + '-no-snapshot-save[do not auto-save to snapshot on exit: abandon changed state]' \ + '-no-snapshot-load[do not auto-start from snapshot: perform a full boot]' \ + '-snapshot-list[show a list of available snapshots]' \ + '-no-snapshot-update-time[do not do try to correct snapshot time on restore]' \ + '-wipe-data[reset the user data image (copy it from initdata)]' \ + '-avd[use a specific android virtual device]:android virtual device name:($(_list_avds))' \ + '-skindir[search skins in (default /skins)]: :_files -/' \ + '-skin[select a given skin]' \ + '(-noskin -no-skin)'{-noskin,-no-skin}'[don'\''t use any emulator skin]' \ + '-memory[physical RAM size in MBs]:size (in MBs)' \ + '-cores[Set number of CPU cores to emulator]:number' \ + '(-no-accel)-accel[Configure emulation acceleration]:mode' \ + '(-accel)-no-accel[Same as '\''-accel off'\'']' \ + '-netspeed[maximum network download/upload speeds]:speed' \ + '-netdelay[network latency emulation]:delay' \ + '-netfast[disable network shaping]' \ + '-trace[enable code profiling (F9 to start)]:trace name' \ + '-show-kernel[display kernel messages]' \ + '-shell[enable root shell on current terminal]' \ + {-no-jni,-nojni}'[disable JNI checks in the Dalvik runtime]' \ + '-logcat[enable logcat output with given tags]:logcat tags' \ + '(-audio -noaudio -no-audio)'{-noaudio,-no-audio}'[disable audio support]' \ + '(-noaudio -no-audio)-audio[use specific audio backend]:audio backend' \ + '-raw-keys[disable Unicode keyboard reverse-mapping]' \ + '-radio[redirect radio modem interface to character device]:device' \ + '-port[TCP port that will be used for the console]:port number' \ + '-ports[TCP ports used for the console and adb bridge]:console port,adb port' \ + '-onion[use overlay PNG image over screen]: :_files -g "*.(png|PNG)"' \ + '-onion-alpha[specify onion-skin translucency]:percentage' \ + '-onion-rotation[specify onion-skin rotation]:rotation:((1 2 3 4))' \ + '-scale[scale emulator window]:scale' \ + '-dpi-device[specify device'\''s resolution in dpi (default 165)]:dpi' \ + '-http-proxy[make TCP connections through a HTTP/HTTPS proxy]:proxy' \ + '-timezone[use this timezone instead of the host'\''s default]:timezone' \ + '-dns-server[use this DNS server(s) in the emulated system]:DNS servers' \ + '-cpu-delay[throttle CPU emulation]:CPU delay' \ + '-no-boot-anim[disable animation for faster boot]' \ + '-no-window[disable graphical window display]' \ + '-report-console[report console port to remote socket]: :_socket' \ + '-gps[redirect NMEA GPS to character device]:device' \ + '-keyset[specify keyset file name]: :_files' \ + '-shell-serial[specific character device for root shell]:device' \ + '-tcpdump[capture network packets to file]: :_files' \ + '-bootchart[enable bootcharting]:timeout' \ + '-charmap[use specific key character map]: :_files' \ + '*-prop[set system property on boot]:name=value' \ + '-shared-net-id[join the shared network, using IP address 10.1.2.]:number' \ + '-nand-limits[enforce NAND/Flash read/write thresholds]:limits' \ + '-memcheck[enable memory access checking]:flags' \ + '-qemu[pass arguments to qemu]:arguments' \ + '-verbose[same as '\''-debug-init'\'']' \ + '*'{-debug,-debug-,-debug-no-}'[enable/disable specific debug messages]:tag' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + +case $state in + cmds) + local -a _avds=($(_list_avds)) + for ((i=1; i<=${#_avds[@]}; i++)); do + _avds[i]="@${_avds[i]}" + done + _values 'avds' "${_avds[@]}" + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_envdir b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_envdir new file mode 100644 index 00000000..64379939 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_envdir @@ -0,0 +1,49 @@ +#compdef envdir +# ------------------------------------------------------------------------------ +# Copyright (c) 2016, Github zsh-users (https://github.com/zsh-users) +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for envdir (https://github.com/jezdez/envdir). +# It completes its few options and then a directory and command. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Daniel Hahler +# +# ------------------------------------------------------------------------------ + +args=( + '(-h --help)'{-h+,--help}'[show this help message and exit]' + '(-)'--version'[display version information and exit]' + '(-)1:directory: _path_files -/' + '(-)2:command: _command_names -e' + '*::arguments: _precommand' +) +_arguments -S $args diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_exportfs b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_exportfs new file mode 100644 index 00000000..4a6cdb67 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_exportfs @@ -0,0 +1,51 @@ +#compdef exportfs +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for nfs's exportfs - maintain table of exported NFS file systems. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Timofey Titovets +# +# ------------------------------------------------------------------------------ +_exportfs() { + _values -w 'option' \ + '(-i)-a[Export or unexport all directories]' \ + '(-a -r -u)-i[Ignore the /etc/exports file and files under /etc/exports.d directory]' \ + '(-i)-r[Reexport all directories]' \ + '(-i)-u[Unexport one or more directories]' \ + '-f[Flush everything out of export table]' \ + '-o[option1,option2.. Specify a list of export options]' \ + '-s[Display the current export list suitable for /etc/exports]' \ + '-v[Be verbose]' +} +_exportfs "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fab b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fab new file mode 100644 index 00000000..ba60bb63 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fab @@ -0,0 +1,109 @@ +#compdef fab +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Fabric (http://fabfile.org) +# +# Source: https://github.com/vhbit/fabric-zsh-autocomplete +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valerii Hiora (https://github.com/vhbit) +# +# ------------------------------------------------------------------------------ + + +local curcontext=$curcontext state line +declare -A opt_args + +declare target_list +target_list=(`fab --shortlist 2>/dev/null`) + +_targets() { + _describe -t commands "fabric targets" target_list +} + +output_levels=( + 'status: Status messages, i.e. noting when Fabric is done running, if the user used a keyboard interrupt, or when servers are disconnected from. These messages are almost always relevant and rarely verbose.' + 'aborts: Abort messages. Like status messages, these should really only be turned off when using Fabric as a library, and possibly not even then. Note that even if this output group is turned off, aborts will still occur – there just won’t be any output about why Fabric aborted!' + 'warnings: Warning messages. These are often turned off when one expects a given operation to fail, such as when using grep to test existence of text in a file. If paired with setting env.warn_only to True, this can result in fully silent warnings when remote programs fail. As with aborts, this setting does not control actual warning behavior, only whether warning messages are printed or hidden.' + 'running: Printouts of commands being executed or files transferred, e.g. [myserver] run: ls /var/www. Also controls printing of tasks being run, e.g. [myserver] Executing task ''foo''.' + 'stdout: Local, or remote, stdout, i.e. non-error output from commands.' + 'stderr: Local, or remote, stderr, i.e. error-related output from commands.' + 'user: User-generated output, i.e. local output printed by fabfile code via use of the fastprint or puts functions.' +) + +_arguments -w -S -C \ + '(-)'{-h,--help}'[show this help message and exit]: :->noargs' \ + '(-)'{-V,--version}'[show program'\''s version number and exit]: :->noargs' \ + '(-)--list[print list of possible commands and exit]: :->noargs' \ + '(-)--shortlist[print non-verbose list of possible commands and exit]: :->noargs' \ + '(--reject-unknown-hosts)--reject-unknown-hosts[reject unknown hosts]' \ + '(--no-pty)--no-pty[do not use pseudo-terminal in run/sudo]' \ + "(-d+ --display=-)"{-d+,--display=-}"[print detailed info about a given command]: :_targets" \ + '(-D --disable-known-hosts)'{-D,--disable-known-hosts}'[do not load user known_hosts file]' \ + '(-r --reject-unknown-hosts)'{-r,--reject-unknown-hosts}'[reject unknown hosts]' \ + '(-u+ --user=-)'{-u+,--user=-}'[username to use when connecting to remote hosts]: :' \ + '(-p+ --password=-)'{-p+,--password=-}'[password for use with authentication and/or sudo]: :' \ + '(-H+ --hosts=-)'{-H+,--hosts=-}'[comma separated list of hosts to operate on]: :' \ + '(-R+ --roles=-)'{-R+,--roles=-}'[comma separated list of roles to operate on]: :' \ + '(-a --no-agent)'{-a,--no-agent}'[don'\''t use the running SSH agent]' \ + '(-k --no-keys)'{-k,--no-keys}'[don'\''t load private key files from ~/.ssh/]' \ + '(-w --warn-only)'{-w,--warn-only}'[warn instead of abort, when commands fail]' \ + '-i+[path to SSH private key file. May be repeated]: :_files' \ + "(-f+ --fabfile=)"{-f+,--fabfile=}"[Python module file to import]: :_files -g *.py" \ + '(-c+ --config=-)'{-c+,--config=-}'[specify location of config file to use]: :_files' \ + '(-s+ --shell=-)'{-s+,--shell=-}'[specify a new shell, defaults to ''/bin/bash -l -c'']: :' \ + '(--ssh-config-path=)--ssh-config-path=[ssh config path]: :_files' \ + '(--hide=-)--hide=-[comma-separated list of output levels to hide]: :->levels' \ + '(--show=-)--show=-[comma-separated list of output levels to show]: :->levels' \ + '*::: :->subcmds' && return 0 + +if [[ CURRENT -ge 1 ]]; then + case $state in + noargs) + _message "nothing to complete";; + levels) + _describe -t commands "output levels" output_levels;; + *) + _targets;; + esac + + return +fi + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fail2ban-client b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fail2ban-client new file mode 100644 index 00000000..1cebd199 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fail2ban-client @@ -0,0 +1,339 @@ +#compdef fail2ban-client +# ------------------------------------------------------------------------------ +# Copyright (c) 2020 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for fail2ban-client (https://www.fail2ban.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Felix Neumärker +# +# ------------------------------------------------------------------------------ + +_f2bc_jails() { + LANG=C fail2ban-client status 2> /dev/null | sed -n -e 's/.*Jail list:\s\+//' -e 'T' -e 's/,\s\+/\'$'\n/g' -e 'p' +} + +_complete_f2bc_cmds() { + local cmds=( + 'unban:unbans all IP addresses' + 'set:set property' + 'get:get property' + 'status:gets the current status of the server' + 'reload:reloads the configuration/jails' + 'restart:restarts the server' + 'start:starts the server and the jails' + 'stop:stops all jails and terminate the server' + 'ping:tests if the server is alive' + 'flushlogs:flushes the logtarget if a file and reopens it' + 'help:return this output' + 'version:return the server version' + ) + + _describe -V "fail2ban commands" cmds +} + +_complete_f2bc_cmdargs() { + local f2barg="$words[$NORMARG]" + case "$f2barg" in + unban) + local jail + if (( $words[(I)(--all)] == 0 )) ; then + for jail in $(_f2bc_jails) ; do + _complete_f2bc_ips $jail + done + local unban_opts=(--all) + _describe -o "unban options" unban_opts + else + _nothing + fi + ;; + (set|get)) + if (( $NORMARG + 1 == $CURRENT )) ; then + _complete_f2bc_jails + _complete_f2bc_settings + else + _complete_f2bc_jail${f2barg} + fi + ;; + status) + if (( $NORMARG + 1 == $CURRENT )) ; then + _complete_f2bc_jails + elif (( $NORMARG + 2 == $CURRENT )) ; then + _values "flavor" basic cymru + else + _nothing + fi + ;; + esac +} + +_complete_f2bc_jails() { + local jails=($(_f2bc_jails)) + _describe -V "jails" jails +} + +_complete_f2bc_ips() { + local ips=("${(@f)$(LANG=C fail2ban-client status $1 2> /dev/null | sed -n -e 's/^.*Banned IP list:\s\+//' -e 'T' -e 's/\s\+/\'$'\n/g' -e 'p')}") + if [[ -n "${ips[@]}" ]] ; then + _describe -t "f2b_jail_$1" -V "banned ips of jail $1" ips + else + _nothing + fi +} + +_complete_f2bc_jailset() { + if (( $NORMARG + 2 == $CURRENT )) ; then + case $words[$NORMARG+1] in + loglevel) + local loglevel=(CRITICAL ERROR WARNING NOTICE INFO DEBUG TRACEDEBUG HEAVYDEBUG) + _describe -V "loglevel" loglevel ;; + logtarget) + local logtarget=(STDOUT STDERR SYSLOG) + _describe -V "logtarget" logtarget + _files ;; + syslogsocket) + local syslogsocket=(auto) + _describe -V "logtarget" syslogsocket + _files ;; + dbfile) + _files ;; + dbpurgeage) + _message "sets the max age in that history of bans will be kept" ;; + *) + # jail + local jailsettings=( + unbanip + banip + action + addaction + addfailregex + addignoreip + addignoreregex + addjournalmatch + addlogpath + bantime + datepattern + delaction + delfailregex + delignoreip + delignorerexgex + deljournalmatch + dellogpath + findtime + idle + ignorecache + ignorecommand + ignoreself + logencoding + maxlines + maxretry + usedns + ) + _describe -t "f2b_jail_setting" -V "jail setting" jailsettings ;; + esac + else + local jail="$words[$NORMARG+1]" + + if (( $NORMARG + 3 == $CURRENT )) ; then + case $words[$NORMARG+2] in + unbanip) + _complete_f2bc_ips "$jail" ;; + delfailregex) + _complete_f2bc_regex fail "$jail" ;; + delignorerexgex) + _complete_f2bc_regex ignore "$jail" ;; + dellogpath) + local filelist=("${(@f)$(LANG=C fail2ban-client status $jail 2> /dev/null | sed -n -e 's/^.*File list:\s\+//' -e 'T' -e 's/\s\+/\'$'\n/g' -e 'p')}") + + if [[ -n "${filelist[@]}" ]] ; then + _describe -t "f2b_filelist" -V "filelist of jail $1" filelist + else + _nothing + fi ;; + idle) + _values 'fail2ban idle' on off ;; + ignoreself) + _values 'fail2ban ignoreself' true false ;; + delignoreip) + local ignoreips=("${(@f)$(fail2ban-client get "$jail" ignoreip 2> /dev/null | sed -e 's/^[|`]-\s\+//p')}") + if [[ -n "${ignoreips[@]}" ]] ; then + _describe -t "f2b_ignoreip" -V "fail2ban ignored ips" ignoreips + else + _nothing + fi ;; + delaction|action) + _complete_f2bc_action "$jail" ;; + addlogpath) + _files ;; + *) + _message "No completion for ${words[NORMARG+2]}" ;; + esac + elif (( $NORMARG + 4 == $CURRENT )) ; then + case $words[$NORMARG+2] in + action) + _complete_f2bc_actionproperties "$jail" $words[$NORMARG+3] ;; + addaction) + _files ;; + *) + _nothing ;; + esac + else + _nothing + fi + fi +} + +_complete_f2bc_jailget() { + if (( $NORMARG + 2 == $CURRENT )) ; then + case $words[$NORMARG+1] in + (loglevel|logtarget|syslogsocket|dbfile|dbpurgeage)) + _nothing ;; + *) + # jail + local jailprops=( + logpath + logencoding + journalmatch + ignoreself + ignoreip + ignorecommand + failregex + ignoreregex + findtime + bantime + datepattern + usedns + maxretry + maxlines + actions + action + actionproperties + actionmethods + ) + _describe -t "f2b_jail_props" -V "jail properties" jailprops ;; + esac + else + local jail="$words[$NORMARG+1]" + + if (( $NORMARG + 3 == $CURRENT )) ; then + case $words[$NORMARG+2] in + (action|actionproperties|actionmethods)) + _complete_f2bc_action "$jail" ;; + *) + _nothing ;; + esac + elif (( $NORMARG + 4 == $CURRENT )) ; then + case $words[$NORMARG+2] in + (action|actionproperties|actionmethods)) + _complete_f2bc_actionproperties "$jail" $words[$NORMARG+3] ;; + *) + _nothing ;; + esac + else + _nothing + fi + fi +} + +_complete_f2bc_action() { + local jailactions=("${(@f)$(fail2ban-client get $1 actions 2>/dev/null | sed -e '1d' -e 's/,\s\+/\'$'\n/g')}") + + if [[ -n "${jailactions[@]}" ]] ; then + _describe -t "f2b_jail_actions" -V "jail actions" jailactions + else + _nothing + fi +} + +_complete_f2bc_actionproperties() { + local default_actionproperties=( + actionstart + actionstop + actioncheck + actionban + actionunban + timeout + ) + local all_actionproperties=("${(@f)$(fail2ban-client get $1 actionproperties $2 2>/dev/null | sed -e '1d' -e 's/,\s\+/\'$'\n/g')}") + local add_actionproperties=("${(@)all_actionproperties:|default_actionproperties}") + + _describe -t "f2b_actions_defprops" -V "default action properties" default_actionproperties + + if [[ -n "${add_actionproperties[@]}" ]] ; then + _describe -t "f2b_actions_remprops" -V "additional action properties" add_actionproperties + else + _nothing + fi +} + +_complete_f2bc_regex() { + local regex=("${(@f)$(fail2ban-client get $2 ${1}regex 2> /dev/null | sed -n -e 's/[|`]- \[\([0-9]\+\)\]:\s\+/\1:/p')}") + if [[ -n "${regex[@]}" ]] ; then + _describe -t "f2b_regex" -V "jail $2 ${1}regex" regex + else + _nothing + fi +} + +_complete_f2bc_settings() { + local setargs=(loglevel logtarget syslogsocket dbfile dbpurgeage) + _describe -t "f2b_settings" -V "fail2ban-client settings" setargs +} + +integer NORMARG + +_arguments -A "-*" -n \ + '-c[configuration directory]:_files -/' \ + '-s[socket path]:_files' \ + '-p[pidfile path]:_files' \ + '--loglevel[logging level]:(CRITICAL ERROR WARNING, NOTICE INFO, DEBUG, TRACEDEBUG HEAVYDEBUG)' \ + '--logtarget[logging target]:(stdout stderr syslog sysout)' \ + '--syslogsocket:_files' \ + '-d[dump configuration]' \ + '(--dp --dump-pretty)'{--dp,--dump-pretty}'[dump the configuration using more human readable representation]' \ + '(-t --test)'{-t,--test}'[test configuration]' \ + '-i[interactive mode]' \ + '-v[increase verbosity]' \ + '-q[decrease verbosity]' \ + '-x[force execution of the server (remove socket file)]' \ + '-b[start server in background]' \ + '-f[start server in foreground]' \ + '--str2sec[convert time abbreviation format to seconds]:_message str2sec' \ + '(-h --help)'{-h,--help}'[display this help message]' \ + '(-V --version)'{-V,--version}'[print the version]' \ + '1:fail2ban command:_complete_f2bc_cmds' \ + '*:fail2ban command argument:_complete_f2bc_cmdargs' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: set et sw=2 ts=2 ft=zsh: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ffind b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ffind new file mode 100644 index 00000000..92cb30b2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ffind @@ -0,0 +1,62 @@ +#compdef ffind +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ffind (https://github.com/jaimebuelta/ffind). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Sergei Eremenko (https://github.com/SmartFinn) +# +# ------------------------------------------------------------------------------ + +_arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--version[show version number and exit]' \ + '-p[match whole path, not only name of files]' \ + '--nocolor[do not display color]' \ + '--nosymlinks[do not follow symlinks]' \ + '--hidden[do not ignore hidden directories]' \ + '-c[force case sensitive]' \ + '-i[force case insensitive]' \ + '--delete[delete files found]' \ + '--exec[execute the given command with the file found]:command:_command_names' \ + '--module[execute the given module with the file found]:module_name args:' \ + '--command[execute the given python program with the file found]:program:_files' \ + '--ignore-vcs[ignore version control system files and directories]' \ + '-f[experimental fuzzy search]' \ + '--return-results[for testing purposes only]' \ + '1:directory to search:_path_files -/' \ + '*:filepattern:' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fleetctl b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fleetctl new file mode 100644 index 00000000..a754e3c9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fleetctl @@ -0,0 +1,123 @@ +#compdef fleetctl +# ------------------------------------------------------------------------------ +# Copyright (c) 2009-2015 Robby Russell and contributors (see +# https://github.com/robbyrussell/oh-my-zsh/contributors) +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for fleetctl (https://github.com/coreos/fleet). +# +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Remi Paulmier (https://github.com/shtouff) +# +# ------------------------------------------------------------------------------ + +# fleetctl zsh completion + +local -a _1st_arguments +_1st_arguments=( + 'cat:Output the contents of a submitted unit' + 'destroy:Destroy one or more units in the cluster' + 'fd-forward:Proxy stdin and stdout to a unix domain socket' + 'help:Show a list of commands or help for one command' + 'journal:Print the journal of a unit in the cluster to stdout' + 'list-machines:Enumerate the current hosts in the cluster' + 'list-unit-files:List the units that exist in the cluster.' + 'list-units:List the current state of units in the cluster' + 'load:Schedule one or more units in the cluster, first submitting them if necessary.' + 'ssh:Open interactive shell on a machine in the cluster' + 'start:Instruct systemd to start one or more units in the cluster, first submitting and loading if necessary.' + 'status:Output the status of one or more units in the cluster' + 'stop:Instruct systemd to stop one or more units in the cluster.' + 'submit:Upload one or more units to the cluster without starting them' + 'unload:Unschedule one or more units in the cluster.' + 'version:Print the version and exit' +) + +__task_list () +{ + local expl + declare -a tasks + + tasks=(cat destroy fd-forward help journal list-machines list-unit-files \ + list-units load ssh start status stop submit unload version) + + _wanted tasks expl 'help' compadd $tasks +} + +__unit_list () +{ + _wanted application expl 'command' compadd $(command fleetctl list-units | \ + tail -n +2 | awk '{print $1}') +} + +local expl + +local curcontext="$curcontext" state line +local -A opt_args + +_arguments -C \ + ':command:->command' \ + '*::options:->options' + +case $state in + (command) + _describe -t commands "gem subcommand" _1st_arguments + return + ;; + + (options) + case $line[1] in + (help) + _arguments ':feature:__task_list' + ;; + + (destroy|journal|start|status|stop|unload|cat) + _arguments '*:feature:__unit_list' + ;; + + (load|submit) + _arguments '*:file:_files -g *.service' + ;; + + (ssh) + _arguments '*:host:_hosts' + ;; + + (*) + _arguments '*:file:_files' + ;; + esac + ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_flutter b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_flutter new file mode 100644 index 00000000..a2ba6c49 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_flutter @@ -0,0 +1,471 @@ +#compdef flutter +# ------------------------------------------------------------------------------ +#MIT License +# +#Copyright (c) 2018 Nickolay Simonov +# +#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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for the Flutter.io sdk's cli tool (https://flutter.io) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nikolai Simonov (https://github.com/NiKoTron) +# +# ------------------------------------------------------------------------------ +_flutter() { + +typeset -A opt_args +local context state line + +local curcontext="$curcontext" + +local ret=1 + +_arguments -C -A "-*" \ +'(-h --help)'{-h,--help}'[Print this usage information.]' \ +'(-v --verbose)'{-v,--verbose}'[Noisy logging, including all shell commands executed.]' \ +'--quiet[Reduce the amount of output from some commands.]' \ +'(-d --device-id)'{-d,--device-id}'[Target device id or name (prefixes allowed).]' \ +'--version[Reports the version of this tool.]' \ +'--color[Whether to use terminal colors.]' \ +'--no-color[Whether to use terminal colors.]' \ +'--suppress-analytics[Suppress analytics reporting when this command runs.]' \ +'--bug-report[Captures a bug report file to submit to the Flutter team (contains local paths, device identifiers, and log snippets).]' \ +'--packages[Path to your ".packages" file. (required, since the current directory does not contain a ".packages" file)]' \ +'--flutter-root[The root directory of the Flutter repository (uses $FLUTTER_ROOT if set).]' \ +'1: :_root_commands' \ +'*::arg:->args' \ +&& ret=0 + + case "$state" in + (args) + case $words[1] in + (help) + _arguments -C \ + '1: :_root_commands' \ + && ret=0 + ;; + (analyze) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--flutter-repo[Include all the examples and tests from the Flutter repository.]' \ + '--no-flutter-repo[Include all the examples and tests from the Flutter repository.]' \ + '--current-package[Include the lib/main.dart file from the current directory, if any. (defaults to on)]' \ + '--no-current-package[Include the lib/main.dart file from the current directory, if any. (defaults to on)]' \ + '--watch[Run analysis continuously, watching the filesystem for changes.]' \ + '--preview-dart-2[Preview Dart 2.0 functionality. (defaults to on)]' \ + '--no-preview-dart-2[Preview Dart 2.0 functionality. (defaults to on)]' \ + '--write=[Also output the results to a file. This is useful with --watch if you want a file to always contain the latest results.]: :_files -/' \ + '--pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--congratulate[When analyzing the flutter repository, show output even when there are no errors, warnings, hints, or lints. (defaults to on)]' \ + '--no-congratulate[When analyzing the flutter repository, show output even when there are no errors, warnings, hints, or lints. (defaults to on)]' \ + '--preamble[When analyzing the flutter repository, display the number of files that will be analyzed. (defaults to on)]' \ + '--no-preamble[When analyzing the flutter repository, display the number of files that will be analyzed. (defaults to on)]' \ + && ret=0 + ;; + (assemble) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (attach) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (bash-completion) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (build) + _arguments -C \ + '1: :_build_entities' \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (channel) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (clean) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (config) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--analytics[Enable or disable reporting anonymously tool usage statistics and crash reports.]' \ + '--no-analytics[Enable or disable reporting anonymously tool usage statistics and crash reports.]' \ + '--clear-ios-signing-cert[Clear the saved development certificate choice used to sign apps for iOS device deployment.]' \ + '--gradle-dir[The gradle install directory.]' \ + '--android-sdk[The Android SDK directory.]' \ + '--android-studio-dir[The Android Studio install directory.]' \ + && ret=0 + ;; + + (create) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--pub[Whether to run "flutter packages get" after the project has been created. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" after the project has been created. (defaults to on)]' \ + '--offline[When "flutter packages get" is run by the create command, this indicates whether to run it in offline mode or not. In offline mode, it will need to have all dependencies already available in the pub cache to succeed.]' \ + '--no-offline[When "flutter packages get" is run by the create command, this indicates whether to run it in offline mode or not. In offline mode, it will need to have all dependencies already available in the pub cache to succeed.]' \ + "--with-driver-test[Also add a fl:_root_commandsutter_driver dependency and generate a sample 'flutter drive' test.]" \ + "--no-with-driver-test[Also add a flutter_driver dependency and generate a sample 'flutter drive' test.]" \ + '(-t= --template=)'{-t=,--template=}'[Specify the type of project to create.]: :_project_templates' \ + "--description[The description to use for your new Flutter project. This string ends up in the pubspec.yaml file. (defaults to 'A new Flutter project.')]" \ + "--org[The organization responsible for your new Flutter project, in reverse domain name notation. This string is used in Java package names and as prefix in the iOS bundle identifier. (defaults to 'com.example')]" \ + '(-i= --ios-language)'{-i=,--ios-language}'[iOS project language]: :_ios_languages' \ + '(-a= --android-language)'{-a=,--android-language}'[Android project language]: :_droid_languages' \ + && ret=0 + ;; + + (daemon) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (devices) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (doctor) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + "--android-licenses[Run the Android SDK manager tool to accept the SDK's licenses.]" \ + && ret=0 + ;; + (drive) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--debug[Build a debug version of your app (default mode).]' \ + '--profile[Build a version of your app specialized for performance profiling.]' \ + '--release[Build a release version of your app.]' \ + '--flavor[Build a custom app flavor as defined by platform-specific build setup. Supports the use of product flavors in Android Gradle scripts. Supports the use of custom Xcode schemes.]' \ + '--trace-startup[Start tracing during startup.]' \ + '--route[Which route to load when running the app.]' \ + '--target-platform[Specify the target platform when building the app for an Android device. Ignored on iOS.]: :_target_platforms' \ + '(-t= --target=)'{-t=,-target=}'[The main entry-point file of the application, as run on the device. If the --target option is omitted, but a file name is provided on the command line, then that is used instead. (defaults to "lib/main.dart")]: :_files -g "*.dart"' \ + '--observatory-port[Listen to the given port for an observatory debugger connection. Specifying port 0 will find a random free port. Defaults to the first available port after 8100.]' \ + '--pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-keep-app-running[Will keep the Flutter application running when done testing. By default, "flutter drive" stops the application after tests are finished, and --keep-app-running overrides this. On the other hand, if --use-existing-app is specified, then "flutter drive" instead defaults to leaving the application running, and --no-keep-app-running overrides it.]' \ + '--keep-app-running[Will keep the Flutter application running when done testing. By default, "flutter drive" stops the application after tests are finished, and --keep-app-running overrides this. On the other hand, if --use-existing-app is specified, then "flutter drive" instead defaults to leaving the application running, and --no-keep-app-running overrides it.]' \ + '--use-existing-app=[Connect to an already running instance via the given observatory URL. If this option is given, the application will not be automatically started, and it will only be stopped if --no-keep-app-running is explicitly set.]' \ + '--driver=[The test file to run on the host (as opposed to the target file to run on the device). By default, this file has the same base name as the target file, but in the "test_driver/" directory instead, and with "_test" inserted just before the extension, so e.g. if the target is "lib/main.dart", the driver will be "test_driver/main_test.dart".]: :_files' \ + '--preview-dart-2[Preview Dart 2.0 functionality. (defaults to on)]' \ + '--no-preview-dart-2[Preview Dart 2.0 functionality. (defaults to on)]' \ + && ret=0 + ;; + (emulators) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (format) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (fuchsia_reload) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--debug[Build a debug version of your app (default mode).]' \ + '--profile[Build a version of your app specialized for performance profiling.]' \ + '--release[Build a release version of your app.]' \ + '(-a --address)'{-a,--address}'[Fuchsia device network name or address.]' \ + '(-b --build-dir)'{-b,--build-dir}'[Fuchsia build directory, e.g. out/release-x86-64.]' \ + '(-g --gn-target)'{-g,--gn-target}'[GN target of the application, e.g //path/to/app:app.]' \ + '(-i --isolate-number)'{-i,--isolate-number}'[To reload only one instance, specify the isolate number, e.g. the number in foo$main-###### given by --list.]' \ + '(-l --list)'{-l,--list}'[Lists the running modules.]' \ + '(-l --no-list)'{-l,--no-list}'[Lists the running modules.]' \ + '(-n --name-override)'{-n,--name-override}'[On-device name of the application binary.]' \ + '(-2 --preview-dart-2)'{-2,--preview-dart-2}'[Preview Dart 2.0 functionality.]' \ + '(-2 --no-preview-dart-2)'{-2,--no-preview-dart-2}'[Preview Dart 2.0 functionality.]' \ + '(-t --target)'{-t,--target}'[Target app path / main entry-point file. Relative to --gn-target path, e.g. lib/main.dart. (defaults to "lib/main.dart")]' \ + && ret=0 + ;; + (ide-config) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--overwrite[When performing operations, overwrite existing files.]' \ + '--no-overwrite[When performing operations, overwrite existing files.]' \ + '--update-templates[Update the templates in the template directory from the current configuration files. This is the opposite of what ide-config usually does. Will search the flutter tree for .iml files and copy any missing ones into the template directory. If --overwrite is also specified, it will update any out-of-date files, and remove any deleted files from the template directory.]' \ + && ret=0 + ;; + (inject-plugins) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (install) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (logs) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '(-c --clear)'{-c,--clear}'[Clear log history before reading from logs.]' \ + && ret=0 + ;; + (packages) + _arguments -C \ + '1: :_package_subcomands' \ + '*::pkg-arg:->pkg-args' \ + && ret=0 + case "$state" in + (pkg-args) + case $words[1] in + (get) + _arguments \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--offline[Use cached packages instead of accessing the network.]' \ + && ret=0 + ;; + (pub) + _arguments \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (test) + _arguments \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (upgrade) + _arguments \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--offline[Use cached packages instead of accessing the network.]' \ + && ret=0 + ;; + esac + ;; + esac + ;; + + (precache) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '(-a --all-platforms)]'{-a--all-platforms}'[Precache artifacts for all platforms.]' \ + && ret=0 + ;; + (run) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--debug[Build a debug version of your app (default mode).]' \ + '--profile[Build a version of your app specialized for performance profiling.]' \ + '--release[Build a release version of your app.]' \ + '--flavor[Build a custom app flavor as defined by platform-specific build setup. Supports the use of product flavors in Android Gradle scripts. Supports the use of custom Xcode schemes.]' \ + '--trace-startup[Start tracing during startup.]' \ + '--route[Which route to load when running the app.]' \ + '--target-platform[Specify the target platform when building the app for an Android device. Ignored on iOS.]: :_target_platforms' \ + '(-t= --target=)'{-t=,--target=}'[The main entry-point file of the application, as run on the device. If the --target option is omitted, but a file name is provided on the command line, then that is used instead. (defaults to "lib/main.dart")]: :_files -g "*.dart"' \ + '--observatory-port[Listen to the given port for an observatory debugger connection. Specifying port 0 will find a random free port.Defaults to the first available port after 8100.]' \ + '--pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--full-restart[Stop any currently running application process before running the app. (defaults to on)]' \ + '--no-full-restart[Stop any currently running application process before running the app. (defaults to on)]' \ + '--start-paused[Start in a paused mode and wait for a debugger to connect.]' \ + '--enable-software-rendering[Enable rendering using the Skia software backend. This is useful when testing Flutter on emulators. By default, Flutter will attempt to either use OpenGL or Vulkan and fall back to software when neither is available.]' \ + '--skia-deterministic-rendering When combined with --enable-software-rendering, provides 100% deterministic Skia rendering.]' \ + '--trace-skia[Enable tracing of Skia code. This is useful when debugging the GPU thread. By default, Flutter will not log skia code.]' \ + '--use-test-fonts[Enable (and default to) the "Ahem" font. This is a special font used in tests to remove any dependencies on the font metrics. It is enabled when you use "flutter test". Set this flag when running a test using "flutter run" for debugging purposes. This flag is only available when running in debug mode.]' \ + '--no-use-test-fonts[Enable (and default to) the "Ahem" font. This is a special font used in tests to remove any dependencies on the font metrics. It is enabled when you use "flutter test". Set this flag when running a test using "flutter run" for debugging purposes. This flag is only available when running in debug mode.]' \ + '--build[If necessary, build the app before running. (defaults to on)]' \ + '--no-build[If necessary, build the app before running. (defaults to on)]' \ + '--hot[Run with support for hot reloading. (defaults to on)]' \ + '--no-hot[Run with support for hot reloading. (defaults to on)]' \ + '--pid-file[Specify a file to write the process id to. You can send SIGUSR1 to trigger a hot reload and SIGUSR2 to trigger a full restart.]' \ + && ret=0 + ;; + (screenshot) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '(-o --out)'{-o,--out}'[Location to write the screenshot.]: :_files' \ + '--skia=[Retrieve the last frame rendered by a Flutter app as a Skia picture using the specified observatory port. To find the observatory port number, use "flutter run --verbose" and look for "Forwarded host port ... for Observatory" in the output.]' \ + && ret=0 + ;; + (stop) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (test) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--no-pub[Whether to run "flutter packages get" before executing this command. (defaults to on)]' \ + '--name=[A regular expression matching substrings of the names of tests to run.]' \ + '--plain-name=[A plain-text substring of the names of tests to run.]' \ + '--start-paused[Start in a paused mode and wait for a debugger to connect. You must specify a single test file to run, explicitly. Instructions for connecting with a debugger and printed to the console once the test has started.]' \ + '--coverage[Whether to collect coverage information.]' \ + '--merge-coverage[Whether to merge coverage data with "coverage/lcov.base.info". Implies collecting coverage data. (Requires lcov)]' \ + '--coverage-path[Where to store coverage information (if coverage is enabled). (defaults to "coverage/lcov.info")]' \ + && ret=0 + (trace) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--start[Start tracing.]' \ + '--stop[Stop tracing.]' \ + '--out[Specify the path of the saved trace file.]' \ + '(-d --duration)'{-d,--duration}'[Duration in seconds to trace. (defaults to "10")]' \ + '--debug-port[Local port where the observatory is listening. (defaults to "8100")]' \ + && ret=0 + ;; + (update-packages) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + '--force-upgrade[Attempt to update all the dependencies to their latest versions. This will actually modify the pubspec.yaml files in your checkout.]' \ + '--no-force-upgrade[Attempt to update all the dependencies to their latest versions. This will actually modify the pubspec.yaml files in your checkout.]' \ + '--paths[Finds paths in the dependency chain leading from package specified in --from to package specified in --to.]' \ + '--no-paths[Finds paths in the dependency chain leading from package specified in --from to package specified in --to.]' \ + '--from[Used with flag --dependency-path. Specifies the package to begin searching dependency path from.]' \ + '--to[Used with flag --dependency-path. Specifies the package that the sought after dependency path leads to.]' \ + '--transitive-closure[Prints the dependency graph that is the transitive closure of packages the Flutter SDK depends on.]' \ + '--no-transitive-closure[Prints the dependency graph that is the transitive closure of packages the Flutter SDK depends on.]' \ + '--verify-only[verifies the package checksum without changing or updating deps]' \ + '--no-verify-only[verifies the package checksum without changing or updating deps]' \ + && ret=0 + ;; + (upgrade) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + (version) + _arguments -C \ + '(-h --help)'{-h,--help}'[Print this usage information.]' \ + && ret=0 + ;; + esac + ;; + esac + + + return ret + + } + + +(( $+functions[root_commands] )) || +_root_commands() { + local commands; + commands=( + "analyze:Analyze the project's Dart code." + 'assemble:Assemble and build flutter resources.' + 'attach:Attach to a running application.' + 'bash-completion:Output command line shell completion setup scripts.' + 'build:Flutter build commands.' + 'channel:List or switch flutter channels.' + 'clean:Delete the build/ directory.' + 'config:Configure Flutter settings.' + 'create:Create a new Flutter project.' + 'daemon:Run a persistent, JSON-RPC based server to communicate with devices.' + 'devices:List all connected devices.' + 'doctor:Show information about the installed tooling.' + 'drive:Runs Flutter Driver tests for the current project.' + 'emulators:List, launch and create emulators.' + 'format:Format one or more dart files.' + 'fuchsia_reload:Hot reload on Fuchsia.' + 'help:Display help information for flutter.' + 'ide-config:Configure the IDE for use in the Flutter tree.' + 'inject-plugins:Re-generates the GeneratedPluginRegistrants.' + 'install:Install a Flutter app on an attached device.' + 'logs:Show log output for running Flutter apps.' + 'packages:Commands for managing Flutter packages.' + "precache:Populates the Flutter tool's cache of binary artifacts." + 'run:Run your Flutter app on an attached device.' + 'screenshot:Take a screenshot from a connected device.' + 'stop:Stop your Flutter app on an attached device.' + 'test:Run Flutter unit tests for the current project.' + 'trace:Start and stop tracing for a running Flutter app.' + 'update-packages:Update the packages inside the Flutter repo.' + 'upgrade:Upgrade your copy of Flutter.' + 'version:List or switch flutter versions.') + _describe -t commands 'command' commands "$@" +} + +(( $+functions[_build_entities] )) || +_build_entities() { + local entities; + entities=("aot:Build an ahead-of-time compiled snapshot of your app's Dart code." + "apk:Build an Android APK file from your app." + "flx:Build a Flutter FLX file from your app." + "ios:Build an iOS application bundle (Mac OS X host only).") + _describe -t entities 'entity' entities "$@" +} + +(( $+functions[_project_templates] )) || +_project_templates() { + local templates; + templates=("app:(default) Generate a Flutter application." + "package:Generate a shareable Flutter project containing modular Dart code." + "plugin:Generate a shareable Flutter project containing an API in Dart code with a platform-specific implementation for Android, for iOS code, or for both.") + _describe -t templates 'template' templates "$@" +} + +(( $+functions[_ios_languages] )) || +_ios_languages() { + local languages; + languages=("objc:(default) Objective-C." + "swift:Swift.") + _describe -t languages 'language' languages "$@" +} + +(( $+functions[_droid_languages] )) || +_droid_languages() { + local languages; + languages=("java:(default) Java." + "kotlin:Kotlin.") + _describe -t languages 'language' languages "$@" +} + +(( $+functions[_target_platforms] )) || +_target_platforms() { + local platforms; + platforms=("default:(default) default." + "android-arm:android-arm." + "android-arm64:android-arm64.") + _describe -t platforms 'platform' platforms "$@" +} + + +(( $+functions[_package_subcomands] )) || +_package_subcomands() { + local subcommands; + subcommands=("get:Get packages in a Flutter project." + "pub:Pass the remaining arguments to Dart's 'pub' tool." + "test:Run the 'test' package." + "upgrade:Upgrade packages in a Flutter project.") + _describe -t subcommands 'subcommand' subcommands "$@" +} + +_flutter "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_force b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_force new file mode 100644 index 00000000..327d96ac --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_force @@ -0,0 +1,221 @@ +#compdef force +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for force CLI 0.22.39 (https://github.com/heroku/force). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Peter Limbach +# +# ------------------------------------------------------------------------------ + +local -a _1st_arguments +_1st_arguments=( + 'apiversion:Display/Set current API version' + 'login:force login [-i=] [<-u=username> <-p=password>]' + 'logout:Log out from force.com' + 'logins:List force.com logins used' + 'active:Show or set the active force.com account' + 'whoami:Show information about the active account' + 'describe:Describe the object or list of available objects' + 'sobject:Manage standard & custom objects' + 'bigobject:Manage big objects' + 'field:Manage sobject fields' + 'record:Create, modify, or view records' + 'bulk:Load csv file use Bulk API' + 'fetch:Export specified artifact(s) to a local directory' + 'import:Import metadata from a local directory' + 'export:Export metadata to a local directory' + 'query:Execute a SOQL statement' + 'apex:Execute anonymous Apex code' + 'trace:Manage trace flags' + 'log:Fetch debug logs' + 'eventlogfile:List and fetch event log file' + 'oauth:Manage ConnectedApp credentials' + 'test:Run apex tests' + 'security:Displays the OLS and FLS for a give SObject' + 'version:Display current version' + 'update:Update to the latest version' + 'push:Deploy artifact from a local directory' + 'aura:force aura push -f ' + 'password:See password status or reset password' + 'notify:Should notifications be used' + 'limits:Display current limits' + 'help:Show this help' + 'datapipe:Manage DataPipes' +) + +local -a _field_arguments + + +_apex_types=( + 'string' 'textarea' 'longtextarea' 'richtextarea' + 'boolean' 'double' 'number' 'autonumber' 'picklist' + 'lookup' 'masterdetail' 'geolocation' +) + +_field_arguments=( + 'list' 'create' 'delete' 'type' +) + +_sobject_arguments=( + 'list' 'create' 'delete' +) + +_bulk_arguments=( + 'insert:upload a .csv file to insert records' + 'update:upload a .csv file to update records' + 'query:run a SOQL statement to generate a .csv file on the server' + 'retrieve:retrieve a query generated .csv file from the server' + 'job:get information about a job based on job Id' + 'batch:get detailed information about a batch within a job based on job Id and batch Id' + 'batches:get a list of batches associated with a job based on job Id' +) + +__sobject_list() { + _wanted application expl 'sobjects' compadd $(force sobject list) +} + +__log_list() { + _wanted application expl 'logfiles' compadd $(force log | grep -o -e '07\w*') +} + +__login_user_list() { + # remove active user string, remove colors & print the username + _wanted application expl 'usernames' compadd $(force logins | sed 's/(active)//' | sed 's,$(printf "\033"")\\[[0-9;]*[a-zA-Z],,g' | awk '{print $1}') +} + +__login_instance_list() { + _wanted application expl 'instances' compadd $(force logins | awk '{print $3}' | sed 's/https:\/\///') +} + +__sobject_command () { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + _describe -t commands "sobject commands" _sobject_arguments + return + ;; + + (options) + case $line[1] in + (delete) + _arguments ':feature:__sobject_list' + ;; + esac + ;; + esac +} + +__field_command () { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + _describe -t commands "field commands" _field_arguments + return + ;; + + (options) + case $line[1] in + (list) + _arguments ':feature:__sobject_list' + ;; + (type) + _describe -t commands "apex types" _apex_types + return + ;; + esac + ;; + esac +} + +local expl +local -a active logins + +local curcontext="$curcontext" state line +local -A opt_args + +_arguments -C \ + ':command:->command' \ + '*::options:->options' + +case $state in + (command) + _describe -t commands "force commands" _1st_arguments + return + ;; + + (options) + case $line[1] in + (help) + _describe -t commands "command help" _1st_arguments + return + ;; + + (login) + _arguments \ + '-u[salesforce user]:userame:__login_user_list' \ + '-i[salesforce instance]:instance:__login_instance_list' \ + '-p[salesforce password]' + ;; + (bulk) + _arguments \ + '-c[bulk command]:_bulk_arguments' + ;; + + (log) + _arguments ':feature:__log_list' + ;; + + (field) + __field_command + ;; + + (sobject) + __sobject_command + ;; + + esac + ;; +esac \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fwupdmgr b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fwupdmgr new file mode 100644 index 00000000..5edcbf7a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_fwupdmgr @@ -0,0 +1,293 @@ +#compdef fwupdmgr +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for fwupdmgr 1.2.9 (https://github.com/hughsie/fwupd). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_fwupdmgr() { + + local context state state_descr line + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(- : *)'{-v,--version}'[display version information]' \ + {-v,--verbose}'[show extra debugging information]' \ + --offline'[schedule installation for next reboot when possible]' \ + --allow-reinstall'[allow re-installing existing firmware versions]' \ + --allow-older'[allow downgrading firmware versions]' \ + --force'[override warnings and force the action]' \ + '(-y, --assume-yes)'{-y,--assume-yes}'[answer yes to all questions]' \ + --sign'[sign the uploaded data with the client certificate]' \ + --no-unreported-check'[do not check for unreported history]' \ + --no-metadata-check'[do not check for old metadata]' \ + --no-reboot-check'[do not check for reboot after update]' \ + --no-history'[do not write to the history database]' \ + --show-all-devices'[show devices that are not updatable]' \ + '(-): :->command' \ + '(-)*:: :->arguments' \ + && ret=0 + + case $state in + (command) + _fwupdmgr_commands + ;; + (arguments) + curcontext=${curcontext%:*:*}:fwupdmgr-$words[1]: + if (( $+functions[_fwupdmgr_${words[1]}_args] )); then + _fwupdmgr_${words[1]}_args + else + _message "unknown command ${words[1]}" && ret=1 + fi + ;; + (*) + _message "unknown state $state" && ret=1 + ;; + esac +} + +(( $+functions[_fwupdmgr_commands] )) || +_fwupdmgr_commands() { + local commands=( + 'activate:activate devices' + 'clear-history:erase all firmware update history' + 'clear-offline:clears any updates scheduled to be updated offline' + 'clear-results:clears the results from the last update' + 'disable-remote:disables a given remote' + 'downgrade:downgrades the firmware on a device' + 'enable-remote:enables a given remote' + 'get-approved-firmware:gets the list of approved firmware' + 'get-details:gets details about a firmware file' + 'get-devices:get all devices that support firmware updates' + 'get-history:show history of firmware updates' + 'get-releases:gets the releases for a device' + 'get-remotes:gets the configured remotes' + 'get-results:gets the results from the last update' + 'get-topology:get all devices according to the system topology' + 'get-updates:gets the list of updates for connected hardware' + 'install:install a firmware file on this hardware' + 'modify-config:modifies a daemon configuration value' + 'modify-remote:modifies a given remote' + 'refresh:refresh metadata from remote server' + 'report-history:share firmware history with the developers' + 'set-approved-firmware:sets the list of approved firmware' + 'unlock:unlocks the device for firmware access' + 'update:updates all firmware to latest versions available' + 'verify:gets the cryptographic hash of the dumped firmware' + 'verify-update:update the stored metadata with current ROM contents' + ) + _describe -t commands commands commands +} + +(( $+functions[_fwupdmgr_activate_args] )) || +_fwupdmgr_activate_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_clear-history_args] )) || +_fwupdmgr_clear-history_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_clear-results_args] )) || +_fwupdmgr_clear-results_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_disable-remote_args] )) || +_fwupdmgr_disable-remote_args() { + _arguments -C \ + '1: :_fwupdmgr_remote_ids' +} + +(( $+functions[_fwupdmgr_downgrade_args] )) || +_fwupdmgr_downgrade_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_enable-remote_args] )) || +_fwupdmgr_enable-remote_args() { + _arguments -C \ + '1: :_fwupdmgr_remote_ids' +} + +(( $+functions[_fwupdmgr_get-approved-firmware_args] )) || +_fwupdmgr_get-approved-firmware_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-details_args] )) || +_fwupdmgr_get-details_args() { + _files +} + +(( $+functions[_fwupdmgr_get-devices_args] )) || +_fwupdmgr_get-devices_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-history_args] )) || +_fwupdmgr_get-history_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-releases_args] )) || +_fwupdmgr_get-releases_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_get-remotes_args] )) || +_fwupdmgr_get-remotes_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-results_args] )) || +_fwupdmgr_get-results_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_get-topology_args] )) || +_fwupdmgr_get-topology_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-updates_args] )) || +_fwupdmgr_get-updates_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_install_args] )) || +_fwupdmgr_install_args() { + _arguments -C \ + '1: :_files' \ + '2: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_TODO_args] )) || +_fwupdmgr_TODO_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_modify-config_args] )) || +_fwupdmgr_modify-config_args() { + local ret=1 + if compset -P '*,'; then + _wanted config-value expl 'config value' _fwupdmgr_config_values ${IPREFIX%=} && ret=0 + else + _wanted config-key expl 'config key' _fwupdmgr_config_keys -qS, && ret=0 + fi + return ret +} + +(( $+functions[_fwupdmgr_modify-remote_args] )) || +_fwupdmgr_modify-remote_args() { + _arguments -C \ + '1: :_fwupdmgr_remote_ids' \ + '2: :_fwupdmgr_remote_keys' \ + '3: :_fwupdmgr_remote_values' +} + +(( $+functions[_fwupdmgr_refresh_args] )) || +_fwupdmgr_refresh_args() { + _arguments -C \ + '1: :_files' \ + '2:file signature:' \ + '3: :_fwupdmgr_remote_ids' +} + +(( $+functions[_fwupdmgr_report-history_args] )) || +_fwupdmgr_report-history_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_set-approved-firmware_args] )) || +_fwupdmgr_set-approved-firmware_args() { + _message 'checksum' && ret=0 +} + +(( $+functions[_fwupdmgr_unlock_args] )) || +_fwupdmgr_unlock_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_update_args] )) || +_fwupdmgr_update_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_verify_args] )) || +_fwupdmgr_verify_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_verify-update_args] )) || +_fwupdmgr_verify-update_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_device_ids] )) || +_fwupdmgr_device_ids() { + # TODO add device name as description + local devices=($(_call_program devices fwupdmgr get-devices | grep -Po 'DeviceId:\s+\K(.*)')) + _describe -t devices 'device ID' devices +} + +(( $+functions[_fwupdmgr_remote_ids] )) || +_fwupdmgr_remote_ids() { + # TODO add remote description + local remotes=($(_call_program remotes fwupdmgr get-remotes | grep -Po 'Remote ID:\s+\K(.*)')) + _describe -t remotes 'remote ID' remotes +} + +(( $+functions[_fwupdmgr_checksums] )) || +_fwupdmgr_checksums() { + _guard '[^\-]#' 'checksum' +} + +(( $+functions[_fwupdmgr_config_keys] )) || +_fwupdmgr_config_keys() { + _guard '[^\-]#' 'config key' +} + +(( $+functions[_fwupdmgr_config_values] )) || +_fwupdmgr_config_values() { + _guard '[^\-]#' 'config value' +} + +(( $+functions[_fwupdmgr_remote_keys] )) || +_fwupdmgr_remote_keys() { + _guard '[^\-]#' 'remote key' +} + +(( $+functions[_fwupdmgr_remote_values] )) || +_fwupdmgr_remote_values() { + _guard '[^\-]#' 'remote value' +} + +_fwupdmgr "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gas b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gas new file mode 100644 index 00000000..c1735076 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gas @@ -0,0 +1,69 @@ +#compdef gas +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for gas (https://github.com/walle/gas). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Fredrik Wallgren +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + '(- 1 *)'{-v,--version}'[display version information]' \ + '(-h|--help)'{-h,--help}'[show help information]' \ + '1: :->cmds' \ + '*: :->args' && ret=0 + +case "$state" in + (cmds) + cmds=( + "version:Prints Gas's version" + "use:Uses author" + "show:Shows your current user" + "list:Lists your authors" + "import:Imports current user to gasconfig" + "help:Describe available tasks or one specific task" + "delete:Deletes author" + "add:Adds author to gasconfig" + ) + _describe -t commands 'gas command' cmds && ret=0 + ;; + (args) + case "$line[1]" in + (use|delete) + _values -S , 'authors' $(cat ~/.gas | sed -n -e 's/^\[\(.*\)\]/\1/p') && ret=0 + ;; + esac + ;; +esac + +return ret + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ghc b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ghc new file mode 100644 index 00000000..455658f6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ghc @@ -0,0 +1,618 @@ +#compdef ghc ghci ghc-pkg +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ghc (http://www.haskell.org/ghc/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Gérard Milmeister +# * Philip Dexter +# +# ------------------------------------------------------------------------------ + +local state +local WORDS + +# +# ghci +# + +_ghc_ghci () { _ghc_compiler } + +# +# ghc +# + +_ghc_compiler () +{ + _arguments \ + "-no-hs-main[Don't assume this program contains main]" \ + "-no-user-package-conf[Don't load the user's package config file]" \ + '(- *)'{--help,-\?}'[Show help information]' \ + '*-I-[Add directory to path for #include files]:directory:_files -/' \ + '*-X-[Language flags]:flag:_ghc_language_flags' \ + '*-d-[Debugging options]:flag:_ghc_debugging_options' \ + '*-f-[Compiler options]:flag:_ghc_compiler_flags' \ + '*-hide-package[Hide package]:Package:_ghc_pkg_list_packages' \ + '*-trust[Expose package and set it to be trusted]:Package:_ghc_pkg_list_packages' \ + '*-distrust[Expose package and set it to be distrusted]:Package:_ghc_pkg_list_packages' \ + '*-distrust-all[Distrust all packages by default]' \ + '*-i-[Add directory to import path]:directory:->ghc_include_directory' \ + '*-package[Expose package]:Package:_ghc_pkg_list_packages' \ + '*:file:_files -g \*.\{lhs,hs,hc,c,s\}' \ + '--info[Display information about the compiler]' \ + '--show-options[Display the supported command line options]' \ + '--interactive[Interactive mode]' \ + '--make[Compile and link a complete Haskell program]:file:_files -g "*.{lhs,hs,hc,c,s}"' \ + '--numeric-version[Display GHC version (numeric only)]' \ + '--print-libdir[Display GHC library directory]' \ + '--show-iface[Show interface]:file:_files -g "*.hi"' \ + {--supported-languages,--supported-extensions}'[Display the supported language extensions]' \ + '-C[Stop after generating C]' \ + '-E[Stop after generating preprocessed, de-litted Haskell]' \ + '-H[Minimum heap size]:size:' \ + '-M[Output Makefile rules]' \ + '-O-[Enable optimization]:level:(0 1 2)' \ + '-Rghc-timing[Summarise timing stats for GHC]' \ + '-S[Stop after generating assembler]' \ + '-V[Display GHC version]' \ + '-W[Enable normal warnings]' \ + '-Wall[Enable almost all warnings]' \ + '-Werror[Make warnings fatal]' \ + '-Wwarn[Make warnings non-fatal]' \ + '-c[Stop after generating object files]' \ + '-eventlog[Enable runtime event tracing]' \ + '-debug[Use the debugging runtime]' \ + "-dylib-install-name[On Darwin/macOS only, set the install name]" \ + '-dynamic[Use dynamic Haskell libraries]' \ + '-dynamic-too[Build dynamic object files as well as static object files during compilation]' \ + '-dynosuf[Set the output suffix for dynamic object files]' \ + '-dynload[Select one of a number of modes for finding shared libraries at runtime]' \ + '--mk-dll[DLL-creation mode (Windows only)]' \ + '-framework-path[On Darwin/macOS/iOS only, add dir to the list of directories searched for frameworks]' \ + '-shared[Generate a shared library (as opposed to an executable)]' \ + '-staticlib[On Darwin/macOS/iOS only, generate a standalone static library (as opposed to an executable)]' \ + '-e[Evaluate expression]' \ + '-hide-all-packages[Hide all packages by default]' \ + '-hpcdir[Directory to deposit .mix files during compilation (default is .hpc)]' \ + '-n[Do a dry run]' \ + '-o[Set output filename]:file:_files' \ + '-outputdir[Set output directory]:directory:_files -/' \ + '-package-name[Compile to be part of package]' \ + '-hide-all-packages[Hide all packages by default]' \ + '-package-db[Add file to the package db stack]:file:_files' \ + '-clear-package-db[Clear the package db stack]' \ + '-msse2[(x86 only) Use SSE2 for floating point]' \ + '-monly-\[432\]-regs[(x86 only) give some registers back to the C compiler]' \ + '-no-global-package-db[Remove the global package db from the stack]' \ + '-global-package-db[Add the global package db to the stack]' \ + "-no-user-package-db[Remove the user's package db from the stack]" \ + "-user-package-db[Add the user's package db to the stack]" \ + "-no-auto-link-packages[Don't automatically link in the base and rts packages]" \ + '-optL[pass option to the literate pre-processor]' \ + '-optP[pass option to cpp (with -cpp only)]' \ + '-optF[pass option to the custom pre-processor]' \ + '-optc[pass option to the C compiler]' \ + '-optlo[pass option to the LLVM optimiser]' \ + '-optlc[pass option to the LLVM compiler]' \ + '-optm[pass option to the mangler]' \ + '-opta[pass option to the assembler]' \ + '-optl[pass option to the linker]' \ + '-optdll[pass option to the DLL generator]' \ + '-optwindres[pass option to windres.]' \ + '-prof[Turn on profiling]' \ + '-pgmL[Use cmd as the literate pre-processor]' \ + '-pgmP[Use cmd as the C pre-processor (with -cpp only)]' \ + '-pgmc[Use cmd as the C compiler]' \ + '-pgms[Use cmd as the splitter]' \ + '-pgml[Use cmd as the linker]' \ + '-pgmdll[Use cmd as the DLL generator]' \ + '-pgmF[Use cmd as the pre-processor (with -F only)]' \ + '-pgmwindres[Use cmd as the program for embedding manifests on Windows]' \ + '-pgmlibtool[Use cmd as the command for libtool (with -staticlib only)]' \ + '-rtsopts[Only a minimum of safe options can be given to RTS]' \ + '-rtsopts=[Control whether the RTS behavior can be tweaked via command-line flags and the GHCRTS environment variable (none, some, or all)]' \ + '-with-rtsopts=[Set the default RTS options]' \ + '-threaded[Use the threaded runtime]' \ + '-ticky[Turn on ticky-ticky profiling]' \ + '-tmpdir[Set the directory for temporary files]:directory:_files -/' \ + '-v-[Control verbosity]:level:(0 1 2 3 4 5)' \ + '-w[Disable all warnings]' \ + '-x[Override default behaviour for source files]:suffix:(hs lhs hc c s o hspp)' \ + '-hcsuf[Set the suffix to use for intermediate]:suffix:' \ + '-hidir[Set directory for interface files]:directory:_files -/' \ + '-hisuf[Set the suffix to use for interface files]:suffix:' \ + '-odir[Set directory for object files]:directory:_files -/' \ + '-ohi[Set the filename in which to put the interface]:filename:_files -/' \ + '-osuf[Set the output file suffix]:suffix:' \ + '-stubdir[Redirect FFi stub files]:directory:_files -/' \ + '-dumpdir[Redirect dump files]:directory:_files -/' \ + '-outputdir[Set output directory]:directory:_files -/' \ + '-keep-hc-files[Retain intermediate .hc files]' \ + '-keep-llvm-files[Retain intermediate LLVM .ll files]' \ + '-keep-s-files[Retain intermediate .s files]' \ + '-keep-raw-s-files[Retain intermediate .raw_s files]' \ + '-keep-tmp-files[Retain all intermediate temporary files]' \ + '-static[Use static Haskell libraries]' \ + '-split-objs[Split objects (for libraries)]' \ + '-no-link[Omit linking]' \ + '-main-is[Set main module and function]:function:' \ + '*-L-[Add dir to the list of directories searched for libraries]:directory:_files -/' \ + '*-l-[Link in library]:library:->library' + + [[ -n "$state" ]] && + case "$state" in + ghc_include_directory) _ghc_include_directory ;; + library) + _wanted libraries expl library \ + compadd - \ + ${^=LD_LIBRARY_PATH:-/usr/lib /usr/local/lib}/lib*.(a|so*)(:t:fr:s/lib//) \ + && ret=0 + esac +} + + +_ghc_include_directory () +{ + compset -P '*:' + compset -S ':*' + _path_files -r': ' -/ +} + +_ghc_compiler_flags () +{ + local _ghc_compiler_flags_list + _ghc_compiler_flags_list=( + 'ghci-hist-size:Set the number of entries GHCi keeps for \:history' + 'print-explicit-foralls:Print explicit forall quantification in types' + 'print-explicit-kinds:Print explicit kind foralls and kind arguments in types' + {no-,}'break-on-error:Break on uncaught exceptions and errors' + {no-,}'break-on-exception:Break on any exception thrown' + {no-,}'case-merge:Enable case-merging' + {no-,}'defer-type-errors:Defer as many type errors as possible until runtime' + {no-,}'dicts-strict:Make dictionaries strict' + {no-,}'do-eta-reduction:Enable eta-reduction' + {no-,}'do-lambda-eta-expansion:Enable lambda eta-reduction' + 'eager-blackholing:Turn on eager blackholing' + {no-,}'enable-rewrite-rules:Switch on all rewrite rules (including rules generated by automatic specialisation of overloaded functions)' + 'error-spans:Output full span in error messages' + 'ext-core:Generate .hcr external Core file' + 'force-recomp:Turn off recompilation checking' + {no-,}'float-in:Turn on the float-in transformation' + {no-,}'full-laziness:Turn on full laziness (floating bindings outwards)' + {no-,}'fun-to-thunk:Allow worker-wrapper to convert a function closure into a thunk if the function does not use any of its arguments. Off by default.' + {no-,}'glasgow-exts:Enable most language extensions' + {no-,}'helpful-errors:Make suggestions for mis-spelled names' + 'history-size:Set simplification history size' + {no-,}'ignore-asserts:Ignore assertions in the source' + {no-,}'ignore-interface-pragmas:Ignore pragmas in interface files' + {no-,}'loopification:Turn saturated self-recursive tail-calls into local jumps in the generated assembly' + {no-,}'late-dmd-anal:Run demand analysis again, at the end of the simplification pipeline' + {no-,}'liberate-case:Turn on the liberate-case transformation' + 'liberate-case-threshold=:Set the size threshold for the liberate-case transformation (default 200)' + 'no-liberate-case-threshold:Set the size threshold for the liberate-case transformation (default 200)' + {no-,}'max-relevant-bindings=N:Set the maximum number of bindings to display in type error messages (default 6).' + 'max-worker-args=:If a worker has that many arguments, none will be unpacked anymore (default 10)' + 'max-simplifier-iterations=:Set the max iterations for the simplifier' + 'no-asm-mangling:Turn off assembly mangling' + 'no-black-holing:Turn off black holing' + "no-hi-version-check:Don't complain about .hi file mismatches" + 'no-implicit-import-qualified:Turn off implicit qualified import of everything in GHCi' + 'no-print-bind-contents:Turn off printing of binding contents in GHCi' + 'no-opt-coercion:Turn off the coercion optimiser' + 'no-ghci-history:Do not use the load/store the GHCi command history from/to ghci_history' + 'no-ghci-sandbox:Turn off the GHCi sandbox. Means computations are run in the main thread, rather than a forked thread' + 'no-gen-manifest:Do not generate a manifest file (Windows only)' + 'no-embed-manifest:Do not embed the manifest in the executable (Windows only)' + "no-shared-implib:Don't generate an import library for a DLL (Windows only)" + 'no-pre-inlining:Turn off pre-inlining' + 'no-state-hack:Turn off the "state hack" whereby any lambda with a real-world state token as argument is considered to be single-entry' + {no-,}'print-bind-result:Turn on printing of binding results in GHCi' + {no-,}'print-evld-with-show:Enable usage of Show instances in \:print' + 'unregisterised:Unregisterised compilation' + 'asm:Use the native code generator' + 'via-C:Compile via C' + 'no-code:Omit code generation' + 'byte-code:Generate byte-code' + 'object-code:Generate object code' + 'hpc:Turn on Haskell program coverage instrumentation' + 'PIC:Generate position-independent code' + 'plugin=:Load a plugin exported by a given module' + 'plugin-opt=:Give arguments to a plugin module' + 'context-stack=:Set the limit for context reduction (default is 20)' + 'type-function-depth=:Set the limit for type function reductions (default is 200)' + 'force-recomp:Turn off recompilation checking' + {no-,}"omit-interface-pragmas:Don't generate interface pragmas" + 'package-trust:Enable Safe Haskell trusted package requirement for trustworthy modules' + {no-,}'pedantic-bottoms:Make GHC be more precise about its treatment of bottom' + {no-,}'disambiguate-record-fields:Enable record field disambiguation' + {no-,}'irrefutable-tuples:Make tuple pattern matching irrefutable' + {no-,}'vectorise:Enable vectorisation of nested data parallelism' + {no-,}'avoid-vect:Enable vectorisation avoidance' + {no-,}'excess-precision:Enable excess intermediate precision' + {no-,}'prof-auto:Auto-add SCCs to all bindings not marked INLINE' + {no-,}'prof-auto-top:Auto-add SCCs to all top-level bindings not marked INLINE' + {no-,}'prof-auto-exported:Auto-add SCCs to all exported bindings not marked INLINE' + {no-,}'prof-cafs:Auto-add SCCs to all CAFs' + {no-,}'prof-count-entries:Collect entry counts' + 'simplifier-phases:Set the number of phases for the simplifier (default 2)' + 'simpl-tick-factor=:Set the percentage factor for simplifier ticks (default 100)' + {no-,}'spec-constr:Turn on the SpecConstr transformation' + {no-,}'spec-constr-threshold=:Set the size threshold for the SpecConstr transformation (default 200)' + {no-,}'spec-constr-count=:Set the maximum number of specialisations that will be created for any one function by the SpecConstr transformation (default 3)' + 'strictness=before=:Run an additional strictness analysis before a simplifier phase' + {no-,}'static-argument-transformation:Turn on the static argument transformation' + {no-,}'unbox-strict-fields:Flatten strict constructor fields' + {no-,}'unbox-small-strict-fields:Flatten strict constructor fields with a pointer-sized representation' + {no-,}'unfolding-creation-threshold:Tweak unfolding settings' + {no-,}'unfolding-fun-discount:Tweak unfolding settings' + {no-,}'unfolding-keeness-factor:Tweak unfolding settings' + {no-,}'unfolding-use-threshold:Tweak unfolding settings' + {no-,}'warn-warnings-deprecations:Warn about uses of functions & types that have warnings or deprecated pragmas' + {no-,}'warn-deprecated-flags:Warn about uses of commandline flags that are deprecated' + {no-,}'warn-duplicate-exports:Warn when an entity is exported multiple times' + {no-,}'warn-hi-shadowing:Warn when a .hi file in the current directory shadows a library' + {no-,}'warn-implicit-prelude:Warn when the Prelude is implicitly imported' + {no-,}'warn-incomplete-patterns:Warn when a pattern match could fail' + {no-,}'warn-incomplete-record-updates:Warn when a record update could fail' + {no-,}'warn-missing-fields:Warn when fields of a record are uninitialised' + {no-,}'warn-missing-methods:Warn when class methods are undefined' + {no-,}'warn-missing-signatures:Warn about top-level functions without signatures' + {no-,}'warn-duplicate-constraints:Warn when a constraint appears duplicated in a type signature' + {no-,}'warn-identities:Warn about uses of Prelude numeric conversions that are probably the identity (and hence could be omitted)' + {no-,}'warn-incomplete-uni-patterns:Warn when a pattern match in a lambda expression or pattern binding could fail' + {no-,}'warn-lazy-unlifted-bindings:(Deprecated) warn when a pattern binding looks lazy but must be strict' + {no-,}'warn-missing-import-lists:Warn when an import declaration does not explicitly list all the names brought into scope' + {no-,}'warn-missing-local-sigs:Warn about polymorphic local bindings without signatures' + {no-,}'warn-monomorphism-restriction:Warn when the Monomorphism Restriction is applied' + {no-,}'warn-name-shadowing:Warn when names are shadowed' + {warn-orphans,warn-auto-orphans}':Warn when the module contains orphan instance declarations or rewrite rules' + {no-,}'warn-overlapping-patterns:Warn about overlapping patterns' + {no-,}'warn-tabs:Warn if there are tabs in the source file' + {no-,}'warn-type-defaults:Warn when defaulting happens' + {no-,}"warn-unrecognised-pragmas:Warn about uses of pragmas that GHC doesn't recognise" + {no-,}'warn-unused-binds:Warn about bindings that are unused' + {no-,}'warn-unused-imports:Warn about unnecessary imports' + {no-,}"warn-unused-matches:Warn about variables in patterns that aren't used" + {no-,}'warn-unused-do-bind:Warn about do bindings that appear to throw away values of types other than ()' + {no-,}'warn-wrong-do-bind:Warn about do bindings that appear to throw away monadic values that you should have bound instead' + {no-,}'warn-unsafe:Warn if the module being compiled is regarded to be unsafe' + {no-,}'warn-safe:Warn if the module being compiled is regarded to be safe' + {no-,}'warn-amp:Warn on definitions conflicting with the Applicative-Monad Proposal (AMP)' + {no-,}'warn-typed-holes:Enable holes in expressions' + ) + _describe -t flags 'ghc' _ghc_compiler_flags_list || compadd "$@" +} + +_ghc_debugging_options () +{ + local _ghc_debugging_options_list + _ghc_debugging_options_list=( + "dump-hi:Dump the new interface to stdout" + "dump-hi-diffs:Show the differences vs. the old interface" + "dump-minimal-imports:Dump a minimal set of imports" + "core-lint:Turn on internal sanity checking" + "dump-asm:Dump assembly" + "dump-bcos:Dump interpreter byte code" + "dump-cmm:Dump C-- output" + "dump-cpranal:Dump output from CPR analysis" + "dump-cse:Dump CSE output" + "dump-deriv:Dump deriving output" + "dump-ds:Dump desugarer output" + 'dump-flatC:Dump "flat" C' + "dump-foreign:Dump foreign export stubs" + "dump-hpc:Dump after instrumentation for program coverage" + "dump-inlinings:Dump inlining info" + "dump-occur-anal:Dump occurrence analysis output" + "dump-opt-cmm:Dump the results of C-- to C-- optimising passes" + "dump-parsed:Dump parse tree" + "dump-prep:Dump prepared core" + "dump-rn:Dump renamer output" + "dump-rules:Dump rules" + "dump-simpl:Dump final simplifier output" + "dump-simpl-phases:Dump output from each simplifier phase" + "dump-simpl-iterations:Dump output from each simplifier iteration" + "dump-spec:Dump specialiser output" + "dump-splices:Dump TH spliced expressions" + "dump-stg:Dump final STG" + "dump-stranal:Dump strictness analyser output" + "dump-tc:Dump typechecker output" + "dump-types:Dump type signatures" + "dump-worker-wrapper:Dump worker-wrapper output" + "dump-if-trace:Trace interface files" + "dump-tc-trace:Trace typechecker" + "dump-to-file:Dump to files instead of stdout" + "dump-core-stats:Print a one-line summary of the size of the Core program at the end of the optimisation pipeline" + "dump-llvm:Dump LLVM intermediate code" + "dump-rule-firings:Dump rule firing info" + "dump-rule-rewrites:Dump detailed rule firing info" + "dump-vect:Dump vectoriser input and output" + "dump-strsigs:Dump strictness signatures" + "dump-vt-trace:Trace vectoriser" + "dump-rn-trace:Trace renamer" + "dump-rn-stats:Renamer stats" + "dump-simpl-stats:Dump simplifier stats" + "suppress-all:In core dumps, suppress everything (except for uniques) that is suppressible" + "suppress-uniques:Suppress the printing of uniques in debug output (easier to use diff)" + "suppress-idinfo:Suppress extended information about identifiers where they are bound" + "suppress-module-prefixes:Suppress the printing of module qualification prefixes" + "suppress-type-signatures:Suppress type signatures" + "suppress-type-applications:Suppress type applications" + "suppress-coercions:Suppress the printing of coercions in Core dumps to make them shorter" + "no-debug-output:Suppress unsolicited debugging output" + "ppr-debug:Turn on debug printing (more verbose)" + "ppr-noprags:Don't output pragma info in dumps" + "ppr-user-length:Set the depth for printing expressions in error msgs" + "ppr-colsNNN:Set the width of debugging output. For example -dppr-cols200" + "ppr-case-as-let:Print single alternative case expressions as strict lets" + "source-stats:Dump haskell source stats" + "cmm-lint:C-- pass sanity checking" + "stg-lint:STG pass sanity checking" + "stg-stats:Dump STG stats" + "verbose-core2core:Show output from each core-to-core pass" + "verbose-stg2stg:Show output from each STG-to-STG pass" + "show-passes:Print out each pass name as it happens" + "faststring-stats:Show statistics for fast string usage when finished" + ) + _describe -t flags 'ghc' _ghc_debugging_options_list || compadd "$@" +} + + +_ghc_language_flags () +{ + local _ghc_language_flags_list + _ghc_language_flags_list=( + "AllowAmbiguousTypes:Allow the user to write ambiguous types, and the type inference engine to infer them" + "Arrows:Enable arrow notation extension" + "AutoDeriveTypeable:Automatically derive Typeable instances for every datatype and type class declaration" + "BangPatterns:Enable bang patterns" + "ConstraintKinds:Enable a kind of constraints" + "CPP:Enable the C preprocessor" + "ConstrainedClassMethods:Enable constrained class methods" + "DataKinds:Enable datatype promotion" + "DefaultSignatures:Enable default signatures" + "DeriveDataTypeable:Enable deriving for the Data and Typeable classes" + "DeriveGeneric:Enable deriving for the Generic class" + "DisambiguateRecordFields:Enable record field disambiguation" + "EmptyCase:Allow empty case alternatives" + "EmptyDataDecls:Enable empty data declarations" + "ExistentialQuantification:Enable existential quantification" + "ExplicitForAll:Enable explicit universal quantification" + "ExplicitNamespaces:Enable using the keyword type to specify the namespace of entries in imports and exports" + "ExtendedDefaultRules:Use GHCi's extended default rules in a normal module" + "FlexibleContexts:Enable flexible contexts" + "FlexibleInstances:Enable flexible instances" + "ForeignFunctionInterface:Enable foreign function interface" + "FunctionalDependencies:Enable functional dependencies" + "GADTs:Enable generalised algebraic data types" + "GADTSyntax:Enable generalised algebraic data type syntax" + "GeneralizedNewtypeDeriving:Enable newtype deriving" + "Generics:Enable generic classes" + "ImplicitParams:Enable Implicit Parameters" + "ImpredicativeTypes:Enable impredicative types" + "IncoherentInstances:Enable incoherent instances" + "InterruptibleFFI:Enable interruptible FFI" + "KindSignatures:Enable kind signatures" + "LambdaCase:Enable lambda-case expressions" + "LiberalTypeSynonyms:Enable liberalised type synonyms" + "MonadComprehensions:Enable monad comprehensions" + "MonoLocalBinds:Enable do not generalise local bindings" + "MultiParamTypeClasses:Enable multi parameter type classes" + "MultiWayIf:Enable multi-way if-expressions" + "NamedFieldPuns:Enable record puns" + "NegativeLiterals:Enable support for negative literals" + "NewQualifiedOperators:Enable new qualified operator syntax" + "NoImplicitPrelude:Don't implicitly import Prelude" + "NoMonoPatBinds:Make pattern bindings polymorphic" + "NoMonomorphismRestriction:Disable the monomorphism" + "NoNPlusKPatterns:Disable support for n+k patterns" + "NoTraditionalRecordSyntax:Disable support for traditional record syntax (as supported by Haskell 98) C {f = x}" + "NullaryTypeClasses:Enable nullary (no parameter) type classes" + "NumDecimals:Enable support for 'fractional' integer literals" + "OverlappingInstances:Enable overlapping instances" + "OverloadedLists:Enable overloaded lists" + "OverloadedStrings:Enable overloaded string literals" + "PArr:Enable parallel arrays" + "PackageImports:Enable package-qualified imports" + "ParallelArrays:Enable parallel arrays" + "ParallelListComp:Enable parallel list comprehensions" + "PatternGuards:Enable pattern guards" + "PolyKinds:Enable kind polymorphism" + "PolymorphicComponents:Enable polymorphic components for data constructors" + "QuasiQuotes:Enable quasiquotation" + "Rank2Types:Enable rank-2 types" + "RankNTypes:Enable rank-N types" + "RebindableSyntax:Employ rebindable syntax" + "RecordWildCards:Enable record wildcards" + "RecursiveDo:Enable recursive do (mdo) notation" + "RelaxedPolyRec:Relaxed checking for mutually-recursive polymorphic functions" + "Safe:Enable the Safe Haskell Safe mode" + "ScopedTypeVariables:Enable lexically-scoped type variables" + "StandaloneDeriving:Enable standalone deriving" + "TemplateHaskell:Enable Template Haskell" + "TransformListComp:Enable transform list comprehensions" + "TypeFamilies:Enable type families" + "TypeOperators:Enable type operators" + "TypeSynonymInstances:Enable type synonyms" + "Trustworthy:Enable the Safe Haskell Trustworthy mode" + "UnboxedTuples:Enable unboxed tuples" + "UndecidableInstances:Enable undecidable instances" + "UnicodeSyntax:Enable unicode syntax" + "UnliftedFFITypes:Enable unlifted FFI types" + "Unsafe:Enable Safe Haskell Unsafe mode" + "ViewPatterns:Enable view patterns" + 'MagicHash:Allow "#" as a postfix modifier on identifiers' + ) + _describe -t flags 'ghc' _ghc_language_flags_list || compadd "$@" +} + +# +# ghc-pkg +# + +_ghc_pkg () +{ + WORDS=() + for w in $words[1,(($CURRENT - 1))]; do + if [[ $w != --* ]]; then WORDS+=$w; fi + done + _arguments '*:command:_ghc_pkg_command' +} + +_ghc_pkg_command() +{ + local -a _ghc_pkg_cmds + _ghc_pkg_cmds=( + "register:Register the package using package description" + "update:Register the package (overwriting existing package)" + "unregister:Unregister the specified package" + "expose:Expose the specified package" + "hide:Hide the specified package" + "list:List registered packages" + "find-module:List registered packages exposing module" + "latest:Prints the highest registered version of a package" + "check:Check the consistency of package dependencies and list broken packages" + "describe:Give the registered description for the specified package" + "field:Extract the specified field of the package description" + "dump:Dump the registered description for every package" + ) + + if (( $#WORDS == 1 )); then + _describe -t commands 'command' _ghc_pkg_cmds || compadd "$@" + else + local curcontext="$curcontext" + cmd="${${_ghc_pkg_cmds[(r)$WORDS[2]:*]%%:*}}" + if (( $#cmd )); then + _arguments \ + "--user[Use current user's package database]" \ + '--global[User the global package database]' \ + {-f,--package-conf=}'[Use the specified package config file]:Package config file:_files' \ + '--no-user-package-conf[Never reader the user package config]' \ + {-V,--version}'[Output version information and exit]' \ + '--force[Ignore missing directories and libraries only]' \ + {-g,--auto-ghci-libs}'[Automatically build libs for GHCi]' \ + {-?,--help}'[Display this help and exit]' \ + '--simple-output[Print output in easy-to-parse format for some commands]' \ + '--names-only[Only print package names, not versions]' \ + '--ignore-case[Ignore case for substring matching]' \ + '*:argument:_ghc_pkg_'$cmd + else + _message "unknown ghc-pkg command: $WORDS[2]" + fi + fi +} + +_ghc_pkg_unregister () { _ghc_pkg_list_packages } + +_ghc_pkg_expose () { _ghc_pkg_list_packages } + +_ghc_pkg_hide () { _ghc_pkg_list_packages } + +_ghc_pkg_latest () { _ghc_pkg_list_packages } + +_ghc_pkg_describe () { _ghc_pkg_list_packages } + +_ghc_pkg_field () +{ + _ghc_pkg_available_packages + if (( $#WORDS == 2 )); then + compadd "$@" -a -- _ghc_pkg_packages + elif (( $#WORDS == 3 )); then + compset -P '*,' + compset -S ',*' + compadd "$@" -S ',' -q -- \ + name version license copyright maintainer \ + stability homepage package-url description \ + category author exposed exposed-modules \ + hidden-modules import-dirs hs-libraries \ + extra-libraries extra-ghci-libraries include-dirs \ + includes depends hugs-options cc-options ld-options \ + framework-dirs frameworks haddock-interfaces \ + haddock-html + fi +} + +_ghc_pkg_register () { _files } + +_ghc_pkg_update () { _files } + +_ghc_pkg_list () { _ghc_pkg_list_packages } + +_ghc_pkg_find-module () +{ + if (( $#WORDS == 2)); then + if ( [[ ${+_ghc_modules} -eq 0 ]] || _cache_invalid GHC_MODULES ) && + ! _retrieve_cache GHC_MODULES; + then + _ghc_modules=( $(ghc-pkg dump | sed -n '/^exposed-modules:/{s/^exposed-modules:[ ]\+\(.*\)$/\1/;s/ /\n/;p;be};b;:e;n;/^ /{s/^[ ]\+\(.*\)$/\1/;s/ /\n/;p;be}') ) + _store_cache GHC_MODULES _ghc_modules + fi + compadd "$@" -a -- _ghc_modules + fi +} + +_ghc_pkg_dump () {} + +_ghc_pkg_check () {} + +_ghc_pkg_available_packages () +{ + if ( [[ ${+_ghc_pkg_packages_pkgs} -eq 0 ]] || _cache_invalid GHC_PACKAGES ) && + ! _retrieve_cache GHC_PACKAGES; + then + _ghc_pkg_packages=( $(ghc-pkg list --simple-output --names-only) ) + _store_cache GHC_PACKAGES _ghc_pkg_packages + fi +} + +_ghc_pkg_list_packages () +{ + _ghc_pkg_available_packages + compadd "$@" -a -- _ghc_pkg_packages +} + + +# +# dispatcher +# + +case $service in + ghc) + _ghc_compiler + ;; + ghci) + _ghc_ghci + ;; + ghc-pkg) + _ghc_pkg + ;; +esac diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gist b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gist new file mode 100644 index 00000000..77544a63 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gist @@ -0,0 +1,119 @@ +#compdef gist +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for gist (https://github.com/defunkt/gist) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# * Patrick Ziegler +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +_arguments -C \ + '(--login)--login[Authenticate gist on this computer.]' \ + '(-f --filename)'{-f,--filename}'[Sets the filename and syntax type.]:NAME' \ + '(-t --type)'{-t,--type}'[Sets the file extension and syntax type.]:EXT' \ + '(-p --private)'{-p,--private}'[Makes your gist private.]' \ + '(--no-private)'--no-private'[Makes your gist no private.]' \ + '(-d --description)'{-d,--description}'[Adds a description to your gist.]:DESCRIPTION' \ + '(-s --shorten)'{-s,--shorten}'[Shorten the gist URL using git.io.]' \ + '(-u --update)'{-u,--update}'[Update an existing gist.]:URL ID' \ + '(-a --anonymous)'{-a,--anonymous}'[Create an anonymous gist.]' \ + '(-c --copy)'{-c,--copy}'[Copy the resulting URL to the clipboard]' \ + '(-e --embed)'{-e,--embed}'[Copy the embed code for the gist to the clipboard]' \ + '(-o --open)'{-o,--open}'[Open the resulting URL in a browser]' \ + '(--no-open)'--no-open'[No open the resulting URL in a browser]' \ + '(-P --paste)'{-P,--paste}'[Paste from the clipboard to gist]' \ + '(-h --help)'{-h,--help}'[print options help]' \ + '(-v --version)'{-v,--version}'[print version]' \ + '(-r --read)'{-r,--read}'[Read a gist and print out the contents]:user gists:user_gists' \ + '*: :_files' && ret=0 + +_user_gists_cache_policy() { + # rebuild if cache is more than a day old + local -a oldp + oldp=( "$1"(mh+1) ) + (( $#oldp )) +} + +user_gists() { + local update_policy ret=1 + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + if [[ -z "$update_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _user_gists_cache_policy + fi + + # stores the gists of the logged in user in the format ID[Description] + _list=() + _cached_gists="user_gists" + + # retrieve/Write gists from/to cache + if _cache_invalid $_cached_gists || ! _retrieve_cache $_cached_gists; then + _gists=$(gist -l) + + if [ $? -eq 0 ]; then + _store_cache $_cached_gists _gists + else + # some error occurred, the user is probably not logged in + # set _gists to an empty string so that no completion is attempted + _gists="" + fi + else + _retrieve_cache $_cached_gists + fi + + if [ -n "$_gists" ]; then + echo "$_gists" | while read -r line; do + # Splitting the gist -l output + url="$(echo "$line" | cut -d " " -f 1 | cut -d "/" -f 4)" + # gists w/o descriptions can have only one column in the output, those + # have their description set to an empty string + description="$(echo "$line" | awk '{if(NF > 1){$1=""; print $0}}')" + + _list+=( "${url}[${description}]" ) + done + + _values "gists" $_list + ret=0 + fi + + return ret +} + +return ret diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-flow b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-flow new file mode 100644 index 00000000..13fe595f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-flow @@ -0,0 +1,443 @@ +#compdef git-flow +# ------------------------------------------------------------------------------ +# Copyright (c) 2010-2015 Justin Hileman +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for git-flow (http://github.com/nvie/gitflow). +# +# Source: https://github.com/bobthecow/git-flow-completion +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Justin Hileman (https://github.com/bobthecow) +# * Yusuke Muraoka (https://github.com/jbking) +# * Vincent Driessen (https://github.com/nvie) +# * Zifei Tong (https://github.com/chevalun) +# * Ben O'Hara (https://github.com/benohara) +# +# ------------------------------------------------------------------------------ + + +_git-flow () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'init:Initialize a new git repo with support for the branching model.' + 'feature:Manage your feature branches.' + 'release:Manage your release branches.' + 'hotfix:Manage your hotfix branches.' + 'support:Manage your support branches.' + 'version:Shows version information.' + ) + _describe -t commands 'git flow' subcommands + ;; + + (options) + case $line[1] in + + (init) + _arguments \ + -f'[Force setting of gitflow branches, even if already configured]' \ + -d'[Use default branch naming conventions and prefixes]' + ;; + + (version) + ;; + + (hotfix) + __git-flow-hotfix + ;; + + (release) + __git-flow-release + ;; + + (feature) + __git-flow-feature + ;; + + (support) + __git-flow-support + ;; + + esac + ;; + esac +} + +__git-flow-release () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'start:Start a new release branch.' + 'finish:Finish a release branch.' + 'list:List all your release branches. (Alias to `git flow release`)' + 'publish:Publish this release branch to origin.`)' + 'track:Track a release branch from origin.`)' + ) + _describe -t commands 'git flow release' subcommands + _arguments \ + -v'[Verbose (more) output]' + ;; + + (options) + case $line[1] in + + (start) + _arguments \ + -F'[Fetch from origin before performing finish]'\ + ':version:__git_flow_version_list' + ;; + + (finish) + _arguments \ + -F'[Fetch from origin before performing finish]' \ + -s'[Sign the release tag cryptographically]'\ + -u'[Use the given GPG-key for the digital signature (implies -s)]'\ + -m'[Use the given tag message]'\ + -n'[Don'\''t tag this release]'\ + -p'[Push to $ORIGIN after performing finish]'\ + -k'[Keep branch after performing finish]'\ + ':version:__git_flow_version_list' + ;; + + (publish) + _arguments \ + ':version:__git_flow_version_list' + ;; + + (track) + _arguments \ + ':version:__git_flow_version_list' + ;; + + + + *) + _arguments \ + -v'[Verbose (more) output]' + ;; + esac + ;; + esac +} + +__git-flow-hotfix () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'start:Start a new hotfix branch.' + 'finish:Finish a hotfix branch.' + 'list:List all your hotfix branches. (Alias to `git flow hotfix`)' + 'publish:Publish this hotfix branch to origin`)' + ) + _describe -t commands 'git flow hotfix' subcommands + _arguments \ + -v'[Verbose (more) output]' + ;; + + (options) + case $line[1] in + + (start) + _arguments \ + -F'[Fetch from origin before performing finish]'\ + ':hotfix:__git_flow_version_list'\ + ':branch-name:__git_branch_names' + ;; + + (finish) + _arguments \ + -F'[Fetch from origin before performing finish]' \ + -s'[Sign the release tag cryptographically]'\ + -u'[Use the given GPG-key for the digital signature (implies -s)]'\ + -m'[Use the given tag message]'\ + -p'[Push to $ORIGIN after performing finish]'\ + ':hotfix:__git_flow_hotfix_list' + ;; + + (publish) + _arguments \ + ':hotfix:__git_flow_hotfix_list' + ;; + + *) + _arguments \ + -v'[Verbose (more) output]' + ;; + esac + ;; + esac +} + +__git-flow-feature () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'start:Start a new feature branch.' + 'finish:Finish a feature branch.' + 'list:List all your feature branches. (Alias to `git flow feature`)' + 'publish:Publish this feature branch to origin.' + 'track:Track a feature branch from origin.' + 'diff:Show a diff of changes since this feature branched off.' + 'rebase:Rebase a feature branch on top of develop.' + 'checkout:Check out (switch to) the given feature branch.' + 'pull:Pull a feature branch from a remote peer.' + ) + _describe -t commands 'git flow feature' subcommands + _arguments \ + -v'[Verbose (more) output]' + ;; + + (options) + case $line[1] in + + (start) + _arguments \ + -F'[Fetch from origin before performing finish]'\ + ':feature:__git_flow_feature_list'\ + ':branch-name:__git_branch_names' + ;; + + (finish) + _arguments \ + -F'[Fetch from origin before performing finish]' \ + -r'[Finish branch by rebasing first]'\ + -k'[Keep branch after performing finish]'\ + -D'[Force delete feature branch after finish]'\ + ':feature:__git_flow_feature_list' + ;; + + (publish) + _arguments \ + ':feature:__git_flow_feature_list'\ + ;; + + (track) + _arguments \ + ':feature:__git_flow_feature_list'\ + ;; + + (diff) + _arguments \ + ':branch:__git_branch_names'\ + ;; + + (rebase) + _arguments \ + -i'[Do an interactive rebase]' \ + ':branch:__git_branch_names' + ;; + + (checkout) + _arguments \ + ':branch:__git_flow_feature_list'\ + ;; + + (pull) + _arguments \ + ':remote:__git_remotes'\ + ':branch:__git_branch_names' + ;; + + *) + _arguments \ + -v'[Verbose (more) output]' + ;; + esac + ;; + esac +} + +__git-flow-support () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + 'start:Start a new support branch.' + 'list:List all your support branches. (Alias to `git flow support`)' + ) + _describe -t commands 'git flow support' subcommands + _arguments \ + -v'[Verbose (more) output]' + ;; + + (options) + case $line[1] in + + (start) + _arguments \ + -F'[Fetch from origin before performing finish]'\ + ':feature:__git_flow_support_list'\ + ':branch-name:__git_branch_names' + ;; + + *) + _arguments \ + -v'[Verbose (more) output]' + ;; + esac + ;; + esac +} + +__git_flow_version_list () +{ + local expl + declare -a versions + + versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}}) + __git_command_successful || return + + _wanted versions expl 'version' compadd $versions +} + +__git_flow_feature_list () +{ + local expl + declare -a features + + features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}}) + __git_command_successful || return + + _wanted features expl 'feature' compadd $features +} + +__git_remotes () { + local expl gitdir remotes + + gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null) + __git_command_successful || return + + remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]}) + __git_command_successful || return + + # TODO: Should combine the two instead of either or. + if (( $#remotes > 0 )); then + _wanted remotes expl remote compadd $* - $remotes + else + _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*" + fi +} + +__git_flow_hotfix_list () +{ + local expl + declare -a hotfixes + + hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}}) + __git_command_successful || return + + _wanted hotfixes expl 'hotfix' compadd $hotfixes +} + +__git_flow_support_list () +{ + local expl + declare -a support + + support=(${${(f)"$(_call_program support git flow support list 2> /dev/null | tr -d ' |*')"}}) + __git_command_successful || return + + _wanted hotfixes expl 'support' compadd $support +} + + +__git_branch_names () { + local expl + declare -a branch_names + + branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/}) + __git_command_successful || return + + _wanted branch-names expl branch-name compadd $* - $branch_names +} + +__git_command_successful () { + if (( ${#pipestatus:#0} > 0 )); then + _message 'not a git repository' + return 1 + fi + return 0 +} + +_git-flow "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-journal b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-journal new file mode 100644 index 00000000..0f2dfbee --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-journal @@ -0,0 +1,225 @@ +#compdef git-journal +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for git-journal: +# https://github.com/saschagrunert/git-journal +# +# Authors +# ------- +# +# * Sascha Grunert +# * Nico Wagner +# ------------------------------------------------------------------------------ + +_git-journal() { + typeset -A opt_args + local ret=1 + + local context curcontext="$curcontext" state line + _arguments -s -S -C \ +"-p+[Sets a custom working path.]" \ +"--path+[Sets a custom working path.]" \ +"-n+[The number of tags until the parser stops when a single revision is given.]" \ +"--tags-count+[The number of tags until the parser stops when a single revision is given.]" \ +"-e+[A pattern to exclude git tags from the processing.]" \ +"-t+[Use a custom output template.]" \ +"--template+[Use a custom output template.]" \ +"-o+[The output file for the changelog.]" \ +"--output+[The output file for the changelog.]" \ +"-a[Do not stop parsing at the first tag when a single revision is given. Overwrites '-n/--tags-count'.]" \ +"--all[Do not stop parsing at the first tag when a single revision is given. Overwrites '-n/--tags-count'.]" \ +"-g[Generate a fresh output template from a commit range.]" \ +"--generate[Generate a fresh output template from a commit range.]" \ +"-s[Print only the shortlog (summary) form.]" \ +"--short[Print only the shortlog (summary) form.]" \ +"-u[Skip entries without any relation to a git TAG.]" \ +"--skip-unreleased[Skip entries without any relation to a git TAG.]" \ +"-h[Prints help information]" \ +"--help[Prints help information]" \ +"-V[Prints version information]" \ +"--version[Prints version information]" \ +"1:: :_git-journal_commands" \ +"*:: :->git-journal" \ +&& ret=0 + case $state in + (git-journal) + curcontext="${curcontext%:*:*}:git-journal-command-$words[1]:" + case $line[1] in + (p) +_arguments -s -S -C \ +"-h[Prints help information]" \ +"--help[Prints help information]" \ +"-V[Prints version information]" \ +"--version[Prints version information]" \ +"1:: :_git-journal_prepare_commands" \ +&& ret=0 +;; +(prepare) +_arguments -s -S -C \ +"-h[Prints help information]" \ +"--help[Prints help information]" \ +"-V[Prints version information]" \ +"--version[Prints version information]" \ +"1:: :_git-journal_prepare_commands" \ +&& ret=0 +;; +(s) +_arguments -s -S -C \ +"-h[Prints help information]" \ +"--help[Prints help information]" \ +"-V[Prints version information]" \ +"--version[Prints version information]" \ +&& ret=0 +;; +(setup) +_arguments -s -S -C \ +"-h[Prints help information]" \ +"--help[Prints help information]" \ +"-V[Prints version information]" \ +"--version[Prints version information]" \ +&& ret=0 +;; +(v) +_arguments -s -S -C \ +"-h[Prints help information]" \ +"--help[Prints help information]" \ +"-V[Prints version information]" \ +"--version[Prints version information]" \ +"1:: :_git-journal_verify_commands" \ +&& ret=0 +;; +(verify) +_arguments -s -S -C \ +"-h[Prints help information]" \ +"--help[Prints help information]" \ +"-V[Prints version information]" \ +"--version[Prints version information]" \ +"1:: :_git-journal_verify_commands" \ +&& ret=0 +;; +(help) +_arguments -s -S -C \ +"-h[Prints help information]" \ +"--help[Prints help information]" \ +"-V[Prints version information]" \ +"--version[Prints version information]" \ +&& ret=0 +;; + esac + ;; +esac +} + +(( $+functions[_git-journal_commands] )) || +_git-journal_commands() { + local commands; commands=( + "prepare:Prepare a commit message before the user can edit it." \ +"p:Prepare a commit message before the user can edit it." \ +"setup:Creates all necessary git hooks and an initial configuration file. Shell completions for bash and fish will be available inside the current working directory." \ +"s:Creates all necessary git hooks and an initial configuration file. Shell completions for bash and fish will be available inside the current working directory." \ +"verify:Verify the specified commit message." \ +"v:Verify the specified commit message." \ +"help:Prints this message or the help of the given subcommand(s)" \ +"REVISION_RANGE:Specifies the revision range to be processed. If a single revision is specified, the output will stop at the first following git TAG." \ + ) + _describe -t commands 'git-journal commands' commands "$@" +} +(( $+functions[_git-journal_help_commands] )) || +_git-journal_help_commands() { + local commands; commands=( + + ) + _describe -t commands 'git-journal help commands' commands "$@" +} +(( $+functions[_git-journal_p_commands] )) || +_git-journal_p_commands() { + local commands; commands=( + "MESSAGE:The path to the commit message which should be prepared." \ +"TYPE:The type of the commit. For example "message"." \ + ) + _describe -t commands 'git-journal p commands' commands "$@" +} +(( $+functions[_p_commands] )) || +_p_commands() { + local commands; commands=( + "MESSAGE:The path to the commit message which should be prepared." \ +"TYPE:The type of the commit. For example "message"." \ + ) + _describe -t commands 'p commands' commands "$@" +} +(( $+functions[_git-journal_prepare_commands] )) || +_git-journal_prepare_commands() { + local commands; commands=( + "MESSAGE:The path to the commit message which should be prepared." \ +"TYPE:The type of the commit. For example "message"." \ + ) + _describe -t commands 'git-journal prepare commands' commands "$@" +} +(( $+functions[_git-journal_s_commands] )) || +_git-journal_s_commands() { + local commands; commands=( + + ) + _describe -t commands 'git-journal s commands' commands "$@" +} +(( $+functions[_s_commands] )) || +_s_commands() { + local commands; commands=( + + ) + _describe -t commands 's commands' commands "$@" +} +(( $+functions[_git-journal_setup_commands] )) || +_git-journal_setup_commands() { + local commands; commands=( + + ) + _describe -t commands 'git-journal setup commands' commands "$@" +} +(( $+functions[_git-journal_v_commands] )) || +_git-journal_v_commands() { + local commands; commands=( + "MESSAGE:The path to the commit message which should be prepared." \ + ) + _describe -t commands 'git-journal v commands' commands "$@" +} +(( $+functions[_v_commands] )) || +_v_commands() { + local commands; commands=( + "MESSAGE:The path to the commit message which should be prepared." \ + ) + _describe -t commands 'v commands' commands "$@" +} +(( $+functions[_git-journal_verify_commands] )) || +_git-journal_verify_commands() { + local commands; commands=( + "MESSAGE:The path to the commit message which should be prepared." \ + ) + _describe -t commands 'git-journal verify commands' commands "$@" +} + +_git-journal "$@" \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-pulls b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-pulls new file mode 100644 index 00000000..8dfc117d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-pulls @@ -0,0 +1,83 @@ +#compdef git-pulls +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for git-pulls 0.3.1 (https://git-pulls.com/schacon/git-pulls). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud (https://github.com/nicoulaj) +# +# ------------------------------------------------------------------------------ + + +_git-pulls() { + typeset -A opt_args + local context state line curcontext="$curcontext" + + local ret=1 + + _arguments -C \ + '(- 1 *)--help[show usage]' \ + '1:cmd:->cmds' \ + '*::arg:->args' \ + && ret=0 + + case "$state" in + (cmds) + local commands; commands=( + 'update:update pull requests list' + 'list:list pull requests' + 'show:show pull request' + 'browse:open pull request in a web browser' + 'merge:merge pull request' + ) + _describe -t commands 'command' commands && ret=0 + ;; + (args) + curcontext="${curcontext%:*:*}:git-pulls-cmd-$words[1]:" + case $words[1] in + (update) + _message 'no more arguments' && ret=0 + ;; + (list) + _arguments \ + '--reverse[list in reverse order]' \ + && ret=0 + ;; + (show) + _arguments \ + '1: :_git-pulls_pull_requests_numbers' \ + '--full[use verbose output]' \ + && ret=0 + ;; + (browse|merge) + _arguments \ + '1: :_git-pulls_pull_requests_numbers' \ + && ret=0 + ;; + esac + ;; + esac + + return ret +} + +(( $+functions[_git-pulls_pull_requests_numbers] )) || +_git-pulls_pull_requests_numbers() { + local pull_requests; pull_requests=(${${${(M)${(f)"$(_call_program users $service list)"}:#[[:digit:]]##[[:space:]]*}//:/\\:}/[[:space:]]##/:}) + _describe -t pull-request-numbers 'pull request number' pull_requests "$@" +} + +_git-pulls "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-revise b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-revise new file mode 100644 index 00000000..7e7c1f0f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-revise @@ -0,0 +1,52 @@ +#compdef git-revise +#description update, split and rearrange commits +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for git-revise 0.5.1 +# (https://github.com/mystor/git-revise/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hannu Hartikainen (https://github.com/dancek) +# +# ------------------------------------------------------------------------------ + +__git-revise_commits() { + local -a commits + commits=(${(f)"$(git log -20 --pretty=format:'%h:%d %s' | sed 's/: /:/')"}) + _describe -V 'commit' commits +} + +__git-revise_branches() { + local -a branches + branches=(${(f)"$(git for-each-ref --format='%(refname:short)' refs/heads/)"}) + _describe 'branch' branches +} + +_git-revise() { + local curcontext="$curcontext" ret=1 + + _arguments -s \ + '(- :)'{-h,--help}'[show help message and exit]' \ + '--ref=[reference to update]: :__git-revise_branches' \ + '--reauthor[reset the author of the targeted commit]' \ + '(- :)--version[show version number and exit]' \ + '(--edit -e)'{--edit,-e}'[edit commit message of targeted commit(s)]' \ + '(--no-autosquash)--autosquash[automatically apply fixup! and squash! commits to their targets]' \ + '(--autosquash)--no-autosquash[force disable revise.autoSquash behaviour]' \ + '(--all -a)--no-index[ignore the index while rewriting history]' \ + '(--no-index --all -a)'{--all,-a}'[stage all tracked files before running]' \ + '(--interactive -i --message -m --cut -c)'{--interactive,-i}'[interactively edit commit stack]' \ + '(--interactive -i --message -m --cut -c)'{--message,-m}'[specify commit message on command line]:MESSAGE:()' \ + '(--interactive -i --message -m --cut -c)'{--cut,-c}'[interactively cut a commit into two smaller commits]' \ + '1: :__git-revise_commits' && ret=0 + + return $ret +} + +_git-revise "$@" + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-wtf b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-wtf new file mode 100644 index 00000000..f3f15db8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_git-wtf @@ -0,0 +1,65 @@ +#compdef git-wtf +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for git-wtf, authored by +# William Morgan (http://git-wt-commit.rubyforge.org/git-wtf) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mario Fernandez (https://github.com/sirech) +# * Shohei YOSHIDA (https://github.com/syohex) +# +# ------------------------------------------------------------------------------ + +__git_wtf_branches() { + local -a branches + branches=(${(f)"$(git for-each-ref --format='%(refname:short)' refs/heads/)"}) + _describe 'branch' branches +} + +_arguments -w -C -s \ + '(--long --short)'{-l,--long}'[include author info and date for each commit]' \ + '(--long --short)'{-s,--short}'[do not show commits]' \ + '(--all)'{-a,--all}'[show all branches across all remote repos, not just those from origin]' \ + '(--all-commits)'{-A,--all-commits}'[show all commits, not just the first 5]' \ + '(--key)'{-k,--key}'[show key]' \ + '(--relations)'{-r,--relations}'[show relation to features / integration branches]' \ + '(--dump-config)--dump-config[print out current configuration and exit]' \ + '*: :__git_wtf_branches' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_glances b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_glances new file mode 100644 index 00000000..a86f8759 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_glances @@ -0,0 +1,75 @@ +#compdef glances +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for glances (http://nicolargo.github.com/glances/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * loranger (https://github.com/loranger) +# +# ------------------------------------------------------------------------------ + +_glances() { + + _arguments \ + "-0[Divide task CPU usage by the total number of CPUs]" \ + "-1[Start Glances in per CPU mode]" \ + "-2[Disable left sidebar]" \ + "-3[Disable quick look module]" \ + "-4[Disable all but quick look and load]" \ + "-5[Disable top menu]" \ + "-6[Start Glances in mean GPU mode]" \ + "-b[Display network rate in Byte per second]" \ + "-B[Bind server to the given IP or host NAME]:host:_hosts" \ + "-c[Connect to a Glances server]:host:_hosts" \ + "-C[Path to the configuration file]:configuration path:_files -/" \ + "-d[Enable debug mode]" \ + "-h[Display the syntax and exit]" \ + "-o[Define additional output (available: HTML or CSV)]:output type:(HTML CSV)" \ + "-p[Define the client or server TCP port (default: 61209)]:port:_ports" \ + "-q[Disable the curses interface]" \ + "-s[Run Glances in server mode]" \ + "-t[Set the refresh time in seconds (default: 3)]:seconds:" \ + "-V[Display the version and exit]" \ + "-w[Run Glances in web server mode]" \ + "-z[Do not use the bold color attribute]" \ + "--browser[Start the client browser]" \ + "--disable-bg[Disable background colors in the terminal]" \ + "--disable-bold[Disable bold mode in the terminal]" \ + "--hide-kernel-threads[Hide kernel threads in process list]" \ + "--password[Define a client/server password]" \ + "--theme-white[Optimize display colors for white background]" \ + "--tree[Display processes as tree]" \ + "--username[Define a client/server username]" \ +} + +_glances "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_golang b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_golang new file mode 100644 index 00000000..8356f015 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_golang @@ -0,0 +1,1031 @@ +#compdef go -P -value-,GO*,-default- -P -value-,CGO*,-default- +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# Copyright (c) 2013-2015 Robby Russell and contributors (see +# https://github.com/robbyrussell/oh-my-zsh/contributors) +# Copyright (c) 2010-2014 Go authors +# +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for go 1.14 (http://golang.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mikkel Oscar Lyderik Larsen +# * Paul Seyfert +# * oh-my-zsh authors: +# https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/golang/golang.plugin.zsh +# * Go authors +# +# ------------------------------------------------------------------------------ + +__go_buildmodes() { + local -a buildmodes + buildmodes=( + 'archive[non-main packages into .a files]' + 'c-archive[main package, plus all packages it imports, into a C archive file]' + 'c-shared[main package, plus all packages it imports, into a C shared library]' + 'default[main packages are built into executables and listed non-main packages are built into .a files]' + 'shared[non-main packages into a single shared library that will be used when building with the -linkshared option]' + 'exe[main packages into executables]' + 'pie[main packages and everything they import into position independent executables (PIE)]' + 'plugin[main packages, plus all packages that they import, into a Go plugin]' + ) + + _values 'mode' $buildmodes +} + + +__go_runtimedebug() { + local -a vars + vars=( + 'allocfreetrace[profile allocations]:boolean:(1 0)' + 'clobberfree[clobber memory after free]:boolean:(1 0)' + 'cgocheck[check passing go pointers to non-go]: :((0\:"no checks" 1\:"check checks" 2\:"expensive checks"))' + 'efence[allocate on unique pages]:boolean:(1 0)' + "gccheckmark[verify garbage collector's concurrent mark phase]:boolean:(1 0)" + 'gcpacertrace[print state of the concurrent pacer from garbage collector]:boolean:(1 0)' + 'gcshrinkstackoff[disable moving goroutines to smaller stacks]:boolean:(1 0)' + 'gcstoptheworld[disable concurrent garbage collection]: :((0\:default 1\:"disable concurrent garbage collection" 2\:"disable concurrent gc and sweeping"))' + 'gctrace[emit memory collection and pause information from the garbage collector]:boolean:(1 0)' + 'madvdontneed[use MADV_DONTNEED instead of MADV_FREE]:boolean:(1 0)' + 'memprofilerate[every N-th allocation should be profiled]:int:' + 'invalidptr[crash on invalid integers in pointer-type variables]:boolean:(1 0)' + 'sbrk[replace memory allocator and garbage collector by trivial allocator]:boolean:(1 0)' + 'scavenge[enable debugging mode of heap scavenger]:boolean:(1 0)' + 'scavtrace[emit scavenger work information (memory returned and memory utilization)]:boolean:(1 0)' + 'scheddetail[emit detailed states of scheduler, processors, threads, goroutines]:boolean:(1 0)' + 'schedtrace[emmit scheduler state every N ms to stderr]:int' + 'tracebackancestors[set ancestor goroutines to be printed in goroutine creation stacks]:int' + 'asyncpreemptoff[disable signal-based asynchronous goroutine preemption.]:boolean:(1 0)' + ) + _values -s ',' -S '=' "runtime debug behaviour" $vars[@] +} + +__go_gcdebugflags() { + _values -s , -S = 'debug flag' \ + 'append[print information about append compilation]' \ + 'checkptr[instrument unsafe pointer conversions]:pointer conversion checks:((0\:"instrumentation disabled" 1\:"conversions involving unsafe.Pointer are instrumented" 2\:"conversions to unsafe.Pointer force heap allocation"))' \ + 'closure[print information about closure compilation]' \ + 'compilelater[compile functions as late as possible]' \ + 'disablenil[disable nil checks]' \ + 'dclstack[run internal dclstack check]' \ + 'gcprog[print dump of GC programs]' \ + 'libfuzzer[coverage instrumentation for libfuzzer]' \ + 'nil[print information about nil checks]' \ + 'panic[do not hide any compiler panic]' \ + 'slice[print information about slice compilation]' \ + 'typeassert[print information about type assertion inlining]' \ + 'wb[print information about write barriers]' \ + 'export[print export data]' \ + 'pctab[print named pc-value table]:pc-value:(pctospadj pctofile pctoline pctoinline pctopcdata)' \ + 'locationlists[print information about DWARF location list creation]' \ + 'typecheckinl[eager typechecking of inline function bodies]' \ + 'dwarfinl[print information about DWARF inlined function creation]' \ + 'softfloat[force compiler to emit soft-float code]' \ + 'defer[print information about defer compilation]' \ + 'ssa/help[print help about SSA debugging]' +} + +__go_gcflags() { + _arguments \ + '-%[debug non-static initializers]' \ + '-c=[concurrency during compilation]:int' \ + '-+[compiling runtime]' \ + '-B[disable bounds checking]' \ + '-C[disable printing of columns in error messages]' \ + '-D=[set relative path for local imports]:path: _path_files -/' \ + '-E[debug symbol export]' \ + '-I=[add directory to import search path]:directory: _path_files -/' \ + '-K[debug missing line numbers]' \ + '-L[show full file names in error messages]' \ + '-N[disable optimizations]' \ + '-S[print assembly listing]' \ + '-V[print version and exit]' \ + '-W[debug parse tree after type checking]' \ + '-asmhdr=[write assembly header to file]:file' \ + '-bench=[append benchmark times to file]:file' \ + '-blockprofile=[write block profile to file]:file' \ + '-buildid=[record id as the build id in the export metadata]:id' \ + '-complete[compiling complete package (no C or assembly)]' \ + '-cpuprofile=[write cpu profile to file]:file' \ + '-d=[print debug information about items in list; try -d help]:list: __go_gcdebugflags' \ + '-dwarf[generate DWARF symbols (default true)]' \ + '-dwarfbasentries[use base address selection entries in DWARF (default true)]' \ + '-dwarflocationlists[add location lists to DWARF in optimized mode (default true)]' \ + '-dynlink[support references to Go symbols defined in other shared libraries]' \ + '-e[no limit on number of errors reported]' \ + '-gendwarfinl=[generate DWARF inline info records (default 2)]:int' \ + '-goversion=[required version of the runtime]:string' \ + '-h[halt on error]' \ + '-importcfg=[read import configuration from file]:file' \ + '-importmap=[add definition of the form source=actual to import map]:definition' \ + '-installsuffix=[set pkg directory suffix]:suffix' \ + '-j[debug runtime-initialized variables]' \ + '-json=[version,destination for JSON compiler/optimizer logging]:string' \ + '-l[disable inlining]' \ + '-lang=[release to compile for]:string' \ + '-linkobj=[write linker-specific object to file]:file' \ + '-linkshared[generate code that will be linked against Go shared libraries]' \ + '-live[debug liveness analysis]' \ + '-m[print optimization decisions]' \ + '-memprofile=[write memory profile to file]:file' \ + '-memprofilerate=[set runtime.MemProfileRate to rate]:rate' \ + '-msan[build code compatible with C/C++ memory sanitizer]' \ + '-mutexprofile=[write mutex profile to file]:file' \ + '-newobj[use new object file format]' \ + '-nolocalimports[reject local (relative) imports]' \ + '-o=[write output to file]:file' \ + '-p=[set expected package import path]:path: _path_files -/' \ + '-pack[write to file.a instead of file.o]' \ + '-r[debug generated wrappers]' \ + '-race[enable race detector]' \ + '-shared[generate code that can be linked into a shared library]' \ + '-smallframes[reduce the size limit for stack allocated objects]' \ + '-spectre=[enable spectre mitigations]:mitigations:(all index ret)' \ + '-std[compiling standard library]' \ + '-symabis=[read symbol ABIs from file]:file' \ + '-traceprofile=[write an execution trace to file]:file' \ + '-trimpath=[remove prefix from recorded source file paths]:prefix' \ + '-v[increase debug verbosity]' \ + '-w[debug type checking]' \ + '-wb[enable write barrier (default true)]' \ +} + + +local -a commands build_flags +commands=( +'bug:start a bug report' +'build:compile packages and dependencies' +'clean:remove object files and cached files' +'doc:show documentation for package or symbol' +'env:print Go environment information' +'fix:update packages to use new APIs' +'fmt:gofmt (reformat) package sources' +'generate:generate Go files by processing source' +'get:download and install packages and dependencies' +'install:compile and install packages and dependencies' +'list:list packages or modules' +'mod:module maintenance' +'run:compile and run Go program' +'test:test packages' +'tool:run specified go tool' +'version:print Go version' +'vet:report likely mistakes in packages' +'help:get more information about a command' +) + +__go_envvarvals() { + # if __go_envvarvals is called for -value-, I use the function argument to + # decide which variable to go to. if $1 is not set, then __go_envvarvals is + # called from the `go env` completion and the current word (with all after + # the first '=' removed) is the current variable. + local variable + variable=${1-${words[$CURRENT]%%=*}} + case $variable in + # commands + AR) + ;& + CC) + ;& + CXX) + ;& + FC) + ;& + GCCGO) + _command_names -e + ;; + # directories (using fallthrough) + GOBIN) + ;& + GOCACHE) + ;& + GOTMPDIR) + ;& + GOTOOLDIR) + ;& + GOROOT) + ;& + GOROOT_FINAL) + ;& + GCCGOTOOLDIR) + ;& + GOPATH) + ;& + GOMODCACHE) + _files -/ + ;; + # regular files (using fallthrough) + GOMOD) + ;& + PKG_CONFIG) + ;& + GOENV) + _files + ;; + # special + GOHOSTOS) + ;& + GOOS) + # from https://golang.org/doc/install/source#environment + _values 'operating system' aix android darwin dragonfly freebsd illumos js linux netbsd openbsd plan9 solaris windows + ;; + GOHOSTARCH) + ;& + GOARCH) + _values 'architecture' amd64 386 arm ppc64 + ;; + CGO_ENABLED) + _values 'enable/disable cgo' 0 1 + ;; + GO_EXTLINK_ENABLED) + _values 'enable/disable external linkage' 0 1 + ;; + GOARM) + _values 'target arm architecture' 5 6 7 + ;; + GO386) + _values 'x86 floating point instruction set' 387 sse2 + ;; + GOMIPS*) + _values 'mips floating point instructions' hardfloat softfloat + ;; + GOWASM) + _values 'web assembly features' -s ',' satconv signext + ;; + GOPROXY) + _urls + ;; + GOEXE) + _message "suffix for executables" + ;; + CGO_*FLAGS_*ALLOW) + _message "regexp" + ;; + CGO_*FLAGS) + _dispatch $service -value-,${variable#CGO_},-default- + ;; + GODEBUG) + __go_runtimedebug + ;; + GOFLAGS) + # not implemented, sorry + ;; + GOINSECURE) + ;& + GOPRIVATE) + ;& + GONOPROXY) + ;& + GONOSUMDB) + # comma separated glob patterns (in the syntax of Go's path.Match) + _message "comma separated glob pattern" + ;; + GOSUMDB) + _message "e.g. sum.golang.org+ https://sum.golang.org" + ;; + esac +} + +if [[ "$service" = -value-* ]]; then + variable=${${service%,-default-}#-value-,} + # some special variables are not read from the environment + local -a blacklist + blacklist=('GOEXE' 'GOGCCFLAGS' 'GOHOSTARCH' 'GOHOSTOS' 'GOMOD' 'GOTOOLDIR') + if (($blacklist[(I)$variable])); then + return + fi + __go_envvarvals $variable + return +fi + +_arguments \ + "1: :{_describe 'command' commands}" \ + '*:: :->args' + +case $state in + args) + build_flags=( + '-a[force rebuilding of packages that are already up-to-date]' + '-n[print the commands but do not run them]' + '-p[number of builds that can be run in parallel]:number' + '-race[enable data race detection]' + '-msan[enable interoperation with memory sanitizer]' + '-v[print the names of packages as they are compiled]' + '-work[print temporary work directory and keep it]' + '-x[print the commands]' + '-asmflags[arguments for each go tool asm invocation]:flags' + '-buildmode[build mode to use]:mode:__go_buildmodes' + '-compiler[name of compiler to use]:name' + '-gccgoflags[arguments for gccgo]:args' + '*-gcflags=[arguments for each go tool compile invocation]:args:__go_gcflags' + '-installsuffix[suffix to add to package directory]:suffix' + '-ldflags[arguments to pass on each go tool link invocation.]:flags' + '-linkshared[link against shared libraries]' + '-pkgdir[install and load all packages from dir]:dir' + '-tags[list of build tags to consider satisfied]:tags' + '-trimpath[remove all file system paths from the resulting executable]' + '-toolexec[program to use to invoke toolchain programs]:args' + ) + mod_flags=( + '-mod=[module download mode to use]:download mode:(readonly vendor mod)' + '-modcacherw[leave newly-created directories in the module cache read-write]' + '-modfile=[read an alternate go.mod file]:modfile: _files -g "*.mod"' + ) + + __go_packages() { + local gopaths + declare -a gopaths + gopaths=("${(s/:/)$(go env GOPATH)}") + gopaths+=("$(go env GOROOT)") + for p in $gopaths; do + _path_files $@ -W "$p/src" -/ + done + # no special treatment for + # - relative paths starting with .. + # - absolute path starting with / + # - variables, substitutions, subshells + if [[ $words[$CURRENT] = ..* || $words[$CURRENT] = \$* || $words[$CURRENT] = /* ]]; then + _path_files $@ -/ -g '*.go' + else + # go build accepts paths relative to the cwd but they must start with './', so prefix them + _path_files $@ -P './' -/ -g '*.go' + fi + } + + case $words[1] in + build) + _arguments \ + '-o[force build to write to named output file or directory]:file or directory:_files' \ + '-i[installs the packages that are dependencies of the target]' \ + ${build_flags[@]} \ + ${mod_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + clean) + _arguments \ + '-i[remove corresponding installed archive or binary]' \ + '-r[apply clean recursively on all dependencies]' \ + ${build_flags[@]} \ + ${mod_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + doc) + _arguments \ + '-c[respect case when matching symbols]' \ + '-cmd[treat a command (package main) like a regular package]' \ + '-u[show docs for unexported and exported symbols and methods]' + ;; + + env) + local -a goenvvars + goenvvars=( + "GOARCH[architecture, or processor, for which to compile code.]:architecture" + "GCCGO[gccgo command to run.]:gccgo command" + "GOBIN[directory where 'go install' installs to]:go install target dir" + "GOCACHE[directory to store cached information]:go build cache dir" + "GODEBUG[enable runtime debug facilities]:runtime debug settings" + "GOENV[location of the go environment configuration file]:configuration file" + "GOFLAGS[default go command line flags]:space sparated default command line flags" + "GOINSECURE[module prefixes that are feched insecurely]:comma separated module prefixes" + "GOOS[target operating system]:operating system" + "GOPATH[path to resolve import statements]:import path" + "GOPROXY[URL of go module proxy]:proxy url" + "GOROOT[root of the go tree]:go root directory" + "GOTMPDIR[directory for temporary sources, packages, and binaries]:tmp directory" + "GOPRIVATE[modules that should always be fetched directly]:comma separated glob patterns" + "GONOPROXY[modules that should always be fetched directly]:comma separated glob patterns" + "GONOSUMDB[modules that should not be compared against the checksum db]:comma separated glob patterns" + "GOMODCACHE[module cache directory]:path" + "GOSUMDB[checksum database]:name(+publickey( url))" + "AR[command for manipulating library archives (for gccgo)]:archive manipulation program" + "CC[command to compile C code]:C compiler" + "CGO_ENABLED[enable/disable cgo]:boolean" + "CGO_CFLAGS[flags passed to the compiler for C code]:C compilation flags" + "CGO_CFLAGS_ALLOW[additional flags to allow to appear in #cgo CFLAGS]:regular expression" + "CGO_CFLAGS_DISALLOW[flags that must be disallowed from appearing in #cgo CFLAGS]" + "CGO_CPPFLAGS[flags passed to the C preprocessor]:C preprocessor flags" + "CGO_CPPFLAGS_ALLOW[additional flags to allow to appear in #cgo CPPFLAGS]:regular expression" + "CGO_CPPFLAGS_DISALLOW[flags that must be disallowed from appearing in #cgo CPPFLAGS]" + "CGO_CXXFLAGS[flags passed to the compiler for C++ code]:C++ compilation flags" + "CGO_CXXFLAGS_ALLOW[additional flags to allow to appear in #cgo CXXFLAGS]:regular expression" + "CGO_CXXFLAGS_DISALLOW[flags that must be disallowed from appearing in #cgo CXXFLAGS]" + "CGO_FFLAGS[flags passed to the compiler for Fortran code]:Fortran compilation flags" + "CGO_FFLAGS_ALLOW[additional flags to allow to appear in #cgo FFLAGS]:regular expression" + "CGO_FFLAGS_DISALLOW[flags that must be disallowed from appearing in #cgo FFLAGS]" + "CGO_LDFLAGS[flags passed to the compiler for linker]:linker flags" + "CGO_LDFLAGS_ALLOW[additional flags to allow to appear in #cgo LDFLAGS]:regular expression" + "CGO_LDFLAGS_DISALLOW[flags that must be disallowed from appearing in #cgo LDFLAGS]" + "CXX[command to compile C++]:C++ compiler" + "FC[command to compile Fortran]:Fortran compiler" + "PKG_CONFIG[Path to pkg-config tool.]:path to pkg-config" + "GOARM[arm architecture]:arm architecture" + "GO386[x86 instruction set]:x86 instruction set" + "GOMIPS[mips instruction set]:mips instruction set" + "GOMIPS64[mips64 instruction set]:mips64 instruction set" + "GOWASM[web assembly features]:comma separated web assembly features" + "GCCGOTOOLDIR[directory of gccgo tools]:gccgo tool director" + "GOROOT_FINAL[root of the go tree]:go root" + "GO_EXTLINK_ENABLED[enable external linking mode]:boolean" + "GIT_ALLOW_PROTOCOL[schemes allowed to fetch]:colon separated git schemes" + "GOEXE[suffix for executables]:executable suffix" + "GOGCCFLAGS[arguments supplied to CC]:space separated arguments to CC" + "GOHOSTARCH[architecture of the toolchain binaries]:host os architecture" + "GOHOSTOS[operating system of the toolchain binaries]:host os" + "GOMOD[absolute path the the main go.mod]:abs path to main go.mod" + "GOTOOLDIR[installation directory of go tools]:tool installation directory" + ) + local -a exclude_from_w + exclude_from_w=(GOENV) + + __list_env_vars() { + # the parameter expansion strops off everything after the first [ + _values -s ' ' -w 'environment variable' ${goenvvars[@]%%\[*} + } + + # the ^ parameter expansion appends ": __go_envvarvals" to every element of goenvvars + # the :# parameter expansion removes all elements matching GOENV* + [[ $words[2] != '-w' ]] && _arguments \ + '-json[print the environment in JSON format]' \ + '-u[unset environment variables]' \ + '-w[change the default setting of environment variables]' \ + '*:[show environment variable]: __list_env_vars' || _values \ + -s ' ' -S "=" -w 'environment variable' ${^goenvvars:#GOENV*}": __go_envvarvals" + ;; + + fix) + _arguments '*:importpaths:__go_packages' + ;; + + fmt) + _arguments \ + '-n[prints commands that would be executed]' \ + '-x[prints commands as they are executed]' \ + '*:importpaths:__go_packages' + ;; + + generate) + _arguments \ + '-run=[specifies a regular expression to select directives]:regex' \ + '-x[print the commands]' \ + '-n[print the commands but do not run them]' \ + '-v[print the names of packages as they are compiled]' \ + "*:args:{ _alternative ':importpaths:__go_packages' _files }" + ;; + + get) + # no mod_flags for get + _arguments \ + '-d[instructs get to stop after downloading the packages]' \ + '-f[force get -u not to verify that each package has been checked from vcs]' \ + '-fix[run the fix tool on the downloaded packages]' \ + '-insecure[permit fetching/resolving custom domains]' \ + '-t[also download the packages required to build tests]' \ + '-u[use the network to update the named packages]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + install) + _arguments ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + + list) + local -a list_args + list_args=( + '-e[changes the handling of erroneous packages]' + '-f[specifies an alternate format for the list]:format' + '-json[causes package data to be printed in JSON format]' + '-compiled[set CompiledGoFiles to the Go source files presented to the compiler]' + '-deps[iterate over named packages and their dependencies]' + '-m[list modules instead of packages]' + ${build_flags[@]} + ${mod_flags[@]} + '*:importpaths:__go_packages' + ) + # -u and -versions are only available if -m is present on the commandline + if (($words[(I)-m])); then + list_args+=( + '-u[adds information about available upgrades]' + '-versions[list all known versions of modules]' + ) + fi + _arguments ${list_args[@]} + ;; + + mod) + local -a mod_commands + mod_commands=( + 'download:download modules to local cache' + 'edit:edit go.mod from tools or scripts' + 'graph:print module requirement graph' + 'init:initialize new module in current directory' + 'tidy:add missing and remove unused modules' + 'vendor:make vendored copy of dependencies' + 'verify:verify dependencies have expected content' + 'why:explain why packages or modules are needed' + 'help:get more information about a command' + ) + + _arguments \ + "1: :{_describe 'command' mod_commands}" \ + '*:: :->args' + + case $state in + args) + case $words[1] in + download) + _arguments \ + '-json[print a sequance of JSON objects to standard output]' + ;; + + edit) + _arguments \ + '-fmt[reformats the go.mod file without making other changes]' \ + "-module[change the module's path]" \ + '*-require=[add a requirement on the given module path and version]:require' \ + '*-droprequire=[drop a requirement on the given module path and version]:droprequire' \ + '*-exclude=[add an exclusion for the given module path and version]:exclude' \ + '*-dropexclude=[drop an exclusion for the given module path and version]:dropexclude' \ + '*-replace=[add a replacement of the given module path and version]:replace' \ + '*-dropreplace=[drop a replacement of the given module path and version]:dropreplace' \ + '-json[prints the final go.mod file in JSON format]' \ + '-print[prints the final go.mod in its text format]' \ + ':go.mod:_path_files -g "go.mod"' + ;; + graph) + ;; + init) + # Use go packages as module name suggestion + _arguments \ + '*:module:__go_packages' + ;; + tidy) + _arguments \ + '-v[print information about removed modules to standard error]' + ;; + vendor) + _arguments \ + '-v[print the names of vendored modules and packages to standard error]' + ;; + verify) + ;; + why) + _arguments \ + '-m[treats the arguments as a list of modules]' \ + '-vendor[exclude tests of dependencies]' \ + '*:module:__go_packages' + ;; + esac + ;; + esac + ;; + + run) + _arguments \ + ${build_flags[@]} \ + '-exec[invoke the binary using xprog]:xporg' \ + '*:importpaths:__go_packages' + ;; + + test) + if [[ $words[$CURRENT] = -test.* ]]; then + _arguments \ + '-test.bench[run only benchmarks matching regexp]:regexp' \ + '-test.benchmem[print memory allocations for benchmarks]' \ + '-test.benchtime[run each benchmark for duration d (default 1s)]:d' \ + '-test.blockprofile[write a goroutine blocking profile to file]:file:_files' \ + '-test.blockprofilerate[set blocking profile rate (see runtime.SetBlockProfileRate) (default 1)]:rate' \ + '-test.count[run tests and benchmarks n times (default 1)]:n' \ + '-test.coverprofile[write a coverage profile to file]:file:_files' \ + '-test.cpu[comma-separated list of cpu counts to run each test with]:comma-separated list' \ + '-test.cpuprofile[write a cpu profile to file]:file:_files' \ + '-test.failfast[do not start new tests after the first test failure]' \ + '-test.list[list tests, examples, and benchmarks matching regexp then exit]:regexp' \ + '-test.memprofile[write an allocation profile to file]:file:_files' \ + '-test.memprofilerate[set memory allocation profiling rate (see runtime.MemProfileRate)]:rate' \ + '-test.mutexprofile[write a mutex contention profile to the named file after execution]:string' \ + '-test.mutexprofilefraction[if >= 0, calls runtime.SetMutexProfileFraction() (default 1)]:int' \ + '-test.outputdir[write profiles to dir]:dir:_path_files -/' \ + '-test.parallel[run at most n tests in parallel (default 4)]:n' \ + '-test.run[run only tests and examples matching regexp]:regexp' \ + '-test.short[run smaller test suite to save time]' \ + '-test.testlogfile[write test action log to file (for use only by cmd/go)]:file' \ + '-test.timeout[panic test binary after duration d (default 0, timeout disabled)]:d' \ + '-test.trace[write an execution trace to file]:file' \ + '-test.v[verbose: print additional output]' + else + _arguments \ + "-c[compile but don't run test]" \ + '-i[install dependencies of the test]' \ + '-bench[run benchmarks matching the regular expression]:regexp' \ + '-benchmem[print memory allocation statistics for benchmarks]' \ + '-benchtime[run benchmarks for t rime]:t' \ + '-blockprofile[write a goroutine blocking profile to the specified file]:block' \ + '-blockprofilerate[control goroutine blocking profiles]:n' \ + '-count[run each test and benchmark n times]:n' \ + '-cover[enable coverage analysis]' \ + '-covermode[set the mode for coverage analysis]:mode:(set count atomic)' \ + '-coverpkg[apply coverage analysis in each test of listed packages]:list' \ + '-coverprofile[write a coverage profile to file]:cover' \ + '-cpu[specify a list of GOMAXPROCS values]:cpus' \ + '-cpuprofile[write a CPU profile to the specified file]:profile' \ + '-memprofile[write a memory profile to file]:mem' \ + '-memprofilerate[enable more precise memory profiles]:n' \ + '-outputdir[place output files from profiling in output dir]:dir' \ + '-parallel[allow parallel execution of test functions]:n' \ + '-run[run tests and examples matching the regular expression]:regexp' \ + '-short[tell long-running tests to shorten their run time]' \ + '-test.-[specify options for test running]:test running options:' \ + '-timeout[timeout long running tests]:t' \ + '-trace[write an execution trace to the specified file]:trace' \ + '-v[verbose output]' \ + ${build_flags[@]} \ + '-exec[run test binary using xprog]:xprog' \ + '-o[compile test binary to named file]:file:_files' \ + '*:importpaths:__go_packages' + fi + ;; + + tool) + local -a tools + tools=($(go tool)) + + _arguments \ + '-n[print command that would be executed]' \ + "1: :{_describe 'tool' tools}" \ + '*:: :->args' + + case $state in + args) + case $words[1] in + addr2line) + _files + ;; + + asm) + _arguments \ + '-D[predefined symbol with optional simple value]:value' \ + '-I[include directory]:value' \ + '-S[print assembly and machine code]' \ + '-debug[dump instructions as they are parsed]' \ + '-dynlink[support references to Go symbols]' \ + '-o[output file]:string' \ + '-shared[generate code that can be linked into a shared lib]' \ + '-trimpath[remove prefix from recorded source file paths]:string' + ;; + + callgraph) + local -a algos graphs + algos=( + 'static:static calls only' + 'cha:Class Hierarchy Analysis' + 'rta:Rapid Type Analysis' + 'pta:inclusion-based Points-To Analysis' + ) + graphs=( + 'digraph:output in digraph format' + 'graphviz:output in AT&T GraphViz (.dot) format' + ) + + _arguments \ + '-algo=[call-graph construction algorithm]:algos:{ _describe "algos" algos }' \ + "-test[include the package's tests in the analysis]" \ + '-format=[format in which each call graph edge is displayed]:graphs:{ _describe "graphs" graphs }' + ;; + + cgo) + _arguments \ + '-debug-define[print relevant #defines]' \ + '-debug-gcc[print gcc invocations]' \ + '-dynimport[if non-empty, print dynamic import data]:string' \ + '-dynlinker[record dynamic linker information]' \ + '-dynout[write -dynimport output to file]:file' \ + '-dynpackage[set Go package for -dynimport output]:string' \ + '-exportheader[where to write export header]:string' \ + '-gccgo[generate files for use with gccgo]' \ + '-gccgopkgpath[-fgo-pkgpath option used with gccgo]:string' \ + '-gccgoprefix[-fgo-prefix option used with gccgo]:string' \ + '-godefs[write Go definitions for C file to stdout]' \ + '-import_runtime_cgo[import runtime/cgo in generated code]' \ + '-import_syscall[import syscall in generated code]' \ + '-importpath[import path of package being built]:path' \ + '-objdir[object directory]:dir' + ;; + + compile) + _arguments \ + '-%[debug non-static initializers]' \ + '-+[compiling runtime]' \ + "-A[for bootstrapping, allow 'any' type]" \ + '-B[disable bounds checking]' \ + '-D[set relative path for local imports]:path' \ + '-E[debug symbol export]' \ + '-I[add directory to import search path]:directory' \ + '-K[debug missing line numbers]' \ + '-L[use full (long) path in error messages]' \ + '-M[debug move generation]' \ + '-N[disable optimizations]' \ + '-P[debug peephole optimizer]' \ + '-R[debug register optimizer]' \ + '-S[print assembly listing]' \ + '-V[print compiler version]' \ + '-W[debug parse tree after type checking]' \ + '-asmhdr[write assembly header to file]:file' \ + '-buildid[record id as the build id in the export metadata]:id' \ + '-complete[compiling complete package (no C or assembly)]' \ + '-cpuprofile[write cpu profile to file]:file' \ + '-d[print debug information about items in list]:list' \ + '-dynlink[support references to Go symbols]' \ + '-e[no limit on number of errors reported]' \ + '-f[debug stack frames]' \ + '-g[debug code generation]' \ + '-h[halt on error]' \ + '-i[debug line number stack]' \ + '-importmap[add definition of the form source=actual to import map]:definition' \ + '-installsuffix[set pkg directory suffix]:suffix' \ + '-j[debug runtime-initialized variables]' \ + '-l[disable inlining]' \ + '-largemodel[generate code that assumes a large memory model]' \ + '-live[debug liveness analysis]' \ + '-m[print optimization decisions]' \ + '-memprofile[write memory profile to file]:file' \ + '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ + '-nolocalimports[reject local (relative) imports]' \ + '-o[write output to file]:file' \ + '-p[set expected package import path]:path' \ + '-pack[write package file instead of object file]' \ + '-r[debug generated wrappers]' \ + '-race[enable race detector]' \ + '-s[warn about composite literals that can be simplified]' \ + '-shared[generate code that can be linked into a shared library]' \ + '-trimpath[remove prefix from recorded source file paths]:prefix' \ + '-u[reject unsafe code]' \ + '-v[increase debug verbosity]' \ + '-w[debug type checking]' \ + '-wb[enable write barrier (default 1)]' \ + '-x[debug lexer]' \ + '-y[debug declarations in canned imports (with -d)]' \ + '*:file:_files -g "*.go(-.)"' + ;; + + cover) + if (( CURRENT == 2 )); then + _arguments \ + '-func=[output coverage profile information for each function]:string' \ + '-html=[generate HTML representation of coverage profile]:file:_files' \ + '-mode=[coverage mode]:mode:(set count atomic)' + return + fi + + _arguments \ + '-o[file for output]:file' \ + '-var=[name of coverage variable to generate]:var' \ + '*:file:_files -g "*.go(-.)"' + ;; + + doc) + _arguments \ + '-c[respect case when matching symbols]' \ + '-cmd[treat a command (package main) like a regular package]' \ + '-u[show docs for unexported and exported symbols and methods]' \ + ;; + + fix) + _arguments \ + '-diff[display diffs instead of rewriting files]' \ + '-force[force fixes to run even if the code looks updated]:string' \ + '-r[restrict the rewrites]:string' \ + '*:files:_files' + ;; + + link) + _arguments \ + '-B[add an ELF NT_GNU_BUILD_ID note when using ELF]:note' \ + '-C[check Go calls to C code]' \ + '-D[set data segment address (default -1)]:address' \ + '-E[set entry symbol name]:entry' \ + '-H[set header type]:type' \ + '-I[use linker as ELF dynamic linker]:linker' \ + '-L[add specified directory to library path]:directory' \ + '-R[set address rounding quantum (default -1)]:quantum' \ + '-T[set text segment address (default -1)]:address' \ + '-V[print version and exit]' \ + '-W[disassemble input]' \ + '-X[add string value definition]:definition' \ + '-a[disassemble output]' \ + '-buildid[record id as Go toolchain build id]:id' \ + '-buildmode[set build mode]:mode' \ + '-c[dump call graph]' \ + '-cpuprofile[write cpu profile to file]:file' \ + '-d[disable dynamic executable]' \ + '-extld[use linker when linking in external mode]:linker' \ + '-extldflags[pass flags to external linker]:flags' \ + '-f[ignore version mismatch]' \ + '-g[disable go package data checks]' \ + '-h[halt on error]' \ + '-installsuffix[set package directory suffix]:suffix' \ + '-k[set field tracking symbol]:symbol' \ + '-linkmode[set link mode]:mode:(internal external auto)' \ + '-linkshared[link against installed Go shared libraries]' \ + '-memprofile[write memory profile to file]:file' \ + '-memprofilerate[set runtime.MemProfileRate to rate]:rate' \ + '-n[dump symbol table]' \ + '-o[write output to file]:file' \ + '-r[set the ELF dynamic linker search path to dir1:dir2:...]:path' \ + '-race[enable race detector]' \ + '-s[disable symbol table]' \ + '-shared[generate shared object (implies -linkmode external)]' \ + '-tmpdir[use directory for temporary files]:directory' \ + '-u[reject unsafe packages]' \ + '-v[print link trace]' \ + '-w[disable DWARF generation]' \ + '*:files:_files' + ;; + + objdump) + _arguments \ + '-s[only dump symbols matching this regexp]:regexp' \ + '*:files:_files' + ;; + + pack) + _arguments '1:ops:(c p r t x)' '::verbose:(v)' ':files:_files' + ;; + + pprof) + _arguments \ + '-callgrind[outputs a graph in callgrind format]' \ + '-disasm=[output annotated assembly]:p' \ + '-dot[outputs a graph in DOT format]' \ + '-eog[visualize graph through eog]' \ + '-evince[visualize graph through evince]' \ + '-gif[outputs a graph image in GIF format]' \ + '-gv[visualize graph through gv]' \ + '-list=[output annotated source for functions matching regexp]:p' \ + '-pdf[outputs a graph in PDF format]' \ + '-peek=[output callers/callees of functions matching regexp]:p' \ + '-png[outputs a graph image in PNG format]' \ + '-proto[outputs the profile in compressed protobuf format]' \ + '-ps[outputs a graph in PS format]' \ + '-raw[outputs a text representation of the raw profile]' \ + '-svg[outputs a graph in SVG format]' \ + '-tags[outputs all tags in the profile]' \ + '-text[outputs top entries in text form]' \ + '-top[outputs top entries in text form]' \ + '-tree[outputs a text rendering of call graph]' \ + '-web[visualize graph through web browser]' \ + '-weblist=[output annotated source in HTML]:p' \ + '-output=[generate output on file f (stdout by default)]:f' \ + '-functions[report at function level (default)]' \ + '-files[report at source file level]' \ + '-lines[report at source line level]' \ + '-addresses[report at address level]' \ + '-base[show delta from this profile]:profile' \ + '-drop_negative[ignore negative differences]' \ + '-cum[sort by cumulative data]' \ + '-seconds=[length of time for dynamic profiles]:n' \ + '-nodecount=[max number of nodes to show]:n' \ + '-nodefraction=[hide nodes below *total]:f' \ + '-edgefraction=[hide edges below *total]:f' \ + '-sample_index[index of sample value to display]' \ + '-mean[average sample value over first value]' \ + '-inuse_space[display in-use memory size]' \ + '-inuse_objects[display in-use object counts]' \ + '-alloc_space[display allocated memory size]' \ + '-alloc_objects[display allocated object counts]' \ + '-total_delay[display total delay at each region]' \ + '-contentions[display number of delays at each region]' \ + '-mean_delay[display mean delay at each region]' \ + '-runtime[show runtime call frames in memory profiles]' \ + '-focus=[restricts to paths going through a node matching regexp]:r' \ + '-ignore=[skips paths going through any nodes matching regexp]:r' \ + '-tagfocus=[restrict to samples tagged with key:value matching regexp]:r' \ + '-tagignore=[discard samples tagged with key:value matching regexp]' \ + '-call_tree[generate a context-sensitive call tree]' \ + '-unit=[convert all samples to unit u for display]:u' \ + '-divide_by=[scale all samples by dividing them by f]:f' \ + '-buildid=[override build id for main binary in profile]:id' \ + '-tools=[search path for object-level tools]:path' \ + '-help[help message]' \ + '*:files:_files' + ;; + + trace) + _arguments \ + '-http=[HTTP service address]:addr' \ + '*:files:_files' + ;; + + vet) + _arguments \ + '-all[check everything]' \ + '-asmdecl[check assembly against Go declarations]' \ + '-assign[check for useless assignments]' \ + '-atomic[check for common mistaken usages of the sync/atomic]' \ + '-bool[check for mistakes involving boolean operators]' \ + '-buildtags[check that +build tags are valid]' \ + '-composites[check that composite literals used field-keyed elements]' \ + '-compositewhitelist[use composite white list]' \ + '-copylocks[check that locks are not passed by value]' \ + '-methods[check that canonically named methods are canonically defined]' \ + '-nilfunc[check for comparisons between functions and nil]' \ + '-printf[check printf-like invocations]' \ + '-printfuncs[print function names to check]:string' \ + '-rangeloops[check that range loop variables are used correctly]' \ + '-shadow[check for shadowed variables]' \ + '-shadowstrict[whether to be strict about shadowing]' \ + '-shift[check for useless shifts]' \ + '-structtags[check that struct field tags have canonical format]' \ + '-tags[list of build tags to apply when parsing]:list' \ + '-test[for testing only: sets -all and -shadow]' \ + '-unreachable[check for unreachable code]' \ + '-unsafeptr[check for misuse of unsafe.Pointer]' \ + '-unusedfuncs[list of functions whose results must be used]:string' \ + '-unusedresult[check for unused result of calls to functions in -unusedfuncs]' \ + '-unusedstringmethods[list of methods whose results must be used]:string' \ + '-v[verbose]' \ + '*:files:_files' + ;; + + yacc) + _arguments \ + '-o[output]:output' \ + '-v[parsetable]:parsetable' \ + '*:files:_files' + ;; + esac + ;; + esac + ;; + + vet) + _arguments \ + '-n[print commands that would be executed]' \ + '-x[prints commands as they are executed]' \ + ${build_flags[@]} \ + '*:importpaths:__go_packages' + ;; + help) + local -a topics + topics=( + 'buildmode:build modes' + 'c:calling between Go and C' + 'cache:build and test caching' + 'environment:environment variables' + 'filetype:file types' + 'go.mod:the go.mod file' + 'gopath:GOPATH environment variable' + 'gopath-get:legacy GOPATH go get' + 'goproxy:module proxy protocol' + 'importpath:import path syntax' + 'modules:modules, module versions, and more' + 'module-get:module-aware go get' + 'module-auth:module authentication using go.sum' + 'module-private:module configuration for non-public modules' + 'packages:package lists and patterns' + 'testflag:testing flags' + 'testfunc:testing functions' + ) + + _arguments "1: :{_describe 'command' commands -- topics}" + ;; + esac + ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_google b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_google new file mode 100644 index 00000000..8cd6a1b0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_google @@ -0,0 +1,94 @@ +#compdef google +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for googlecl (https://code.google.com/p/googlecl/) +# +# Source: https://raw.github.com/dadrc/zsh-cfg/master/completions/_google +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * dadrc (https://github.com/dadrc) +# * Ben O'Hara (https://github.com/benohara) +# +# ------------------------------------------------------------------------------ + +_google() { + # init variables + local curcontext="$curcontext" state line + typeset -A opt_args + + # init state + _arguments \ + '1: :->service'\ + '2: :->task' + + case $state in + service) + _arguments '1:service:(picasa blogger youtube docs contacts calendar finance)' + ;; + *) + case $words[2] in + picasa) + compadd "$@" get create list list-albums tag post delete + ;; + blogger) + compadd "$@" post tag list delete + ;; + youtube) + compadd "$@" post tag list delete + ;; + docs) + compadd "$@" edit delete list upload get + ;; + contacts) + compadd "$@" list list-groups add add-groups delete-groups delete + ;; + calendar) + compadd "$@" add list today delete + ;; + finance) + compadd "$@" list-txn delete-pos create-pos delete-txn create create-txn list list-pos delete + ;; + *) + esac + esac +} + +_google "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gtk-launch b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gtk-launch new file mode 100644 index 00000000..a2bede47 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_gtk-launch @@ -0,0 +1,87 @@ +#compdef gtk-launch +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for gtk-launch on gtk+-3.14.8 (http://www.gtk.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * ncaq (version 3.14.8) +# +# ------------------------------------------------------------------------------ + +_gtk-launch() { + _arguments \ + {-h,--help}'[Show help options]' \ + --help-all'[Show all help options]' \ + --help-gtk'[Show GTK+ Options]' \ + --display='[X display to use]' \ + '1: :_applications' +} + +_applications() { + local -a applications + + for file in /usr/share/applications/*.desktop; do + applications+=`_format_entry $file` + done + + _values -w \ + 'applications' \ + $applications +} + +_format_entry() { + echo "`_remove_path_extension $1`[`_get_description $1`]" +} + +_remove_path_extension() { + # echo arg + # remove path string + # remove extension string + echo $1 | \ + sed 's/.*\///' | \ + sed 's/\.desktop//' +} + +_get_description() { + # grep --no-messages option is handling of not UTF-8 text + grep --no-messages '^Comment=\|^Exec=' $1 | \ + tr '\n' ' ' +} + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_hledger b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_hledger new file mode 100644 index 00000000..d6e92a7c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_hledger @@ -0,0 +1,286 @@ +#compdef hledger + +# ------------------------------------------------------------------------------ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for hledger 1.10 ( http://hledger.org/ ) +# Last updated: 07.08.2018 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Valodim ( https://github.com/Valodim ) +# * fdw ( https://github.com/fdw ) +# +# ------------------------------------------------------------------------------ +# Notes +# ----- +# +# account completion depends on availability of a ~/.hledger.journal file +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" curstate state line expl grp cmd ret=1 +typeset -a args +typeset -A opt_args + +args=( + '(- *)'{-h,--help}'[print help information]' + '(-f --file)'{-f,--file}'=[use a different input file]:input file:_files' + '--rules-file=[CSV conversion rules file]:rules file:_files' + '--alias=[display accounts named OLD as NEW]:alias specification' + '--anon=[anonymize accounts and payees]' + '(-b --begin)'{-b,--begin}'=[include postings/txns on or after this date]:date' + '(-e --end)'{-e,--end}'=[include postings/txns before this date]:date' + '(-D --daily)'{-D,--daily}'[multiperiod/multicolumn report by day]' + '(-W --weekly)'{-W,--weekly}'[multiperiod/multicolumn report by week]' + '(-M --monthly)'{-M,--monthly}'[multiperiod/multicolumn report by month]' + '(-Q --quarterly)'{-Q,--quarterly}'[multiperiod/multicolumn report by quarter]' + '(-Y --yearly)'{-Y,--yearly}'[multiperiod/multicolumn report by year]' + '(-p --period)'{-p,--period}'=[set start date, end date, and/or reporting interval all at once]' + '(-C --cleared)'{-C,--cleared}'[include only cleared postings/txns]' + '(-U --uncleared)'{-U,--uncleared}'[include only uncleared postings/txns]' + '(-R --real)'{-R,--real}'[include only non-virtual postings]' + '(--depth)--depth=[hide accounts/postings deeper than N]:depth' + '(-E --empty)'{-E,--empty}'[show empty/zero things which are normally omitted]' + '(-B --cost)'{-B,--cost}'[show amounts in their cost price'\''s commodity]' + '(-V --value)'{-V,--value}'[converts reported amounts to the current market value]' + '(-I --ignore-assertions)'{-I,--ignore-assertions}'[ignore any failing balance assertions]' + '--forecast=[apply periodic transaction rules to generate future transactions]' +) + +_arguments -C "$args[@]" -A "-*" \ + '(- *)--version[print version information]' \ + '--debug[show debug output]' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + +while (( $#state )); do + curstate=$state + shift state + case $curstate in + cmds) + typeset -a cmds + cmds=( + 'accounts:show account names (a)' + 'activity:show an ascii barchart of posting counts per interval' + 'add:prompt for transactions and add them to the journal' + 'balance:show accounts and balances (b, bal)' + 'balancesheet:show a balance sheet (bs)' + 'balancesheetequity:like balancesheet, but also reports equity' + 'cashflow:show a cashflow statement (cf)' + 'check-dates:check that transactions are sorted by increasing date' + 'check-dupes:report account names having the same leaf but different prefixes' + 'close:print closing/opening transactions that bring some or all account balances to zero and back' + 'help:show any of the hledger manuals' + 'import:read new transactions added to each file since last run, and add them to the main journal file' + 'incomestatement:show an income statement (is)' + 'prices:print market price directives from the journal' + 'print:show transaction entries (p, txns)' + 'print-unique:print transactions which do not reuse an already-seen description' + 'register:show postings and running total (r, reg)' + 'register-patch:print the one posting whose transaction description is closest to the description' + 'rewrite:print all transactions, adding custom postings to the matched ones' + 'stats:show some journal statistics' + 'tags:list all the tag names used in the journal' + 'test:run built-in unit tests' + ) + _describe 'subcommands' cmds && ret=0 + ;; + args) + : $words + local cmd=$words[1] + (( $+cmd )) || return 1 + # curcontext="${curcontext%:*:*}:$service-$cmd:" + case $cmd in + accounts) + args=( + '(--declared)--declared[show account names declared with account directives]' + '(--used)--used[show account names posted to by transactions]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(--drop)--drop=[flat mode, omit N leading account name parts]:drop n' + ) + ;; + activity) + ;; + add) + args=( + '(--no-new-accounts)--no-new-accounts=[do not allow creating new accounts]' + ) + ;; + bal|balance) + args+=( + '(--change)--change[show balance change in each period (default)]' + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-T --row-total)'{-T,--row-total}'[show a row total column]' + '(-N --no-total)'{-N,--no-total}'[do not show the final total row]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(-O --output-format)'{-O,--output-format}='[select the output format from txt, csv, html]:format' + '(-o --output-file)'{-o,--output-file}'=[write output to file]:file' + '(--pretty-tables)--pretty-tables[use unicode to display prettier tables]' + '(--sort-amount)--sort-amount[sort by amount instead of account code/name]' + '(--invert)--invert[display all amounts with reversed sign]' + '(--budget)--budget[show performance compared to budget goals]' + '(--show-unbudgeted)--show-unbudgeted[with --budget, show unbudgeted accounts also]' + ) + ;; + bl|balancesheet|balancesheetequity) + args+=( + '(--change)--change[show balance change in each period (default)]' + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-T --row-total)'{-T,--row-total}'[show a row total column]' + '(-N --no-total)'{-N,--no-total}'[do not show the final total row]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(--sort-amount)--sort-amount[sort by amount instead of account code/name]' + ) + ;; + cashflow|cf|balancesheet|bs|incomestatement|is) + args+=( + '(--change)--change[show balance change in each period (default)]' + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-T --row-total)'{-T,--row-total}'[show a row total column]' + '(-N --no-total)'{-N,--no-total}'[do not show the final total row]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(--sort-amount)--sort-amount[sort by amount instead of account code/name]' + ) + ;; + import) + args=( + '(--dry-run)--dry-run[just show the transactions to be imported]' + ) + ;; + is|incomestatement) + args+=( + '(--change)--change[show balance change in each period (default)]' + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(--tree)--tree[show accounts as a tree (default in simple reports)]' + '(--flat)--flat[show accounts as a list (default in multicolumn)]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-T --row-total)'{-T,--row-total}'[show a row total column]' + '(-N --no-total)'{-N,--no-total}'[do not show the final total row]' + '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n' + '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]' + '(--format)--format=[in tree mode, use this custom line format]:custom line format' + '(--sort-amount)--sort-amount[sort by amount instead of account code/name]' + ) + ;; + print) + args=( + '(-m --match)'{-m,--match}'[show the transaction whose description is most similar]:string' + '(--new)--new[show only newer-dated transactions added in each file since last run]' + '(-x --explicit)'{-x,--explicit}'[show all amounts explicitly]' + '(-O --output-format)'{-O,--output-format}='[select the output format from txt, csv, html]:format' + '(-o --output-file)'{-o,--output-file}'=[write output to file]:file' + ) + ;; + register|reg) + args+=( + '(--cumulative)--cumulative[show balance change accumulated across periods]' + '(-H --historical)'{-H,--historical}'[show historical ending balance in each period]' + '(-A --average)'{-A,--average}'[show a row average column (in multicolumn mode)]' + '(-r --related)'{-r,--related}'[show postings'\'' siblings instead]' + '(-w --width)'{-w,--width}'=[set output width to 120, or N]:width (default 80)' + '(-O --output-format)'{-O,--output-format}='[select the output format from txt, csv, html]:format' + '(-o --output-file)'{-o,--output-file}'=[write output to file]:file' + ) + ;; + stats) + args=( + '(-o --output-file)'{-o,--output-file}'=[write output to file]:file' + ) + ;; + # fallback to _default + *) _arguments -C -A "-*" "$args[@]" \ + '*: :_default' && ret=0 + continue + esac + _arguments -C -A "-*" "$args[@]" \ + '*:query patterns:->query' && ret=0 + ;; + query) + + local -a accs keywords + keywords=( + 'acct\::match account names' + 'code\::match by transaction code' + 'desc\::match transaction descriptions' + 'tag\::match by tag name' + 'depth\::match at or above depth' + 'status\::match cleared/uncleared transactions' + 'real\::match real/virtual transactions' + 'empty\::match if amount is/is not zero' + 'amt\::match transaction amount' + 'cur\::match by currency' + ) + if compset -P 'amt:'; then + _message 'match amount (<, <=, >, >=, add sign for non-absolute match)' && ret=0 + continue + fi + if compset -P '(#b)(code|desc|tag|depth|status|real|empty):'; then + _message "'$match[1]' parameter" && ret=0 + continue + fi + + accs=( ${(f)"$(_call_program hledger hledger accounts $PREFIX 2>/dev/null)"} ) + if (( $? )); then + _message "error fetching accounts from hledger" + fi + + # decided against partial matching here. these lines can + # be uncommented to complete subaccounts hierarchically + # (add -S '' -q to the compadd below, too) + # if compset -P '(#b)(*):'; then + # accs=( ${(M)accs:#$match[1]:*} ) + # accs=( ${accs#$IPREFIX} ) + # fi + # accs=( ${accs%%:*} ) + + _wanted accounts expl "accounts" compadd -a accs && ret=0 + _describe "matcher keywords" keywords -S '' && ret=0 + + # not is special, it doesn't need the -S '' + keywords=( + 'not:negate expression' + ) + _describe "matcher keywords" keywords && ret=0 + + ;; + esac +done + +return ret diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_homestead b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_homestead new file mode 100644 index 00000000..9dc1c415 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_homestead @@ -0,0 +1,53 @@ +#compdef homestead +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for homestead (http://laravel.com/docs/homestead). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * loranger (https://github.com/loranger) +# +# ------------------------------------------------------------------------------ + + +_homestead_get_command_list () { + homestead --no-ansi | sed "1,/Available commands/d" | awk '/ [a-z]+/ { print $1 }' +} + +_homestead () { + if [ -f homestead ]; then + compadd `_homestead_get_command_list` + fi +} + +compdef _homestead php homestead +compdef _homestead homestead diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_httpie b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_httpie new file mode 100644 index 00000000..442c1385 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_httpie @@ -0,0 +1,199 @@ +#compdef http +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for httpie 0.7.2 (http://httpie.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# * Valodim +# * Claus Klingberg +# * Shohei YOSHIDA +# +# ------------------------------------------------------------------------------ + +_httpie_params () { + + local ret=1 expl + + # or a url + if (( CURRENT <= NORMARG+1 )) && [[ $words[NORMARG] != *:* ]] ; then + _httpie_urls && ret=0 + + # regular param, if we already have a url + elif (( CURRENT > NORMARG )); then + + # if the suffix is precisely : this is shorthand for a header + if [[ -prefix ':' ]]; then + PREFIX= + SUFFIX=: + fi + + # if we are in front of a : (possibly due to the PREFIX move before) + if [[ -suffix ':' ]]; then + + # this is rather buggy with normal tab behavior :\ + compstate[insert]=menu + _wanted http_header expl 'HTTP Header' \ + compadd -s ':' -S '' -- Content-Type Cookie && return 0 + fi + + # ignore all prefix stuff + compset -P '(#b)([^:@=]#)' + local name=$match[1] + + if compset -P '='; then + _message "$name data field value" + elif compset -P '@'; then + _files + elif compset -P ':=@'; then + _files + elif compset -P ':='; then + _message "$name raw json data" + elif compset -P '=='; then + _message "$name url parameter value" + elif compset -P ':'; then + _message "$name header content" + else + typeset -a ops + ops=( + '=:data field' + '\::header' + '==:request parameter' + '@:data file field' + '\:=:raw json field' + '\:=@:raw json field file path' + ) + _describe -t httpparams "parameter types" ops -Q -S '' + fi + + ret=0 + + fi + + # first arg may be a request method + (( CURRENT == NORMARG )) && + _wanted http_method expl 'Request Method' \ + compadd GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT PATCH LINK UNLINK && ret=0 + + return $ret + +} + +_httpie_urls() { + + local ret=1 + + if ! [[ -prefix [-+.a-z0-9]#:// ]]; then + local expl + compset -S '[^:/]*' && compstate[to_end]='' + _wanted url-schemas expl 'URL schema' compadd -S '' http:// https:// && ret=0 + else + _urls && ret=0 + fi + + return $ret + +} + +_httpie_printflags () { + + local ret=1 + + # not sure why this is necessary, but it will complete "-pH" style without it + [[ $IPREFIX == "-p" ]] && IPREFIX+=" " + + compset -P '(#b)([a-zA-Z]#)' + + local -a flags + [[ $match[1] != *H* ]] && flags+=( "H:request headers" ) + [[ $match[1] != *B* ]] && flags+=( "B:request body" ) + [[ $match[1] != *h* ]] && flags+=( "h:response headers" ) + [[ $match[1] != *b* ]] && flags+=( "b:response body" ) + + _describe -t printflags "print flags" flags -S '' && ret=0 + + return $ret + +} + +integer NORMARG + +_arguments -n -C -s \ + '(-j --json -f)'{-j,--json}'[Data items from the command line are serialized as a JSON object.]' \ + '(-f --form -j)'{-f,--form}'[Data items from the command line are serialized as form fields.]' \ + '(-x --compress)'{-x,--compress}'[Content compressed with Deflate algorithm]' \ + '--pretty=[Controls output processing.]:output format:(all colors format none)' \ + '(-s --style)'{-s,--style}'=[Output coloring style]:STYLE:(autumn borland bw colorful default emacs friendly fruity manni monokai murphy native pastie perldoc ttr solarized tango trac vim vs)' \ + '(-p --print)'{-p,--print}'=[String specifying what the output should contain]:print flags:_httpie_printflags' \ + '(-v --verbose)'{-v,--verbose}'[Print the whole request as well as the response.]' \ + '(-p -h --headers)'{-h,--headers}'[Print only the response headers.]' \ + '(-p -b --body)'{-b,--body}'[Print only the response body.]' \ + '--all[By default, only the final request/response is shown]' \ + '(--P --history-print)'{-P,--history-print}'=[The same as --print but applies only to intermediary requests/response]:print flags:_httpie_printflags' \ + '(-S --stream)'{-S,--stream}'[Always stream the output by line, i.e., behave like `tail -f`.]' \ + '(-o --output)'{-o,--output}'=[Save output to FILE.]:output file:_files' \ + '(-d --download)'{-d,--download}'=[Do not print the response body to stdout.]' \ + '(-c --continue)'{-c,--continue}'[Resume an interrupted download.]' \ + '(--session-read-only)--session=[Create, or reuse and update a session.]:session name (or path)' \ + '(--session)--session-read-only=[Create or read a session without updating it form the request/response exchange.]:session name (or path)' \ + '(-a --auth)'{-a,--auth}'=[If only the username is provided (-a username)]:USER\:PASS' \ + '--auth-type=[The authentication mechanism to be used. Defaults to "basic".]:AUTH-TYPE:(basic digest)' \ + '--ignore-netrc[Ignore credentials from .netrc]' \ + '--offline[Build the request and print it but do not actually send it]' \ + '--proxy=[String mapping protocol to the URL of the proxy.]:PROXY' \ + '(-F --follow)'{-F,--follow}'[Allow full redirects.]' \ + '--max-redirects=[A limit of redirects]:number:' \ + '--max-headers=[The maximum number of response headers to be read]:number:' \ + "--verify=[Enable or disable verification of ssl certificates.]:verify certificate:(yes no)" \ + '--ssl=[The desired protocol version to use]:ssl version:(ssl2.3 tls1 tls1.1 tls1.2)' \ + '--cert=[Specify a local cert to use as client side SSL certificate]:cert:_files' \ + '--cert-key=[Specify the private to key to use with SSL]:cert key:_files' \ + '--allow-redirects[Set this flag if full redirects are allowed (e.g. re-POST-ing of data at new ``Location``)]' \ + '--timeout=[Float describes the timeout of the request (Use socket.setdefaulttimeout() as fallback).]:timeout (seconds)' \ + '--check-status[This flag instructs HTTPie to also check the HTTP status code and exit with an error if the status indicates one.]' \ + '--path-as-is[Bypass dot segment URL squashing]' \ + '(-I --ignore-stdin)'{-I,--ignore-stdin}'[Do not attempt to read stdin.]' \ + '(- *)--help[show help message.]' \ + "(- *)--version[show program's version number and exit.]" \ + '--traceback[Prints exception traceback should one occur.]' \ + '--default-scheme=[The default scheme to use if not specified in the URL]:scheme:' \ + '--debug[Prints exception traceback should one occur and other information useful for debugging HTTPie itself.]' \ + '*:args:_httpie_params' && return 0 + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ibus b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ibus new file mode 100644 index 00000000..69c114c6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ibus @@ -0,0 +1,84 @@ +#compdef ibus +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ibus (https://github.com/ibus/ibus). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Tomo Kazahaya +# +# ------------------------------------------------------------------------------ + +# The completion of "ibus emoji --lang=" depends on _language_codes from +# https://github.com/zsh-users/zsh-completions. + +local context state state_descr line +typeset -A opt_args +local curcontext=$curcontext + +_arguments -C \ + ":command:(($(ibus help|sed -ne 's/^ \(\S\+\) \+\(.*\)/"\1\\:\2"/p')))" \ + '*:: :->args' \ + && return + +case $state in + args) + case $line[1] in + engine) + _arguments \ + ":engine:(($(ibus list-engine|sed -ne 's/:/\\\\:/g' -e 's/^ \(\S\+\) - \(.*\)$/"\1:\2"/p')))" \ + && return + ;; + read-cache) + _arguments \ + '--system[show the content of the system registry cache]' \ + '--file=[custom registry cache to show]:registry cache:_files' \ + && return + ;; + write-cache) + _arguments \ + '--system[save the system registry cache]' \ + '--file=[custom registry cache to save]:registry cache:_files' \ + && return + ;; + emoji) + _arguments \ + '--font=[emoji font]:emoji font: ' \ + '--lang=[language of emoji annotations]:language:_language_codes ISO-639-1' \ + '--partial-match[match annotations with a partial string]' \ + && return + ;; + esac + ;; +esac + +return 1 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_include-what-you-use b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_include-what-you-use new file mode 100644 index 00000000..bb9902c6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_include-what-you-use @@ -0,0 +1,65 @@ +#compdef include-what-you-use + +# Copyright 2018 CERN for the benefit of the LHCb Collaboration. +# All rights reserved. +# +# Developed by: +# +# CERN LBC group +# +# CERN +# +# http://cern.ch +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# with 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: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimers. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimers in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the names of the LBC group, CERN, nor the names of its +# contributors may be used to endorse or promote products derived from +# this Software without specific prior written permission. +# +# 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 +# CONTRIBUTORS 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 WITH +# THE SOFTWARE. +# +# In applying this licence, CERN does not waive the privileges and immunities +# granted to it by virtue of its status as an Intergovernmental Organization or +# submit itself to any jurisdiction. + +# TODO: +# - prevent _iwyu_opts from running once the first clang option got passed + +_iwyu_opts() { + _arguments '--check_also=[print iwyu-violation info for files matching the given glob pattern]:glob pattern:' \ + '--cwd=[specify the current working directory]:current working directory:_path_files -/' \ + '--howtodebug[print instructions on how to run iwyu under gdb]' \ + '--howtodebug=[print instructions on how to run iwyu under gdb if file matches argument]:file for debug run:_path_files' \ + '*'"--mapping_file=[iwyu mapping file]:iwyu mapping file:_path_files -g '*(/) *.imp'" \ + "--no_default_mappings[do not add iwyu's default mappings]" \ + '--pch_in_code[mark the first include in a translation unit as a precompiled header]' \ + '--prefix_header_includes=[what to do with command line includes]:command line include treatment:(add keep remove)' \ + "--transitive_includes_only[do not suggest that a file add headers that aren't already visible]" \ + '--max_line_length=[maximum line length for includes]:a number:' \ + '--no_comments[do not add "why" comments]' \ + '--no_fwd_decls[do not use forward declarations]' \ + '--verbose=[the higher the level, the more output]:a number:' +} + +_arguments "*-Xiwyu[include-what-you-use options]:include-what-you-use options:_iwyu_opts" +# gcc will also provide --version and --help. Not ideal. +_gcc diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_inxi b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_inxi new file mode 100644 index 00000000..2089b8f1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_inxi @@ -0,0 +1,146 @@ +#compdef inxi +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script of inxi - a full featured CLI system information tool +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Oleksii Filonenko +# +# ------------------------------------------------------------------------------ + +local colors=($(seq 0 42)) +local verbosity_levels=( + '0:Short output, same as: inxi' + '1:Basic verbose, -S + basic CPU' + '2:Adds -N, -M, -B, same as: inxi -b' + '3:Adds -C, -n, -x' + '4:Adds -P, -D' + '5:Adds -A, -m, -s, -l, -u' + '6:Adds -p, -o, -d, --usb, -xx' + '7:Adds -i, -xxx' + '8:Adds -r, --slots, -tcm, --admin' +) +local alt_downloaders=( + '40:Perl' + '41:Curl' + '42:Fetch' + '43:Wget' + '44:Curl, Fetch, and Wget' +) +local partition_sort_orders=( + 'dev-base:/dev partition identifier' + 'fs:partition filesystem' + 'id:mount point of partition (default)' + 'label:label of partition' + 'percent-used:percentage of partition size used' + 'size:KiB size of partition' + 'uuid:UUID of the partition' + 'used:KiB used of partition' +) + +_arguments -s \ + {-A,--audio}"[Show Audio/sound card(s) information]" \ + {-b,--basic}"[Show basic output, short form]" \ + {-B,--battery}"[Show system Battery information]" \ + {-c+,--color=}"[Set color scheme]:color:(${colors[*]})" \ + {-C,--cpu}"[Show full CPU output]" \ + {-d,--disk-full,--optical}"[Show hard + optical drive info]" \ + {-D,--disk}"[Show hard Disk info]" \ + {-f,--flags}"[Show all CPU flags used]" \ + {-F,--full}"[Show Full output]" \ + {-G,--graphics}"[Show Graphic card(s) information]" \ + "(- *)"{-h,--help}"[Show list of command-line options]" \ + {-i,--ip}"[Show WAN IP address and local interfaces]" \ + {-I,--info}"[Show Information: processes, uptime, etc.]" \ + {-l,--label}"[Show partition labels]" \ + {-m,--memory}"[Memory (RAM) data]" \ + {-M,--machine}"[Show Machine data]" \ + {-n,--network-advanced}"[Show Advanced Network card information]" \ + {-N,--network}"[Show Network card(s) information]" \ + {-o,--unmounted}"[Show unmounted partition information]" \ + {-p,--partitions-full}"[Show full Partition information]" \ + {-P,--partitions}"[Show basic Partition information]" \ + {-r,--repos}"[Show distro repository data]" \ + {-R,--raid}"[Show RAID data]" \ + "(- *)"--recommends"[Check inxi dependencies + recommends]" \ + {-s,--sensors}"[Show output from configured sensors]" \ + --slots"[Show PCI slots]" \ + {-S,--system}"[Show System information]" \ + {-t+,--processes=}"[Show processes]:processes:((c\:'CPU only' m\:'Memory only' cm\:'CPU+memory'))" \ + --usb"[Show USB data for attached Hubs and Devices]" \ + {-u,--uuid}"[Show partition UUIDs]" \ + "(- *)"{-U,--update}"[Auto-update inxi]" \ + "(- *)"{-V,--version}"[Show version of inxi]" \ + {-v+,--verbosity=}"[Script verbosity levels]:verbosity:->verbosity" \ + {-w,--weather}"[Adds weather line]" \ + {-W+,--weather-location=}"[Get weather/time for an alternate location]:weather location: " \ + --weather-unit="[Set weather unit]:weather unit:((m\:metric i\:imperial mi\:'metric (imperial)' im\:'imperial (metric)'))" \ + {-y+,--width=}"[Set width override]:columns (80 minimum): " \ + {-z,--filter}"[Adds security filters]" \ + {-Z,--filter-override}"[Absolute override for output filters]" \ + \*{-x,--extra}"[Extra data options]" \ + {-a,--admin}"[Admin extra data options]:admin option:->admin" \ + --alt"[Bypass a downloader option]:downloader:->alt" \ + --display"[Get display data out of X]:\:: " \ + --dmidecode"[Force use of dmidecode]" \ + --downloader"[Force inxi to use a specific downloader]:downloader:(curl fetch perl wget)" \ + --host"[Turns on hostname in System line]" \ + --indent-min"[Overrides default indent minimum value]:integer: " \ + --limit"[Limit max IP addresses for -i]:limit (-1 removes the limit): " \ + --man"[Updates / install man page with -U]" \ + --no-host"[Turns off hostname in System line]" \ + --no-man"[Disables man page install with -U]" \ + --no-ssl"[Skip SSL certificate checks]" \ + --output"[Change data output type]:type:(json screen xml)" \ + --output-file"[Path to output file]:output file:->output_file" \ + --partition-sort"[Change default sort order of partition output]:order:->partition_sort" \ + --sleep"[Change CPU sleep time]:sleep time (usually in decimals): " \ + --tty"[Forces internal IRC flag to off]" \ + --usb-sys"[Forces the USB data generator to use /sys as data source]" \ + --usb-tool"[Forces the USB data generator to use lsusb as data source]" \ + --wan-ip-url"[Force -i to use supplied URL as WAN ip source]:URL: " \ + --wm"[Force System item wm to use wmctrl as data source]" \ + --dbg"[Debug downloader failures]:level:(1)" \ + --debug"[On screen debugger output]:level:(1 2 3 10 11 20 21 22)" \ + --ftp"[Set alternate ftp upload location]:FTP URL: " \ + --debug-proc"[Force debugger to parse /proc directory data when run as root]" \ + --debug-proc-print"[Use this to locate file that /proc debugger hangs on]" \ + --debug-no-exit"[Skip exit on error when running debugger]" \ + --debug-no-proc"[Skip /proc debugging in case of a hang]" \ + --debug-no-sys"[Skip /sys debugging in case of a hang]" \ + --debug-sys"[Force PowerPC debugger parsing of /sys as sudo/root]" \ + --debug-proc"[Force debugger to parse /proc directory data when run as root]" \ + --debug-sys-print"[Use this to locate file that /sys debugger hangs on]" + +case "$state" in + admin) + _arguments -s \ + -C"[Adds CPU family, model-id, and stepping]" \ + -d"[Adds logical and physical block size in bytes]" \ + {-p,-P}"[Adds raw partition / filesystem block size]" + ;; + alt) + _describe 'downloader' alt_downloaders + ;; + output_file) + _alternative \ + "outputs:output file:((print\:'Print to stdout'))" \ + "outputs:output file:_files" + ;; + partition_sort) + _describe 'sort order' partition_sort_orders + ;; + verbosity) + _describe 'script verbosity level' verbosity_levels + ;; +esac + +# Local Variables: +# mode: shell-script +# sh-shell: zsh +# End: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jmeter b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jmeter new file mode 100644 index 00000000..c26db823 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jmeter @@ -0,0 +1,49 @@ +#compdef jmeter +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for JMeter (http://jakarta.apache.org/jmeter). +# +# Status: incomplete +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- 1 *)'{-h,--help}'[print usage information and exit]' \ + '(- 1 *)'{-v,--version}'[print the version information and exit]' \ + {-p,--propfile}'[the jmeter property file to use]:properties file:_files -g "*.properties"' \ + '*'{-q,--addprop}'[additional property file(s)]:properties file:_files -g "*.properties"' \ + {-t,--testfile}'[the jmeter test plan file to run]:JMeter test plan file:_files -g "*.jmx"' \ + {-j,--jmeterlogfile}'[the jmeter log file]: :_files -g "*.log"' \ + {-l,--logfile}'[the file to log samples to]: :_files -g "*.jtl"' \ + {-n,--nongui}'[run JMeter in nongui mode]' \ + {-s,--server}'[run the JMeter server]' \ + {-H,--proxyHost}'[set a proxy server for JMeter to use]: :_hosts' \ + {-P,--proxyPort}'[set proxy server port for JMeter to use]:number' \ + {-u,--username}'[set username for proxy server that JMeter is to use]:username:_users' \ + {-a,--password}'[set password for proxy server that JMeter is to use]:password' \ + {-J-,--jmeterproperty}'[define additional JMeter properties]:argument=value' \ + {-G-,--globalproperty}'[define Global properties (sent to servers)]:argument=value' \ + {-D-,--systemproperty}'[define additional System properties]:argument=value' \ + {-S,--systemPropertyFile}'[a property file to be added as System properties]:properties file:_files -g "*.properties"' \ + {-L,--loglevel}'[define loglevel]:[category=]level' \ + {-r,--runremote}'[start remote servers (as defined by the jmeter property remote_hosts)]' \ + {-R,--remotestart}'[start these remote servers (overrides remote_hosts)]:remote servers list' \ + {-d,--homedir}'[the JMeter home directory to use]: :_files -/' \ + {-X,--remoteexit}'[exit the remote servers at end of test (non-GUI)]' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jmeter-plugins b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jmeter-plugins new file mode 100644 index 00000000..3253896f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jmeter-plugins @@ -0,0 +1,42 @@ +#compdef jmeter-plugins +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for jmeter-plugins command line tool 0.4.2 +# (http://code.google.com/p/jmeter-plugins). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- 1 *)--help[show help options]' \ + '--generate-png[generate PNG file containing graph]:PNG file name:_files -g "*.png"' \ + '--generate-csv[generate CSV file containing graph data]:CSV file name:_files -g "*.csv"' \ + '--input-jtl[load data from specified JTL file]:JTL file:_files -g "*.jtl"' \ + '--plugin-type[type of graph to use for results generation]:class:((AggregateReport ThreadsStateOverTime BytesThroughputOverTime HitsPerSecond LatenciesOverTime PerfMon ResponseCodesPerSecond ResponseTimesDistribution ResponseTimesOverTime ResponseTimesPercentiles ThroughputOverTime ThroughputVsThreads TimesVsThreads TransactionsPerSecond))' \ + '--width[set graph width]:graph width (pixels)' \ + '--height[set graph height]::graph height (pixels)' \ + '--granulation[granulation time for samples]:time (ms)' \ + '--relative-times[use relative X axis times, no will set absolute times]: :((yes no))' \ + '--aggregate-rows[aggregate all rows into one]: :((yes no))' \ + '--paint-gradient[paint gradient background]: :((yes no))' \ + '--paint-zeroing[paint zeroing lines]: :((yes no))' \ + '--prevent-outliers[prevent outliers on distribution graph]: :((yes no))' \ + '--limit-rows[limit number of points in row]:number of points' \ + '--force-y[force Y axis limit]:limit' \ + '--hide-low-counts[hide points with sample count below limit]:limit' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jonas b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jonas new file mode 100644 index 00000000..19659171 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jonas @@ -0,0 +1,100 @@ +#compdef jonas +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for JOnAS 5.2 (http://jonas.ow2.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +typeset -A opt_args +local context state line curcontext="$curcontext" ret=1 + +_arguments -C \ + '1:cmd:->cmds' \ + '*::arg:->args' \ +&& ret=0 + +case "$state" in + (cmds) + local commands; commands=( + 'version:show version information' + 'check:check that the JOnAS environment is correctly set' + 'start:start a server instance' + 'stop:stop a server instance' + 'admin:administrate a server instance' + ) + _describe -t commands 'command' commands && ret=0 + ;; + (args) + curcontext="${curcontext%:*:*}:jonas-cmd-$words[1]:" + case $words[1] in + (version|check) + _message 'no more arguments' && ret=0 + ;; + (start) + _arguments \ + '-standby[start a minimal JOnAS server with only mandatory services]' \ + '(-bg)-fg[start the server in foreground mode]' \ + '(-fg)-bg[start the server in background mode]' \ + '-win[start the server in a new window]' \ + '(-bg)-tui[start the Apache Felix TUI (force foreground mode)]' \ + '-gui[start the Apache Felix GUI]' \ + '-dev[start a JOnAS server by using bundles present in the default maven repository instead of bundles under $JONAS_ROOT/lib/bundles]' \ + '-clean[clean the Apache Felix cache before starting a JOnAS server]' \ + '-n[set the server name, must be unique in the domain (default: jonas)]:name' \ + '-target[start another server or cluster (group of servers) in the domain]:server' \ + '-Ddomain.name=[set the name of the management domain to which the server belongs]:domain' \ + && ret=0 + ;; + (stop) + _arguments \ + '-standby[stop all services except the mandatory ones]' \ + '-n[set the name of the server to stop (default: jonas)]:name' \ + '-target[stop another server or cluster (group of servers) in the domain]:server' \ + '-Ddomain.name=[set the name of the management domain to which the server belongs]:domain' \ + && ret=0 + ;; + (admin) + _arguments \ + '(- : *)-?[print the help message]' \ + '-win[administer the server in a new window]' \ + '-n[set the name of the server to administer (default: jonas)]:name' \ + '-username[set the username when authentication is required]: :_users' \ + '-password[set the password when authentication is required]:password' \ + '-registry[set the registry URL]: :_urls' \ + '-protocol[set the protocol name]:protocol:((jrmp\:JRE\ implementation\ of\ RMI\ on\ the\ JRMP\ protocol\ \(default\) iiop\:JacORB\ implementation\ of\ RMI\ over\ the\ IIOP\ protocol irmi\:Oracle\ JRE\ independant\ implementation\ of\ RMI))' \ + '-a[deploy an application from a given filepath on the current server, or on another target in the domain if the current server is a master]:Java application archive:_files -g "*.(j|w|r|e)ar"' \ + '-r[undeploy a previously deployed application from the current server or from the specified target if the current server is a master]:Java application archive:_files -g "*.(j|w|r|e)ar"' \ + '-gc[run the garbage collector on the current JOnAS server]' \ + '-passivate[passivate all entity bean instances]' \ + '-e[list the properties of the current JOnAS server]' \ + '-j[list the registered JNDI names, as seen by the current JOnAS server]' \ + '-l[list the beans currently loaded by the current JOnAS server]' \ + '-synch[synchronize the entity bean instances on the current JOnAS server]' \ + '-debug[set the logging level for the given topic to DEBUG]:topic' \ + '-tt[change the default timeout for transactions]:timeout (seconds)' \ + '-ping[wait until the JOnAS server is available]' \ + '-timeout[maximum time to wait when -ping is used]:timeout (seconds)' \ + && ret=0 + ;; + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jrnl b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jrnl new file mode 100644 index 00000000..e1bc1855 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_jrnl @@ -0,0 +1,66 @@ +#compdef jrnl +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for jrnl a simple journal application for your command line. (https://maebert.github.io/jrnl/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + + +_jrnl() { + + _arguments -C \ + '(- 1 *)'-h"[Show help and exit]" \ + '(- 1 *)'-v"[Prints version information and exits]" \ + '(- 1 *)'-ls"[Displays accessible journals]" \ + '(- 1 *)'-d"[Execute in debug mode]" \ + '(- 1 *)'--tags"[Returns a list of all tags and number of occurrences]" \ + "--short[Show only titles or line containing the search]" \ + "-from[View entries after this date]:date:" \ + "-until[View entries before this date]:date:" \ + "-to[View entries before this date]:date:" \ + "-on[View entries on this date]:date:" \ + "-and[Filter by tags using AND (default: OR)]" \ + "-starred[Show only starred entries]" \ + "-n[Shows the last n entries matching the filter. And '-3' have the same effect.]":number: \ + "--export[Export your journal. TYPE can be json, markdown text.]:format:(json markdown text)" \ + "-o[Optionally specifies output file when using --export If OUTPUT is a directory, exports each entry in individual file instead.]:output file:" \ + "--encrypt[Encrypts your existing journal with a new pass]" \ + "--decrypt[Decrypts your journal and stores it in plain text]" \ + "--edit[Opens your editor to edit the selected entries.]" \ +} + +_jrnl + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_kak b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_kak new file mode 100644 index 00000000..6079f368 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_kak @@ -0,0 +1,71 @@ +#compdef kak +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for kak (https://github.com/mawww/kakoune) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Frank LENORMAND +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + +_kak_sessions() { + local -a session_ids expl + session_ids=($(_call_program session_names kak -l)) + _description session-ids expl "session name" + compadd "$expl[@]" -a session_ids +} + +_kak() { + _arguments \ + '-n[do not source rc files on startup]' \ + '-l[list existing sessions]:session_id:_kak_sessions' \ + '-clear[clear dead sessions]' \ + '-ro[readonly mode]' \ + '(-help --help)'{-help,--help}'[display a help message and quit]' \ + '-d[run as a headless session (requires -s)]' \ + '-q[in filter mode, be quiet about errors applying keys]' \ + '-c[connect to given session]:session_id:_kak_sessions' \ + '-e[execute argument on client initialisation]:keys' \ + '-E[execute argument on server initialisation]:keys' \ + '-s[set session name]:session_id' \ + '-p[just send stdin as commands to the given session]:session_id:_kak_sessions' \ + '-f[act as a filter, executing given keys on given files]:keys' \ + '-i[backup the files on which a filter is applied using the given suffix]:suffix' \ + '-ui[set the type of user interface to use (ncurses, dummy, or json)]:ui_type:(ncurses dummy json)' \ + '*::files:_files' +} + +_kak "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_kitchen b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_kitchen new file mode 100644 index 00000000..55f59f63 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_kitchen @@ -0,0 +1,86 @@ +#compdef kitchen +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Test Kitchen (http://kitchen.ci/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Peter Eisentraut (https://github.com/petere) +# * Shohei YOSHIDA (https://github.com/syohex) +# +# ------------------------------------------------------------------------------ + + +_kitchen() { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments '1: :->cmds'\ + '2: :->args' + + case $state in + cmds) + _kitchen_commands + ;; + args) + case $line[1] in + converge|create|destroy|diagnose|list|setup|test|verify) + compadd 'all' + _kitchen_instances + ;; + login) + _kitchen_instances + ;; + esac + ;; + esac +} + +_kitchen_commands() { + local commands + + commands=("${(@f)$(_call_program commands $service help | sed -n 's/^ kitchen \([[:alpha:]]*\) .*# \(.*\)$/\1:\2/p')}") + _describe -t commands 'kitchen commands' commands +} + +_kitchen_instances() { + if [[ $_kitchen_instances_cache_dir != $PWD ]]; then + unset _kitchen_instances_cache + fi + if [[ ${+_kitchen_instances_cache} -eq 0 ]]; then + _kitchen_instances_cache=(${(f)"$(_call_program instances $service list -b 2>/dev/null)"}) + _kitchen_instances_cache_dir=$PWD + fi + _wanted instances expl 'instance' compadd -a _kitchen_instances_cache +} + +_kitchen "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_knife b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_knife new file mode 100644 index 00000000..53aa9ac4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_knife @@ -0,0 +1,238 @@ +#compdef knife +# ------------------------------------------------------------------------------ +# Copyright (c) 2009-2015 Robby Russell and contributors (see +# https://github.com/robbyrussell/oh-my-zsh/contributors) +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Chef's knife (http://www.opscode.com/chef). +# +# Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/knife +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Frank Louwers (https://github.com/franklouwers) +# * Mark Cornick (https://github.com/markcornick) +# +# ------------------------------------------------------------------------------ + + +# knife has a very special syntax, some example calls are: +# knife status +# knife cookbook list +# knife role show ROLENAME +# knife data bag show DATABAGNAME +# knife role show ROLENAME --attribute ATTRIBUTENAME +# knife cookbook show COOKBOOKNAME COOKBOOKVERSION recipes + +# The -Q switch in compadd allow for completions of things like "data bag" without having to go through two rounds of completion and avoids zsh inserting a \ for escaping spaces +_knife() { + local curcontext="$curcontext" state line + typeset -A opt_args + + # These flags should be available everywhere according to man knife + knife_general_flags=( --help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes --environment ) + + cloudproviders=(bluebox ec2 rackspace slicehost terremark) + _arguments \ + '1: :->knifecmd'\ + '2: :->knifesubcmd'\ + '3: :->knifesubcmd2' \ + '4: :->knifesubcmd3' \ + '5: :->knifesubcmd4' \ + '6: :->knifesubcmd5' + + case $state in + knifecmd) + compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" diff environment user exec index node recipe role search ssh status windows $cloudproviders + ;; + knifesubcmd) + case $words[2] in + (bluebox|ec2|rackspace|slicehost|terremark) + compadd "$@" server images + ;; + client) + compadd -Q "$@" "bulk delete" list create show delete edit reregister + ;; + configure) + compadd "$@" client + ;; + cookbook) + compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload + ;; + diff) + _arguments '*:file or directory:_files -g "*.(rb|json)"' + ;; + environment) + compadd -Q "$@" create delete edit "from file" list show + ;; + user) + compadd -Q "$@" create delete edit list reregister show + ;; + node) + compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete" + ;; + recipe) + compadd "$@" list + ;; + role) + compadd -Q "$@" "bulk delete" create delete edit "from file" list show + ;; + windows) + compadd "$@" bootstrap + ;; + *) + _arguments '2:Subsubcommands:($(_knife_options1))' + esac + ;; + knifesubcmd2) + case $words[3] in + server) + compadd "$@" list create delete + ;; + images) + compadd "$@" list + ;; + site) + compadd "$@" vendor show share search download list unshare + ;; + (show|delete|edit) + _arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))' + ;; + (upload|test) + _arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)' + ;; + list) + compadd -a "$@" knife_general_flags + ;; + bag) + compadd -Q "$@" show edit list "from file" create delete + ;; + *) + _arguments '3:Subsubcommands:($(_knife_options2))' + esac + ;; + knifesubcmd3) + case $words[3] in + show) + case $words[2] in + cookbook) + versioncomp=1 + _arguments '4:Cookbookversions:($(_cookbook_versions) latest)' + ;; + (node|client|role|environment) + compadd "$@" --attribute + esac + esac + case $words[4] in + (show|edit) + _arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))' + ;; + file) + _arguments '*:file or directory:_files -g "*.(rb|json)"' + ;; + list) + compadd -a "$@" knife_general_flags + ;; + *) + _arguments '*:Subsubcommands:($(_knife_options3))' + esac + ;; + knifesubcmd4) + if (( versioncomp > 0 )); then + compadd "$@" attributes definitions files libraries providers recipes resources templates + else + _arguments '*:Subsubcommands:($(_knife_options2))' + fi + ;; + knifesubcmd5) + _arguments '*:Subsubcommands:($(_knife_options3))' + esac +} + +# Helper functions to provide the argument completion for several depths of commands +_knife_options1() { + ( for line in $( knife $words[2] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +_knife_options2() { + ( for line in $( knife $words[2] $words[3] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +_knife_options3() { + ( for line in $( knife $words[2] $words[3] $words[4] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +# The chef_x_remote functions use knife to get a list of objects of type x on the server +_chef_roles_remote() { + (knife role list | awk '{print $1}') +} + +_chef_clients_remote() { + (knife client list | awk '{print $1}') +} + +_chef_nodes_remote() { + (knife node list | awk '{print $1}') +} + +_chef_cookbooks_remote() { + (knife cookbook list | awk '{print $1}') +} + +_chef_sitecookbooks_remote() { + (knife cookbook site list | awk '{print $1}') +} + +_chef_data_bags_remote() { + (knife data bag list | awk '{print $1}') +} + +_chef_environments_remote() { + (knife environment list | awk '{print $1}') +} + +_chef_users_remote() { + (knife user list | awk '{print $1}') +} + +# The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server +_chef_cookbooks_local() { + (for i in $( grep cookbook_path $HOME/.chef/knife.rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' | cut -d '"' -f2 ); do ls $i; done) +} + +# This function extracts the available cookbook versions on the chef server +_cookbook_versions() { + (knife cookbook show $words[4] | grep -v $words[4] | grep -v -E '\]|\[|\{|\}' | sed 's/ //g' | sed 's/"//g') +} + +_knife "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_language_codes b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_language_codes new file mode 100644 index 00000000..ef9d25a2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_language_codes @@ -0,0 +1,250 @@ +#autoload +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completer for language codes. +# +# Usage: _language_codes ISO-639-1 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +(( $+functions[_language_codes_iso_639_1] )) || +_language_codes_iso_639_1() { + local codes; codes=( + 'aa:Afar' + 'ab:Abkhazian' + 'af:Afrikaans' + 'ak:Akan' + 'sq:Albanian' + 'am:Amharic' + 'ar:Arabic' + 'an:Aragonese' + 'hy:Armenian' + 'as:Assamese' + 'av:Avaric' + 'ae:Avestan' + 'ay:Aymara' + 'az:Azerbaijani' + 'ba:Bashkir' + 'bm:Bambara' + 'eu:Basque' + 'be:Belarusian' + 'bn:Bengali' + 'bh:Bihari languages' + 'bi:Bislama' + 'bo:Tibetan' + 'bs:Bosnian' + 'br:Breton' + 'bg:Bulgarian' + 'my:Burmese' + 'ca:Catalan' + 'cs:Czech' + 'ch:Chamorro' + 'ce:Chechen' + 'zh:Chinese' + 'cu:Church Slavic' + 'cv:Chuvash' + 'kw:Cornish' + 'co:Corsican' + 'cr:Cree' + 'cy:Welsh' + 'cs:Czech' + 'da:Danish' + 'de:German' + 'dv:Divehi' + 'nl:Dutch' + 'dz:Dzongkha' + 'el:Greek, Modern (1453-)' + 'en:English' + 'eo:Esperanto' + 'et:Estonian' + 'eu:Basque' + 'ee:Ewe' + 'fo:Faroese' + 'fa:Persian' + 'fj:Fijian' + 'fi:Finnish' + 'fr:French' + 'fy:Western Frisian' + 'ff:Fulah' + 'ka:Georgian' + 'de:German' + 'gd:Gaelic' + 'ga:Irish' + 'gl:Galician' + 'gv:Manx' + 'gn:Guarani' + 'gu:Gujarati' + 'ht:Haitian' + 'ha:Hausa' + 'he:Hebrew' + 'hz:Herero' + 'hi:Hindi' + 'ho:Hiri Motu' + 'hr:Croatian' + 'hu:Hungarian' + 'hy:Armenian' + 'ig:Igbo' + 'is:Icelandic' + 'io:Ido' + 'ii:Sichuan Yi' + 'iu:Inuktitut' + 'ie:Interlingue' + 'ia:Interlingua (International Auxiliary Language Association)' + 'id:Indonesian' + 'ik:Inupiaq' + 'is:Icelandic' + 'it:Italian' + 'jv:Javanese' + 'ja:Japanese' + 'kl:Kalaallisut' + 'kn:Kannada' + 'ks:Kashmiri' + 'ka:Georgian' + 'kr:Kanuri' + 'kk:Kazakh' + 'km:Central Khmer' + 'ki:Kikuyu' + 'rw:Kinyarwanda' + 'ky:Kirghiz' + 'kv:Komi' + 'kg:Kongo' + 'ko:Korean' + 'kj:Kuanyama' + 'ku:Kurdish' + 'lo:Lao' + 'la:Latin' + 'lv:Latvian' + 'li:Limburgan' + 'ln:Lingala' + 'lt:Lithuanian' + 'lb:Luxembourgish' + 'lu:Luba-Katanga' + 'lg:Ganda' + 'mk:Macedonian' + 'mh:Marshallese' + 'ml:Malayalam' + 'mi:Maori' + 'mr:Marathi' + 'ms:Malay' + 'mk:Macedonian' + 'mg:Malagasy' + 'mt:Maltese' + 'mn:Mongolian' + 'mi:Maori' + 'ms:Malay' + 'my:Burmese' + 'na:Nauru' + 'nv:Navajo' + 'nr:Ndebele, South' + 'nd:Ndebele, North' + 'ng:Ndonga' + 'ne:Nepali' + 'nl:Dutch' + 'nn:Norwegian Nynorsk' + 'nb:Bokmål, Norwegian' + 'no:Norwegian' + 'ny:Chichewa' + 'oc:Occitan (post 1500)' + 'oj:Ojibwa' + 'or:Oriya' + 'om:Oromo' + 'os:Ossetian' + 'pa:Panjabi' + 'fa:Persian' + 'pi:Pali' + 'pl:Polish' + 'pt:Portuguese' + 'ps:Pushto' + 'qu:Quechua' + 'rm:Romansh' + 'ro:Romanian' + 'ro:Romanian' + 'rn:Rundi' + 'ru:Russian' + 'sg:Sango' + 'sa:Sanskrit' + 'si:Sinhala' + 'sk:Slovak' + 'sk:Slovak' + 'sl:Slovenian' + 'se:Northern Sami' + 'sm:Samoan' + 'sn:Shona' + 'sd:Sindhi' + 'so:Somali' + 'st:Sotho, Southern' + 'es:Spanish' + 'sq:Albanian' + 'sc:Sardinian' + 'sr:Serbian' + 'ss:Swati' + 'su:Sundanese' + 'sw:Swahili' + 'sv:Swedish' + 'ty:Tahitian' + 'ta:Tamil' + 'tt:Tatar' + 'te:Telugu' + 'tg:Tajik' + 'tl:Tagalog' + 'th:Thai' + 'bo:Tibetan' + 'ti:Tigrinya' + 'to:Tonga (Tonga Islands)' + 'tn:Tswana' + 'ts:Tsonga' + 'tk:Turkmen' + 'tr:Turkish' + 'tw:Twi' + 'ug:Uighur' + 'uk:Ukrainian' + 'ur:Urdu' + 'uz:Uzbek' + 've:Venda' + 'vi:Vietnamese' + 'vietnamien' + 'vo:Volapük' + 'cy:Welsh' + 'wa:Walloon' + 'wo:Wolof' + 'xh:Xhosa' + 'yi:Yiddish' + 'yo:Yoruba' + 'za:Zhuang' + 'zh:Chinese' + 'zu:Zulu' + ) + _describe -t language-codes 'ISO 639-1 language code' codes "$@" +} + +_language_codes() { + local command="$argv[$#]" ret=1 + + case $command in + ISO-639-1) + _language_codes_${${command//-/_}:l} "${@[1,-2]}" && ret=0 + ;; + *) + _message "unknown command: $command" + ;; + esac + + return ret +} + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_lunchy b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_lunchy new file mode 100644 index 00000000..38cbda9a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_lunchy @@ -0,0 +1,74 @@ +#compdef lunchy +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for lunchy (https://github.com/mperham/lunchy). +# +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Blake Walters (https://github.com/markupboy) +# +# ------------------------------------------------------------------------------ + +local state line cmds ret=1 + +_arguments -C '1: :->cmds' '*: :->args' + +case $state in + cmds) + local -a cmds + cmds=( + 'ls:list available agents' + 'start:start an agent' + 'stop:stop an agent' + 'restart:restart an agent' + 'status:get the status of agent[s]' + 'install:install an agents plist file' + 'edit:edit an agent' + ) + _describe -t commands 'lunchy command' cmds && ret=0 + ;; + args) + case $line[1] in + (install) + ;; + (restart|stop) + _values 'items' `lunchy status | awk '{print $3}' ` 2>/dev/null && ret=0 + ;; + *) + _values 'items' `lunchy ls` 2>/dev/null && ret=0 + ;; + esac + ;; +esac + +return ret diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mc b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mc new file mode 100644 index 00000000..721bf4ad --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mc @@ -0,0 +1,76 @@ +#compdef mc +# ------------------------------------------------------------------------------ +# Copyright (c) 2019 Sebastian Gniazdowski +# +# 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. +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Sebastian Gniazdowski (https://github.com/psprint) +# ------------------------------------------------------------------------------ + +setopt localoptions warncreateglobal typesetsilent + +local -a opts +opts=( + {-h,--help}'[show help on options]' + --help-all'[show help on all options]' + --help-terminal'[terminal options help]' + --help-color'[color options help]' + {-a,--stickchars}'[use stickchars to draw]' + '(-c --color -b --nocolor)'{-b,--nocolor}'[requests to run in black and white]' + '(-b --nocolor -c --color)'{-c,--color}'[request to run in color mode]' + {-C,--colors=}'[specifies a color configuration]:arg:' + --configure-options'[print configure options]' + {-d,--nomouse}'[disable mouse support in text version]' + {-d,--debuglevel=}'[save the debug level for SMB VFS]:debug level:(0 1 2 3 4 5 6 7 8 9 10)' + {-e,--edit=}'[edit files]:file:_files' + {-f,--datadir}'[print data directory]' + {-F,--datadir-info}'[print extended info about used data directories]' + {-g,--oldmouse}'[tries to use an old highlight mouse tracking]' + {-k,--resetsoft}'[resets soft keys on HP terminals]' + {-K,--keymap=}'[load definitions of key bindings from specified file]:file:_files' + {-l,--ftplog=}'[log ftp dialog to specified file]:file:_files' + --nokeymap'[dont load definitions of key bindings from file, use defaults]' + {-P,--printwd=}'[print last working directory to specified file]:file:_files' + {-s,--slow}'[to run on slow terminals]' + {-S,--skin=}'[show mc with specified skin]:skin:' + {-t,--termcap}'[tries to use termcap instead of terminfo]' + '(-U --subshell -u --nosubshell)'{-u,--nosubshell}'[disables subshell support]' + '(-u --nosubshell -U --subshell)'{-U,--subshell}'[enables subshell support (default)]' + {-v,--view=}'[launches the file viewer on a file]:file:_files' + {-V,--version}'[displays the current version]' + {-x,--xterm}'[forces xterm features]' + {-X,--no-x11}'[disable X11 support]' + '*:pane directory:_directories' +) + +_arguments -s $opts + +# Return value passes through + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_middleman b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_middleman new file mode 100644 index 00000000..278da39e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_middleman @@ -0,0 +1,156 @@ +#compdef middleman +# ------------------------------------------------------------------------------ +# Copyright (c) 2013 Jozef Izso, MIT License +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for middleman (http://middlemanapp.com/) +# Includes commands from middleman-blog and middleman-deploy extensions. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jozef Izso (https://github.com/jozefizso) +# +# ------------------------------------------------------------------------------ + +local ret=1 state + +local -a common_ops +common_ops=( + "--help[Display help]" +) + +typeset -A opt_args +_arguments \ + ':subcommand:->subcommand' \ + $common_ops \ + '*::options:->options' && ret=0 + +case $state in + subcommand) + local -a subcommands + subcommands=( + "article:Create a new blog article" + "build:Builds the static site for deployment" + "console:Start an interactive console in the context of your Middleman application" + "deploy:Deploy a middleman built site over rsync, ftp, sftp, or git (e.g. gh-pages on github)." + "extension:Create Middleman extension scaffold" + "init:Create new project" + "server:Start the preview server" + "upgrade:Upgrade installed bundle" + "version:Show version" + ) + + _describe -t subcommands 'middleman subcommand' subcommands && ret=0 + ;; + + options) + local -a args + args=( + $common_ops + ) + + local -a help + help=( + "--help[Display help information]" + ) + + case $words[1] in + article) + args=( + {-d,--date}"[The date to create the post with (defaults to now)]:date" + ) + ;; + + build) + args=( + "--clean[Remove orphaned files from build (Default: true)]" + "--no-clean[Disable removing orphaned files from build]" + {-g,--glob}"[Build a subset of the project]:glob" + "--verbose[Print debug messages]" + "--instrument[Print instrument messages]:instrument" + "--profile[Generate profiling report for the build]" + ) + ;; + + console) + args=( + {-e,--environment}"[The environment Middleman will run under (Default: development)]:environment" + "--verbose[Print debug messages]" + ) + ;; + + deploy) + args=( + {-b,--build-before}"[Run \`middleman build\` before the deploy step]" + ) + ;; + + extension) + args=( + "--git[Default: true]" + ) + ;; + + init) + args=( + {-T,--template}"[Use a project template: default, html5, mobile, smacss, empty. (Default: default)]:template" + "--css-dir [The path to the css files]:css_dir" + "--js-dir [The path to the javascript files]:js_dir" + "--images-dir [The path to the image files]:images_dir" + "--rack [Include a config.ru file]" + "--skip-gemfile [Don't create a Gemfile]" + "--skip-bundle [Don't run bundle install]" + "--skip-git [Skip Git ignores and keeps]" + ) + ;; + + server) + args=( + {-e,--environment}"[The environment Middleman will run under (Default: development)]:environment" + {-h,--host}"[Bind to HOST address (Default: 0.0.0.0)]:host" + {-p,--port}"[The port Middleman will listen on (Default: 4567)]:port" + "--verbose [Print debug messages]" + "--instrument [Print instrument messages]:instrument" + "--disable-watcher [Disable the file change and delete watcher process]" + "--profile [Generate profiling report for server startup]" + "--reload-paths [Additional paths to auto-reload when files change]:reload_paths" + "--force-polling [Force file watcher into polling mode]" + ) + ;; + + upgrade) + args=() + ;; + + version) + args=() + ;; + esac + + _arguments $args && ret=0 + ;; +esac + +return ret diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mina b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mina new file mode 100644 index 00000000..01b06f24 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mina @@ -0,0 +1,68 @@ +#compdef mina +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Mina (http://nadarei.co/mina/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Kazuya Takeshima (https://github.com/mitukiii) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + {-h,--help}'[Show help]' \ + {-V,--version}'[Show program version]' \ + {-v,--verbose}'[Show commands as they happen]' \ + {-s,--simulate}'[Run in simulation mode]' \ + {-t,--trace}'[Show backtraces when errors occur]' \ + -f'[Use FILE as the deploy configuration]:file:_files' \ + '*: :->cmds' && ret=0 + +case $state in + cmds) + cmds=( ${(f)"$(_call_program commands mina -T 2> /dev/null | sed -e 's/:/\\:/g; s/\[/\\[/g; s/\]/\\]/g; s/mina \([^ ]*\) .*# /\1:/g')"} ) + _describe -t commands 'mina command' cmds && ret=0 + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mix b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mix new file mode 100644 index 00000000..c92432c6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mix @@ -0,0 +1,240 @@ +#compdef mix +#autoload + +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Elixir Mix +# +# Last updated: 18.04.2017 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Han Ngo (https://github.com/tieubao) +# * Teja Sophista (https://github.com/tejanium) +# +# ------------------------------------------------------------------------------ + +local -a _1st_arguments +_1st_arguments=( + 'app.start:Starts all registered apps' + 'app.tree:Prints the application tree' + 'archive:Lists installed archives' + 'archive.build:Archives this project into a .ez file' + 'archive.install:Installs an archive locally' + 'archive.uninstall:Uninstalls archives' + 'clean:Deletes generated application files' + 'cmd:Executes the given command' + 'compile:Compiles source files' + 'deps:Lists dependencies and their status' + "deps.clean:Deletes the given dependencies' files" + 'deps.compile:Compiles dependencies' + 'deps.get:Gets all out of date dependencies' + 'deps.tree:Prints the dependency tree' + 'deps.unlock:Unlocks the given dependencies' + 'deps.update:Updates the given dependencies' + 'do:Executes the tasks separated by comma' + 'ecto:Prints Ecto help information' + 'ecto.create:Creates the repository storage' + 'ecto.drop:Drops the repository storage' + 'ecto.dump:Dumps the repository database structure' + 'ecto.gen.migration:Generates a new migration for the repo' + 'ecto.gen.repo:Generates a new repository' + 'ecto.load:Loads previously dumped database structure' + 'ecto.migrate:Runs the repository migrations' + 'ecto.migrations:Displays the repository migration status' + 'ecto.rollback:Rolls back the repository migrations' + 'escript:Lists installed escripts' + 'escript.build:Builds an escript for the project' + 'escript.install:Installs an escript locally' + 'escript.uninstall:Uninstalls escripts' + 'gettext.extract:Extracts translations from source code' + 'gettext.merge:Merge template files into translation files' + 'help:Prints help information for tasks' + 'hex:Prints Hex help information' + 'hex.build:Builds a new package version locally' + 'hex.config:Reads, updates or deletes Hex config' + 'hex.docs:Fetch or open documentation of a package' + 'hex.info:Prints Hex information' + 'hex.key:Manages Hex API key' + 'hex.outdated:Shows outdated Hex deps for the current project' + 'hex.owner:Manages Hex package ownership' + 'hex.public_keys:Manages Hex public keys' + 'hex.publish:Publishes a new package version' + 'hex.retire:Retires a package version' + 'hex.search:Searches for package names' + 'hex.user:Registers or manages Hex user' + 'loadconfig:Loads and persists the given configuration' + 'local:Lists local tasks' + 'local.hex:Installs Hex locally' + 'local.phoenix:Updates Phoenix locally' + 'local.phx:Updates the Phoenix project generator locally' + 'local.public_keys:Manages public keys' + 'local.rebar:Installs Rebar locally' + 'new:Creates a new Elixir project' + 'phoenix.gen.html:Generates controller, model and views for an HTML based resource' + 'phoenix.server:Starts applications and their servers' + 'phx.digest:Digests and compresses static files' + 'phx.digest.clean:Removes old versions of static assets.' + 'phx.gen.channel:Generates a Phoenix channel' + 'phx.gen.context:Generates a context with functions around an Ecto schema' + 'phx.gen.html:Generates controller, views, and context for an HTML resource' + 'phx.gen.json:Generates controller, views, and context for a JSON resource' + 'phx.gen.presence:Generates a Presence tracker' + 'phx.gen.schema:Generates an Ecto schema and migration file' + 'phx.gen.secret:Generates a secret' + 'phx.new:Creates a new Phoenix application' + 'phx.new.ecto:Creates a new Ecto project within an umbrella project' + 'phx.new.web:Creates a new Phoenix web project within an umbrella project' + 'phx.routes:Prints all routes' + 'phx.server:Starts applications and their servers' + 'profile.fprof:Profiles the given file or expression with fprof' + 'run:Runs the given file or expression' + "test:Runs a project's tests" + 'xref:Performs cross reference checks' + '--help:Describe available tasks' + '--version:Prints the Elixir version information' +) + +__task_list () +{ + local expl + declare -a tasks + + tasks=( + 'app.start' + 'app.tree' + 'archive' + 'archive.build' + 'archive.install' + 'archive.uninstall' + 'clean' + 'cmd' + 'compile' + 'deps' + 'deps.clean' + 'deps.compile' + 'deps.get' + 'deps.tree' + 'deps.unlock' + 'deps.update' + 'do' + 'ecto' + 'ecto.create' + 'ecto.drop' + 'ecto.dump' + 'ecto.gen.migration' + 'ecto.gen.repo' + 'ecto.load' + 'ecto.migrate' + 'ecto.migrations' + 'ecto.rollback' + 'escript' + 'escript.build' + 'escript.install' + 'escript.uninstall' + 'gettext.extract' + 'gettext.merge' + 'format' + 'help' + 'hex' + 'hex.build' + 'hex.config' + 'hex.docs' + 'hex.info' + 'hex.key' + 'hex.outdated' + 'hex.owner' + 'hex.public_keys' + 'hex.publish' + 'hex.retire' + 'hex.search' + 'hex.user' + 'loadconfig' + 'local' + 'local.hex' + 'local.public_keys' + 'local.rebar' + 'new' + 'phoenix.gen.html' + 'phoenix.server' + 'phx.digest' + 'phx.digest.clean' + 'phx.gen.channel' + 'phx.gen.context' + 'phx.gen.html' + 'phx.gen.json' + 'phx.gen.presence' + 'phx.gen.schema' + 'phx.gen.secret' + 'phx.routes' + 'phx.server' + 'profile.fprof' + 'run' + 'test' + 'xref' + ) + + _wanted tasks expl 'help' compadd $tasks +} + +local expl + +local curcontext="$curcontext" state line +typeset -A opt_args + +_arguments -C \ + ':command:->command' \ + '*::options:->options' + +case $state in + (command) + _describe -t commands "mix subcommand" _1st_arguments + return + ;; + + (options) + case $line[1] in + (help) + _arguments ':feature:__task_list' + return + ;; + (test) + _arguments ':PATH:_files' + return + ;; + (format) + _arguments ':PATH:_files' + return + ;; + esac + ;; +esac diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mssh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mssh new file mode 100644 index 00000000..553d9443 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mssh @@ -0,0 +1,83 @@ +#compdef mssh +# ------------------------------------------------------------------------------ +# Copyright (c) 2020 Hyeon Kim +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# mssh is a Python client for accessing EC2 instances via AWS EC2 Instance +# Connect. +# +# References: +# https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html#ec2-instance-connect-connecting-ec2-cli +# https://github.com/aws/aws-ec2-instance-connect-cli +# https://pypi.org/project/ec2instanceconnectcli/ +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hyeon Kim (https://hyeon.me/) +# +# ------------------------------------------------------------------------------ + +# Define function only when it doesn't exist +(( $+functions[_mssh_cache_policy] )) || _mssh_cache_policy() { + # Cache invalidates after 30 seconds + # + # Reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#index-globbing_002c-qualifiers + local -a oldp + oldp=( "$1"(ms+30) ) + (( $#oldp )) +} + +# Unless user explicitly turned off caching, enable caching just for this context +local existing_setting +zstyle -s ":completion:${curcontext}:" use-cache existing_setting +if [[ -z "${existing_setting}" ]]; then + zstyle ":completion:${curcontext}:" use-cache on +fi + +# Update cache policy only when there was no existing policy +local existing_policy +zstyle -s ":completion:${curcontext}:" cache-policy existing_policy +if [[ -z "${existing_policy}" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _mssh_cache_policy +fi + +local -a instances +if _cache_invalid mssh_instances || ! _retrieve_cache mssh_instances; then + # Cache is invalid or caching feature is disabled + IFS=$'\n\t' instances=($( + aws ec2 describe-instances \ + --query 'Reservations[].Instances[] | [?State.Name == `running`].join(`:`, [InstanceId, Tags[?Key == `Name`].Value | [0]])' \ + --output text + )) + + _store_cache mssh_instances instances +fi + +_describe 'command' instances + +# Reference: +# http://zsh.sourceforge.net/Doc/Release/Completion-System.html +# https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mussh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mussh new file mode 100644 index 00000000..ff2e96e9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mussh @@ -0,0 +1,86 @@ +#compdef mussh +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for MUltihost SSH Wrapper (http://mussh.sourceforge.net/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mario Fernandez (https://github.com/sirech) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +# TODO: +# -i: admit more than one use +# -d, -v, -t: control input +# -m: Accept number (but also empty) +# -h: Accept multiple hosts, also more than one use +# -H: Accept multiple files, also more than one use + +_arguments -C \ + '--help[display this help message]' \ + '-V[print version info and exit]' \ + '-d[Verbose debug]:level (from 0 to 2)' \ + '-v[SSH debug level]:level (from 0 to 3)' \ + '-m[Run concurrently]' \ + '(-b -B)-b[Print each hosts output in a block without mingling with other hosts output]' \ + '(-b -B)-B[Allow hosts output to mingle. (default)]' \ + '(-a -A)-a[Force loading ssh-agent]' \ + '(-a -A)-A[Do NOT load ssh-agent]' \ + '(-u -U)-u[Unique. Eliminate duplicate hosts. (default)]' \ + '(-u -U)-U[Do NOT make host list unique]' \ + '-P[Do NOT fall back to passwords on any host. This will skip hosts where keys fail]' \ + '-i[Load an identity file. May be used more than once]:identity' \ + '-o[Args to pass to ssh with -o option]:ssh-args' \ + '(-l -L)-l[Use _login_ when no other is specified with the hostname]:login' \ + '(-l -L)-L[Force use of _login_ on all hosts]:login' \ + '-s[Path to shell on remote host]:shell' \ + '-t[Timeout setting for each session]:timeout' \ + '-p[Host to use as proxy]:[user@]host' \ + '-po[Args to pass to ssh on proxy with -o option]:ssh-args' \ + '(-h -H)-h[Add a host to list of hosts]:[user@]host' \ + '(-h -H)-H[Add contents of file to list of hosts]:host file:_files' \ + '(-c -C)-c[Add a command or quoted list of commands to list of commands to be executed on each host]:command' \ + '(-c -C)-C[Add file contents to list of commands to be executed on each host]:commands file:_files' \ + '(-q)-q[No output unless necessary]' && ret=0 + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mvn b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mvn new file mode 100644 index 00000000..6f4b31ca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_mvn @@ -0,0 +1,613 @@ +#compdef mvn mvnDebug +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Maven (http://maven.apache.org). +# +# Status: See FIXME and TODO tags. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ +# Notes +# ----- +# +# * By default advanced phases are displayed only if you start typing them. To have +# them always displayed: +# +# zstyle ':completion:*:mvn:*' show-all-phases true +# +# * By default full form plugins (groupId:artifactId[:version]) are only shown if you +# start typing them. To have them always displayed: +# +# zstyle ':completion:*:mvn:*' show-full-form-plugins true +# +# * By default only the plugins for which the completion has already been +# called ("mvn plugin:") are shown. To define your own list of plugins: +# +# maven_plugins=(jboss tomcat gwt android) +# zstyle ':completion:*:mvn:*' plugins $maven_plugins +# +# * To have a better presentation of completions: +# +# zstyle ':completion:*:*:mvn:*:matches' group 'yes' +# zstyle ':completion:*:*:mvn:*:options' description 'yes' +# zstyle ':completion:*:*:mvn:*:options' auto-description '%d' +# zstyle ':completion:*:*:mvn:*:descriptions' format $'\e[1m -- %d --\e[22m' +# zstyle ':completion:*:*:mvn:*:messages' format $'\e[1m -- %d --\e[22m' +# zstyle ':completion:*:*:mvn:*:warnings' format $'\e[1m -- No matches found --\e[22m' +# +# ------------------------------------------------------------------------------ + + +_mvn() { + typeset -A opt_args + local context state line + + local curcontext="$curcontext" maven_version excl_opts + + excl_opts=(-h --help -v --version -ep --encrypt-password -emp --encrypt-master-password) + + _pick_variant -r maven_version maven3='Maven 3' maven2='Maven 2' unknown --version + if [[ $maven_version == 'maven3' ]]; then + opts=( + "($excl_opts -T --threads)"{-T,--threads}'[thread count, for instance 2.0C where C is core multiplied]:thread count:_mvn_thread_counts' + "($excl_opts -t --toolchains)"{-t,--toolchains}'[alternate path for the user toolchains file]:toolchains file:_mvn_toolchains_files' + "($excl_opts -l --log-file)"{-l,--log-file}'[log file to where all build output will go]:log file:_mvn_log_files' + ) + elif [[ $maven_version == 'maven2' ]]; then + opts=( + "($excl_opts -cpu --check-plugin-updates -up --update-plugins -npu --no-plugin-updates -o --offline)"{-cpu,--check-plugin-updates,-up,--update-plugins}'[force upToDate check for any relevant registered plugins]' + "($excl_opts -npr --no-plugin-registry)"{-npr,--no-plugin-registry}'[don'\''t use plugin-registry.xml for plugin versions]' + "($excl_opts -npu --no-plugin-updates -cpu --check-plugin-updates -up --update-plugins)"{-npu,--no-plugin-updates}'[suppress upToDate check for any relevant registered plugins]' + "($excl_opts -r --reactor)"{-r,--reactor}'[dynamically build reactor from subdirectories]:reactor:_mvn_reactors' + ) + fi + + [[ -n ${(M)words:#"-pl"} || -n ${(M)words:#"--projects"} ]] && opts+=( + "($excl_opts -am --also-make)"{-am,--also-make}'[if project list is specified, also build projects required by the list]' + "($excl_opts -amd --also-make-dependents)"{-amd,--also-make-dependents}'[if project list is specified, also build projects that depend on projects on the list]' + ) + + _arguments -C \ + "(- : *)"{-h,--help}'[display help information]' \ + "(- : *)"{-v,--version}'[display version information]' \ + "(- : *)"{-emp,--encrypt-master-password}'[encrypt master security password]:master password:_mvn_passwords' \ + "(- : *)"{-ep,--encrypt-password}'[encrypt server password]:password:_mvn_passwords' \ + "($excl_opts -B --batch-mode)"{-B,--batch-mode}'[run in non-interactive (batch) mode]' \ + "($excl_opts -V --show-version)"{-V,--show-version}'[display version information without stopping build]' \ + "($excl_opts -q --quiet -X --debug)"{-q,--quiet}'[quiet output, only show errors]' \ + "($excl_opts -X --debug -q --quiet)"{-X,--debug}'[produce execution debug output]' \ + "($excl_opts -N --non-recursive)"{-N,--non-recursive}'[do not recurse into sub-projects]' \ + "($excl_opts -C --strict-checksums -c --lax-checksums)"{-C,--strict-checksums}'[fail the build if checksums don'\''t match]' \ + "($excl_opts -c --lax-checksums -C --strict-checksums)"{-c,--lax-checksums}'[warn if checksums don'\''t match]' \ + "($excl_opts -e --errors)"{-e,--errors}'[produce execution error messages]' \ + "($excl_opts -f --file)"{-f,--file}'[force the use of an alternate POM file]:POM file:_mvn_pom_files' \ + "($excl_opts -s --settings)"{-s,--settings}'[alternate path for the user settings file]:settings file:_mvn_settings_files' \ + "($excl_opts -gs --global-settings)"{-gs,--global-settings}'[alternate path for the global settings file]:global settings file:_mvn_settings_files' \ + "($excl_opts -fae --fail-at-end -ff --fail-fast -fn --fail-never)"{-fae,--fail-at-end}'[only fail the build afterwards, allow all non-impacted builds to continue]' \ + "($excl_opts -ff --fail-fast -fae --fail-at-end -fn --fail-never)"{-ff,--fail-fast}'[stop at first failure in reactorized builds]' \ + "($excl_opts -fn --fail-never -fae --fail-at-end -ff --fail-fast)"{-fn,--fail-never}'[never fail the build, regardless of project result]' \ + "($excl_opts)*"{-P,--activate-profiles}'[comma-delimited list of profiles to activate]:profile:_mvn_profiles -s ,' \ + "($excl_opts -pl --projects)"{-pl,--projects}'[build specified reactor projects instead of all projects]:project list:_mvn_projects -s ,' \ + "($excl_opts -rf --resume-from)"{-rf,--resume-from}'[resume reactor from specified project]:project:_mvn_projects' \ + "($excl_opts -o --offline -U --update-snapshots -cpu --check-plugin-updates -up --update-plugins)"{-o,--offline}'[work offline]' \ + "($excl_opts -U --update-snapshots -nsu --no-snapshot-updates -o --offline)"{-U,--update-snapshots}'[force a check for updated releases and snapshots on remote repositories]' \ + "($excl_opts -nsu --no-snapshot-updates -U --update-snapshots -o --offline)"{-nsu,--no-snapshot-updates}'[Suppress SNAPSHOT updates]' \ + "*"{-D-,--define}'[define a system property]:property:_mvn_properties' \ + "${opts[@]}" \ + "($excl_opts)*: :_mvn_args" +} + +(( $+functions[_mvn_args] )) || +_mvn_args() { + _alternative \ + 'phases:phase:_mvn_phases' \ + 'plugin-colon-goals:plugin colon goal:_mvn_plugin_colon_goals' +} + +(( $+functions[_mvn_phases] )) || +_mvn_phases() { + local phases + phases=( + 'clean:remove all files generated by the previous build' + 'compile:compile the source code of the project' + 'test:run tests using a suitable unit testing framework' + 'package:take the compiled code and package it in its distributable format, such as a JAR' + 'integration-test:process and deploy the package if necessary into an environment where integration tests can be run' + 'verify:run any checks to verify the package is valid and meets quality criteria' + 'install:install the package into the local repository, for use as a dependency in other projects locally' + 'deploy:done in an integration or release environment, copies the final package to the remote repository' + 'site:generates the projects site documentation' + 'site-deploy:deploys the generated site documentation to the specified web server' + ) + if [[ $#PREFIX -gt 0 ]] || zstyle -t ":completion:${curcontext}:" show-all-phases; then + phases+=( + 'pre-clean:executes processes needed prior to the actual project cleaning' + 'post-clean:executes processes needed to finalize the project cleaning' + 'validate:validate the project is correct and all necessary information is available' + 'initialize:initialize build state, e.g. set properties or create directories' + 'generate-sources:generate any source code for inclusion in compilation' + 'process-sources:process the source code, for example to filter any values' + 'generate-resources:generate resources for inclusion in the package' + 'process-resources:copy and process the resources into the destination directory, ready for packaging' + 'process-classes:post-process the generated files from compilation' + 'generate-test-sources:generate any test source code for inclusion in compilation' + 'process-test-sources:process the test source code, for example to filter any values' + 'generate-test-resources:create resources for testing' + 'process-test-resources:copy and process the resources into the test destination directory' + 'test-compile:compile the test source code into the test destination directory' + 'process-test-classes:post-process the generated files from test compilation' + 'prepare-package:perform any operations necessary to prepare a package before the actual packaging' + 'pre-integration-test:perform actions required before integration tests are executed' + 'post-integration-test:perform actions required after integration tests have been executed' + 'pre-site:executes processes needed prior to the actual project site generation.' + 'post-site:executes processes needed to finalize the site generation, and to prepare for site deployment' + ) + fi + _describe -t 'phases' "phase" phases +} + +(( $+functions[_mvn_plugins] )) || +_mvn_plugins() { + local ret=1 + if [[ $words[CURRENT] == *.* ]] || zstyle -t ":completion:${curcontext}:" show-full-form-plugins; then + _wanted full-form-plugins expl 'full form plugin' _mvn_full_form_plugins && ret=0 + else + _wanted plugin-prefixes expl 'plugin prefix' _mvn_plugin_prefixes && ret=0 + fi + return ret +} + +(( $+functions[_mvn_plugin_colon_goals] )) || +_mvn_plugin_colon_goals() { + local ret=1 + if [[ $words[CURRENT] == *.* ]] || zstyle -t ":completion:${curcontext}:" show-full-form-plugins; then + _wanted full-form-plugin-colon-goals expl 'full form plugin colon goal' _mvn_full_form_plugin_colon_goals && ret=0 + else + _wanted plugin-prefix-colon-goals expl 'plugin prefix colon goal' _mvn_plugin_prefix_colon_goals && ret=0 + fi + return ret +} + +(( $+functions[_mvn_plugin_prefix_colon_goals] )) || +_mvn_plugin_prefix_colon_goals() { + local ret=1 + if compset -P '*:'; then + local plugin="${IPREFIX%:}" + _wanted goals expl "${plugin} plugin goal" _mvn_plugin_goals $plugin && ret=0 + else + _wanted plugin-prefixes expl 'plugin prefix' _mvn_plugin_prefixes -qS: && ret=0 + fi + return ret +} + +(( $+functions[_mvn_plugin_prefixes] )) || +_mvn_plugin_prefixes() { + local plugins + zstyle -a ":completion:${curcontext}:" plugins plugins + [[ $#plugins -eq 0 ]] && plugins=($(__mvn_get_plugin_prefix $(__mvn_get_cache_dir)/mvn/plugins/*(:t))) + _describe -t plugin-prefixes 'plugin prefix' plugins $@ +} + +(( $+functions[_mvn_full_form_plugin_colon_goals] )) || +_mvn_full_form_plugin_colon_goals() { + local ret=1 + # FIXME Duplicates _mvn_full_form_plugins + if compset -P 1 '*:'; then + local groupId="${${IPREFIX%:}##*:}" + if compset -P 1 '*:'; then + local artifactId="${${IPREFIX%:}##*:}" + if compset -P 1 '*:'; then + local version="${${IPREFIX%:}##*:}" + _wanted goals expl "${artifactId}:${version} goal" _mvn_plugin_goals "${groupId}:${artifactId}:${version}" && ret=0 + else + _alternative \ + "versions:${artifactId} version:_mvn_artifact_versions -qS: ${groupId}:${artifactId}" \ + "goals:${artifactId} goal:_mvn_plugin_goals ${groupId}:${artifactId}" \ + && ret=0 + fi + else + _wanted artifactIds expl "${groupId} artifactId" _mvn_groupId_artifactIds -qS: $groupId && ret=0 + fi + else + _wanted groupIds expl "groupId" _mvn_groupIds -qS: && ret=0 + fi + return ret +} + +(( $+functions[_mvn_full_form_plugins] )) || +_mvn_full_form_plugins() { + local ret=1 chunk="${PREFIX%%:*}" + if compset -P 1 '*:'; then + local groupId="$chunk" + chunk="${PREFIX%%:*}" + if compset -P 1 '*:'; then + _wanted versions expl "${current} version" _mvn_artifact_versions $@ "${groupId}:${chunk}" && ret=0 + else + _wanted artifactIds expl "${groupId} artifactId" _mvn_groupId_artifactIds -qS: "${groupId}" && ret=0 + fi + else + _wanted groupIds expl "groupId" _mvn_groupIds -qS: && ret=0 + fi + return ret +} + +(( $+functions[_mvn_groupIds] )) || +_mvn_groupIds() { + local repository_location=$(__mvn_get_repository_location) update_policy ret=1 + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_groupIds_caching_policy + + if [[ -d $repository_location ]]; then + unset _groupIds + if ( [[ ${+_groupIds} -eq 0 ]] || _cache_invalid "mvn/repositories/${repository_location}/groupIds" ) && ! _retrieve_cache "mvn/repositories/${repository_location}/groupIds"; then + _groupIds=($repository_location/**/) + _groupIds=(${${${(u)_groupIds:h:h}#"$repository_location/"}//\//.}) + [[ $#_groupIds -gt 0 ]] && _store_cache "mvn/repositories/${repository_location}/groupIds" _groupIds + fi + + [[ $#_groupIds -gt 0 ]] && _multi_parts $@ . _groupIds && ret=0 + fi + + return ret +} + +(( $+functions[_mvn_groupId_artifactIds] )) || +_mvn_groupId_artifactIds() { + local groupId_repository_location="${$(__mvn_get_repository_location)}/${${@[-1]}//\.//}" ret=1 + + if [[ -d $groupId_repository_location ]]; then + local artifactIds; artifactIds=($groupId_repository_location/*/*/*.pom(:h:h:t)) + _describe -t artifactIds "artifactId" artifactIds $@[0,-2] && ret=0 + fi + + return ret +} + +(( $+functions[_mvn_artifact_versions] )) || +_mvn_artifact_versions() { + local artifact_repository_location="${$(__mvn_get_repository_location)}/${${@[-1]}//[\.:]//}" ret=1 + + if [[ -d $artifact_repository_location ]]; then + local versions; versions=($artifact_repository_location/*/*.pom(:h:t)) + _describe -t versions "version" versions $@[0,-2] + fi + + return ret +} + +(( $+functions[_mvn_plugin_goals] )) || +_mvn_plugin_goals() { + local ret=1 plugin="$@[-1]" update_policy + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_goals_caching_policy + + unset _goals + if ( [[ ${+_goals} -eq 0 ]] || _cache_invalid "mvn/plugins/${plugin}" ) && ! _retrieve_cache "mvn/plugins/${plugin}"; then + setopt localoptions extendedglob + _goals=(${(s:,,,:)${${${(f)${${${(f)${${${${(F)${(S)${(f)"$(_call_program goals $words[1] -N org.apache.maven.plugins:maven-help-plugin:2.1.1:describe -Dplugin=$plugin)"}//#$(__mvn_get_plugin_prefix $plugin):/,,,}}:#*BUILD FAILURE*}#*This plugin has*goals#:}%For more information, run \'mvn help:describe*}}//:/\\:}}}// ##/ }// Description\\: /:}}) + [[ $#_goals -gt 0 ]] && _store_cache "mvn/plugins/${plugin}" _goals + fi + + [[ $#_goals -gt 0 ]] && _describe -t "goals" "${plugin} goal" _goals $@[0,-2] && ret=0 + + return ret +} + +(( $+functions[_mvn_profiles] )) || +_mvn_profiles() { + + # FIXME Use "mvn help:all-profiles" output instead of parsing settings and pom files... + # Blocked on http://jira.codehaus.org/browse/MPH-82 and http://jira.codehaus.org/browse/MPH-83 + local profs update_policy settings_file=$(__mvn_get_settings_file) parent_pom_file=$(__mvn_get_parent_pom_file) cache_name profiles_section ret=1 + + # TODO Should be split into _mvn_profiles/mvn_profiles_lists + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_profiles_caching_policy + + profs=() + + # Resolve profiles from settings.xml + if [[ -f $settings_file ]]; then + unset _profiles + cache_name="mvn/profiles${settings_file:A}" # FIXME Don't use A modifier, it is only available on Zsh >= 4.3.10 + if ( [[ ${+_profiles} -eq 0 ]] || _cache_invalid "$cache_name" ) && ! _retrieve_cache "$cache_name"; then + _profiles=() + profiles_section="${(M)${(f)$(<$settings_file)}:#**}" + if [[ -n "$profiles_section" ]]; then + for profile in ${(s:,,,:)${${${(S)${(S)${(S)${(S)${${profiles_section#*}%*}//*<\/repositories>}//*<\/pluginRepositories>}//*<\/build>}//<\/id>*/,,,}##*}%%*}}; do + [[ -z ${(M)profiles:#"$profile"*} ]] && _profiles+=("$profile"'['"in settings file"']') + done + fi + [[ $#_profiles -gt 0 ]] && _store_cache "$cache_name" _profiles + fi + profs+=($_profiles) + fi + + # Resolve project profiles + if [[ -f $parent_pom_file ]]; then + unset _profiles + cache_name="mvn/profiles${parent_pom_file:A}" # FIXME Don't use A modifier, it is only available on Zsh >= 4.3.10 + if ( [[ ${+_profiles} -eq 0 ]] || _cache_invalid "$cache_name" ) && ! _retrieve_cache "$cache_name"; then + _profiles=() + setopt localoptions extendedglob + for file in ${parent_pom_file:h}/**/pom.xml~*target\/*; do # FIXME project.build.directory is not always target/ + profiles_section="${(M)${(f)$(<$file)}:#**}" + if [[ -n "$profiles_section" ]]; then + for profile in ${(s:,,,:)${${${(S)${(S)${(S)${(S)${${profiles_section#*}%*}//*<\/repositories>}//*<\/pluginRepositories>}//*<\/build>}//<\/id>*/,,,}##*}%%*}}; do + [[ -z ${(M)profiles:#"$profile"*} ]] && _profiles+=("$profile"'['"in ${file#${parent_pom_file:h}\/}"']') + done + fi + done + [[ $#_profiles -gt 0 ]] && _store_cache "$cache_name" _profiles + fi + profs+=($_profiles) + fi + + compset -P '-'; compset -P '+'; compset -P '!' # FIXME Only works for the first profile + + [[ $#profs -gt 0 ]] && _values $@ 'profile' "${profs[@]}" && ret=0 + + return ret +} + +(( $+functions[_mvn_projects] )) || +_mvn_projects() { + # TODO Projects can also be given in the form [groupId:]artifactId. + # TODO Should be split into _mvn_projects/mvn_projects_lists + local pom_file=$(__mvn_get_parent_pom_file) ret=1 + + if [[ -f $pom_file ]]; then + setopt localoptions extendedglob + local projects; projects=(${pom_file:h}/*/**/pom.xml~*target\/*) # FIXME project.build.directory is not always target/ + projects=(${${projects#.\/}:h}) + [[ $#projects -gt 0 ]] && _values "$@" 'project' "${projects[@]}" && ret=0 + fi + + return ret +} + +(( $+functions[_mvn_properties] )) || +_mvn_properties() { + local ret=1 + if compset -P '*='; then + _wanted property-values expl 'property value' _mvn_property_values ${${IPREFIX%=}#-D} && ret=0 + else + _wanted property-names expl 'property name' _mvn_property_names -qS= && ret=0 + fi + return ret +} + +(( $+functions[_mvn_property_names] )) || +_mvn_property_names() { + # FIXME "-qS=" should be inherited from _mvn_properties + local alternatives; alternatives=( + "common-property-names:common property name:_mvn_common_property_names -qS=" + ) + for plugin_colon_goal in ${(M)words:#[^-]*:*}; do + alternatives+=("plugin-property-names:plugin property name:_mvn_plugin_goal_property_names -qS= ${plugin_colon_goal}") + done + _alternative "${alternatives[@]}" +} + +(( $+functions[_mvn_common_property_names] )) || +_mvn_common_property_names() { + local properties; properties=( + 'skipTests:skip tests execution' + 'maven.test.skip:skip tests compilation and execution' + 'gpg.passphrase:gpg passphrase' + 'tycho.mode:enable maven mode for Tycho projects to disable p2 resolution' + ) + _describe -t 'common-property-names' 'common property name' properties $@ +} + +(( $+functions[_mvn_plugin_goal_property_names] )) || +_mvn_plugin_goal_property_names() { + local plugin_colon_goal="$@[-1]" update_policy ret=1 + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + [[ -z "$update_policy" ]] && zstyle ":completion:${curcontext}:" cache-policy _mvn_properties_caching_policy + + unset _properties + if ( [[ ${+_properties} -eq 0 ]] || _cache_invalid "mvn/plugins/${plugin_colon_goal}" ) && ! _retrieve_cache "mvn/plugins/${plugin_colon_goal}"; then + # FIXME Does not work for: + # android:apk (new line before expression) + # ear:ear (unknown cause) + _properties=(${(M)${(ps:,,,:)${${${${(pj: :)${${${(f)${"$(_call_program properties $words[1] -N org.apache.maven.plugins:maven-help-plugin:2.1.1:describe -Dplugin=${plugin_colon_goal%:*} -Dgoal=${plugin_colon_goal##*:} -Ddetail)"#*Available parameters:}%%\[INFO\]*}//# [a-z]*/,,,}##*Expression: \$\{}}//\}[[:space:]]##/:}//[[:space:]]##/ }//[[:space:]]#,,,[[:space:]]#/,,,}}:#[a-zA-Z]##:*}) + [[ $#_properties -gt 0 ]] && _store_cache "mvn/plugins/${plugin_colon_goal}" _properties + fi + + [[ $#_properties -gt 0 ]] && _describe -t "${plugin_colon_goal//:/-}-property-names" "${plugin_colon_goal} property name" _properties $@[0,-2] && ret=0 + + return ret +} + +(( $+functions[_mvn_property_values] )) || +_mvn_property_values() { + local ret=1 + setopt localoptions extendedglob + case $@[-1] in + ((#i)*pomFile*) _wanted pom-files expl 'POM file' _mvn_pom_files && ret=0;; + ((#i)*file*) _wanted files expl 'file' _files && ret=0;; + ((#i)*groupId*) _wanted groupIds expl 'groupId' _mvn_groupIds && ret=0;; + ((#i)*artifactId*) _wanted artifactIds expl 'artifactId' _mvn_groupId_artifactIds ${${(M)${(ps.:.)opt_args[(K)-D]}:#groupId=*}#groupId=} && ret=0;; + ((#i)*version*) _wanted versions expl 'version' _mvn_artifact_versions ${${(M)${(ps.:.)opt_args[(K)-D]}:#groupId=*}#groupId=}:${${(M)${(ps.:.)opt_args[(K)-D]}:#artifactId=*}#artifactId=} && ret=0;; + ((#i)*repositoryId*) _message -e repositoryIds 'repositoryId' && ret=0;; # TODO Not implemented + ((#i)*classifier*) _message -e classifiers 'classifier' && ret=0;; + ((#i)*scope*) _wanted scopes expl 'scope' _mvn_scopes && ret=0;; + ((#i)*url*) _wanted urls expl 'url' _urls && ret=0;; # TODO Use _alternative and add repository urls from settings + projects + ((#i)*(password|passphrase)*) _wanted passwords expl password _mvn_passwords && ret=0;; + ((#i)*(createChecksum|generatePom|maven.test.skip)*) _wanted booleans expl 'boolean' _mvn_booleans && ret=0;; + ((#i)*user*) _wanted users expl 'user' _users && ret=0;; # TODO Use _alternative and add repository usernames from settings + projects + ((#i)*plugin*) _wanted plugin expl 'plugin' _mvn_plugins && ret=0;; + ((#i)*tycho.mode*) _wanted tychomodes expl 'tychomode' _mvn_tycho_modes && ret=0;; + (*) _default && ret=0;; + esac + return ret +} + +(( $+functions[_mvn_scopes] )) || +_mvn_scopes() { + local scopes; scopes=( + 'compile:default scope, used if none is specified. Compile dependencies are available in all classpaths of a project. Furthermore, those dependencies are propagated to dependent projects.' + 'provided:much like compile, but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.' + 'runtime:indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath.' + 'test:indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases.' + 'system:similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository.' + 'import:only used on a dependency of type pom in the section. It indicates that the specified POM should be replaced with the dependencies in that POM'\''s section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.' + ) + _describe -t scopes 'scope' scopes +} + +(( $+functions[_mvn_thread_counts] )) || +_mvn_thread_counts() { + local thread_counts; thread_counts=( + '1:build with 1 thread' '1C:build with 1 thread per CPU core' + '2:build with 2 threads' '2C:build with 2 threads per CPU core' + '3:build with 3 threads' '3C:build with 3 threads per CPU core' + '4:build with 4 threads' '4C:build with 4 threads per CPU core' + '5:build with 5 threads' '5C:build with 5 threads per CPU core' + '6:build with 6 threads' '6C:build with 6 threads per CPU core' + '7:build with 7 threads' '7C:build with 7 threads per CPU core' + '8:build with 8 threads' '8C:build with 8 threads per CPU core' + ) + _describe -t thread-counts 'thread count' thread_counts +} + +(( $+functions[_mvn_reactors] )) || +_mvn_reactors() { + _message -e reactors 'reactor' # FIXME No idea what kind of value the "--reactor" option is supposed to take +} + +(( $+functions[_mvn_passwords] )) || +_mvn_passwords() { + _message -e passwords 'password' +} + +(( $+functions[_mvn_pom_files] )) || +_mvn_pom_files() { + _files -g '*pom*\.xml*' +} + +(( $+functions[_mvn_toolchains_files] )) || +_mvn_toolchains_files() { + _files -g '*toolchains*\.xml*' +} + +(( $+functions[_mvn_settings_files] )) || +_mvn_settings_files() { + _files -g '*settings*\.xml*' +} + +(( $+functions[_mvn_log_files] )) || +_mvn_log_files() { + _files +} + +(( $+functions[_mvn_booleans] )) || +_mvn_booleans() { + local booleans; booleans=( + 'true:"true" boolean value' + 'false:"false" boolean value' + ) + _describe -t booleans 'boolean' booleans +} + + +(( $+functions[_mvn_tycho_modes] )) || +_mvn_tycho_modes() { + local tychomodes; tychomodes=( + 'maven:maven mode, Tycho will not do any p2 dependency resolution' + ) + _describe -t tychomodes 'boolean' tychomodes +} + +# ------------------------------------------------------------------------------ +# Helper functions +# ------------------------------------------------------------------------------ + +__mvn_get_pom_file() { + print ${~opt_args[-f]:-${opt_args[--file]:-pom.xml}} +} + +__mvn_get_parent_pom_file() { + local pom_file=$(__mvn_get_pom_file) + while [[ -f ${pom_file:a:h:h}/pom.xml ]]; do + pom_file=${pom_file:a:h:h}/pom.xml; + done + print $pom_file +} + +__mvn_get_settings_file() { + print ${~opt_args[-s]:-${opt_args[--settings]:-$HOME/.m2/settings.xml}} +} + +__mvn_get_repository_location() { + print ${${${${(M)"$(<$(__mvn_get_settings_file))":#**}:-$HOME/.m2/repository}##*}%%<\/localRepository>*} +} + +__mvn_get_plugin_prefix() { + print ${${${${@#*.*:}%%:*}%-plugin}/-#maven-#} +} + +__mvn_get_cache_dir() { + local cache_dir + zstyle -s ":completion:${curcontext}:" cache-path cache_dir + print ${cache_dir:-${ZDOTDIR:-$HOME}/.zcompcache} +} + + +# ------------------------------------------------------------------------------ +# Caching policies +# ------------------------------------------------------------------------------ + +(( $+functions[_mvn_goals_caching_policy] )) || +_mvn_goals_caching_policy() { + # Rebuild if cache is older than one month. + local -a oldp + oldp=( "$1"(NmM+1) ) + (( $#oldp )) +} + +(( $+functions[_mvn_properties_caching_policy] )) || +_mvn_properties_caching_policy() { + _mvn_goals_caching_policy +} + +(( $+functions[_mvn_groupIds_caching_policy] )) || +_mvn_groupIds_caching_policy() { + _mvn_goals_caching_policy +} + +(( $+functions[_mvn_profiles_caching_policy] )) || +_mvn_profiles_caching_policy() { + # Rebuild if cached file more recent than cache. + local cached_file="${1#$(__mvn_get_cache_dir)}" + [[ -f $cached_file && $cached_file -nt "$1" ]] && return 0 + + # Rebuild if cache is older than one week. + local -a oldp + oldp=( "$1"(Nmw+1) ) + (( $#oldp )) && return 0 + + return 1 +} + +_mvn "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nano b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nano new file mode 100644 index 00000000..6a90ddc2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nano @@ -0,0 +1,54 @@ +#compdef nano +local curcontext="$curcontext" state line +typeset -A opt_args +_arguments -s -C \ + '(-)'{-A,--smarthome}'[Enable smart home key]'\ + {-B,--backup}'[Save backups of existing files]'\ + {-C+,--backupdir=}'[Directory for saving unique backup files]:dir:_dirs'\ + {-D,--boldtext}'[Use bold instead of reverse video text]'\ + {-E,--tabstospaces}'[Convert typed tabs to spaces]'\ + {-F,--multibuffer}'[Read a file into a new buffer by default]'\ + {-G,--locking}'[Use vim-style lock files]'\ + {-H,--historylog}'[Log & read search replace string history]'\ + {-I,--ignorercfiles}'[Do not look at nanorc files]'\ + {-J+,--guidestripe=}'[Show a guiding bar at this column]:number'\ + {-K,--rawsequences}'[Fix numeric keypad key confusion problem]'\ + {-L,--nonewlines}'[Do not add an automatic newline]'\ + {-M,--trimblanks}'[Trim tail spaces when hard-wrapping]'\ + {-N,--noconvert}'[Do not convert files from DOS/Mac format]'\ + {-P,--positionlog}'[Log & read location of cursor position]'\ + {-Q+,--quotestr=}'[Regular expression to match quoting]:str'\ + {-R,--restricted}'[Restricted mode]'\ + {-T+,--tabsize=}'[Set width of a tab to cols columns]:init'\ + {-U,--quickblank}'[Do quick statusbar blanking]'\ + '(- *)'{-V,--version}'[Print version information and exit]'\ + {-W,--wordbounds}'[Detect word boundaries more accurately]'\ + {-X+,--wordchars=}'[Which other characters are word parts]:str'\ + {-Y+,--syntax=}'[Syntax definition to use for coloring]'\ + {-Z,--zap}'[Let Bsp and Del erase a marked region]'\ + {-a,--atblanks}'[When soft-wrapping, do it at whitespace]'\ + {-b,--breaklonglines}'[Automatically hard-wrap overlong lines]'\ + {-c,--constantshow}'[Constantly show cursor position]'\ + {-d,--rebinddelete}'[Fix Backspace/Delete confusion problem]'\ + {-e,--emptyline}'[Keep the line below the title bar empty]'\ + {-f,--rcfile=}'[Use only this file for configuring nano]:file:_files'\ + {-g,--showcursor}'[Show cursor in file browser & help text]'\ + '(- *)'{-h,--help}'[Show help text and exit]'\ + {-i,--autoindent}'[Automatically indent new lines]'\ + {-j,--jumpyscrolling}'[Scroll per half-screen, not per line]'\ + {-k,--cutfromcursor}'[Cut from cursor to end of line]'\ + {-l,--linenumbers}'[Show line numbers in front of the text]'\ + {-m,--mouse}'[Enable the use of the mouse]'\ + {-n,--noread}'[Do not read the file (only write it)]'\ + {-o+,--operatingdir=}'[Set operating directory]:dir:_dirs'\ + {-p,--preserve}'[Preserve XON (^Q) and XOFF (^S) keys]'\ + {-r+,--fill=}'[Set width for hard-wrap and justify]:init'\ + {-s+,--speller=}'[Enable alternate speller]:prog'\ + {-t,--tempfile}'[Auto save on exit, do not prompt]'\ + {-u,--unix}'[Save a file by default in Unix format]'\ + {-w,--nowrap}'[Do not hard-wrap long lines default]'\ + {-x,--nohelp}'[Do not show the two help lines]'\ + {-y,--afterends}'[Make Ctrl+Right stop at word ends]'\ + {-z,--suspend}'[Enable suspension]'\ + {-$,--softwrap}'[Enable soft line wrapping]'\ + '(-t -q)*:file:_files' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nanoc b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nanoc new file mode 100644 index 00000000..7a0fb1f5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nanoc @@ -0,0 +1,162 @@ +#compdef nanoc +# ------------------------------------------------------------------------------ +# Copyright (c) 2020 OKURA Masafumi, MIT License +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for nanoc (https://nanoc.ws/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * OKURA Masafumi (https://okuramasafumi.com) +# +# This works is heavily inspired by the middleman completion by +# Jozef Izso (https://github.com/jozefizso) +# +# ------------------------------------------------------------------------------ + +local ret=1 state + +local -a common_ops +common_ops=( + {-C,--no-color}"[disable color]" + {-V,--verbose}"[make output more detailed]" + {-d,--debug}"[enable debugging]" + {-e,--env=}"[set environment]" + {-h,--help}"[show the help message and quit]" + {-l,--color}"[enable color]" + {-v,--version}"[show version information and quit]" + {-w,--warn}"[enable warnings]" +) + +typeset -A opt_args +_arguments \ + ':subcommand:->subcommand' \ + $common_ops \ + '*::options:->options' && ret=0 + +case $state in + subcommand) + local -a subcommands + subcommands=( + "check:run issue checks" + "compile:compile items of this site" + "create-site:create a site" + "deploy:deploy the compiled site" + "help:show help" + "prune:remove files not managed by Nanoc from the output directory" + "shell:open a shell on the Nanoc environment" + "show-data:show data in this site" + "show-plugins:show all available plugins" + "show-rules:describe the rules for each item" + "view:start the web server that serves static files" + ) + + _describe -t subcommands 'nanoc subcommand' subcommands && ret=0 + ;; + + options) + local -a args + args=( + $common_ops + ) + + local -a help + help=( + "--help[Display help information]" + ) + + case $words[1] in + check) + args=( + {-L,--list}"[list all checks]" + {-a,--all}"[run all checks]" + ) + ;; + + compile) + args=( + "--diff[generate diff]" + ) + ;; + + create-site) + args=( + "--force[force creation of new site]" + ) + ;; + + deploy) + args=( + {-C,--no-check}"[do not run the issue checks marked for deployment]" + {-D,--list-deployers}"[list available deployers]" + {-L,--list}"[list available locations to deploy to]" + {-n,--dry-run}"[show what would be deployed]" + {-t,--target=}"[specify the location to deploy to (default:\`default\`)]" + ) + ;; + + prune) + args=( + {-n,--dry-run}"[print files to be deleted instead of actually deleting them]" + {-y,--yes}"[confirm deletion]" + ) + ;; + + shell) + args=( + {-p,--preprocess}"[run preprocessor]" + ) + ;; + + show-data) + args=( + ) + ;; + + show-plugins) + args=( + ) + ;; + + show-rules) + args=( + ) + ;; + + view) + args=( + {-H,--handler=}"[specify the handler to use(webrick/mongrel/...)]" + {-L,--live-reload}"[reload on changes]" + {-o,--host=}"[specify the host to listen on(default: 127.0.0.1)]" + {-p,--port=}"[specify the port to listen on(default: 3000)]" + ) + ;; + esac + + _arguments $args && ret=0 + ;; +esac + +return ret diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nftables b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nftables new file mode 100644 index 00000000..b0f6b3fd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nftables @@ -0,0 +1,500 @@ +#compdef nft +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for nft 0.9.0 (https://www.netfilter.org/projects/nftables/index.html). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Markus Richter ( https://github.com/mqus , ) +# +# ------------------------------------------------------------------------------ +_nft(){ +local -a rules states prev args families options descriptors +local state="start" line nextstate cmd_obj cmd_subcmd cmd_fam cmd_tab cmd_chain #curcontext="$curcontext" + +options=( + '(-)'{-h,--help}'[show help]' \ + '(-)'{-v,--version}'[print version information]' \ + "(-i --interactive)"{-i,--interactive}'[read input from interactive CLI]: :->end' \ + "(-f --file)"{-f,--file}'[read input from ]:nftables rule file:_files' \ + '(-c --check -n --numeric -N)'{-c,--check}"[check command's validity without actually applying the changes]" \ + '(-j --json)'{-j,--json}'[format output in json]' \ + '(-c --check -N)*'{-n,--numeric}'[can be specified up to 3 times, Shows 1:network addresses(default behaviour), 2:internet services (port numbers) and 3:protocols, user IDs, and group IDs numerically]' \ + '(-s --stateless)'{-s,--stateless}'[omit stateful information of ruleset]' \ + '(-N -n --numeric -c --check)'-N'[translate IP addresses to names]' \ + '(-a --handle)'{-a,--handle}'[output rule handle]' \ + '(-e --echo)'{-e,--echo}'[echo what has been added, inserted or replaced]' \ + {-I,--includepath}'[add specified directory to the paths searched for include files]:include directory [/usr/share]:include directory:_directories' +) + +# start a state machine. The state is modified by _arguments if the +# current argument (descriptors) cannot be completed. Each state has to define is successive state and the +# 'descriptors' for _arguments, which essentially tells _arguments how to complete +local _i=0 +while true;do + (( _i+=1 )) + #Guard for endless loops + [[ $_i -gt 100 ]] && return 1 + + descriptors=() + nextstate="end" + case $state in + (start) + ##if line is empty (at the start) or ends with semicolon, autocomplete subcommands, + # else if we are after a space,complete a semicolon (end the current nft command) and start anew + if [[ $line[1] = "" || $line[1] =~ ';$' ]] ; then + descriptors=( ":: :_nft_subcommands" ) + nextstate="category" + else + if [[ $words =~ ' $' ]]; then + descriptors=(':: :(\;)') + else + descriptors=(':argument: ') + fi + nextstate="start" + fi + ;; + (category) + case $line[1] in + (add | list | flush | delete | create | rename | insert | replace | reset) + descriptors=( ":: :_nft_${line[1]}" ) + nextstate=$line[1] + ;; + (monitor) + descriptors=( ":: : _nft_mon_filter" ) + nextstate="mon1" + ;; + (export) + descriptors=( ":: :(ruleset)" ":: :_nft_out_format" ) + nextstate="preend" + ;; + (describe) + descriptors=( ":expression: ") + nextstate="start" #x restart + ;; + (*) + return 1; + ;; + esac + + #descriptors=( "(ruleset)" ) + #nextstate="end" + ;; + (mon1) + case $line[1] in + (new | destroy) +# descriptors=( ":: :_nft_mon_keywords" ":: :_nft_out_format") + descriptors=( ":: : _nft_mon_keywords") + nextstate="mon1" + ;; + (tables | chains | sets | rules | elements | ruleset) + descriptors=( ":: : _nft_out_format") + nextstate="preend" + ;; + esac + ;; + #all completions for create and insert match with the completions of add + (create | insert) + state="add" + ;| + #all completions for reset and flush match with the completions of list + (reset | flush) + state="list" + ;| + #(add(^table)/create(^table)/delete/flush(^ruleset)/insert/list(^ruleset)/rename/replace)[family]table + (reset | delete | insert | rename | replace | add | create | flush | list) + if [[ $state = "add" && $line[1] = "table" ]]; then + descriptors=( ":: :_nft_families" ":table name:") + nextstate="start" #x restart + elif [[ $state = "list" && ( $line[1] = "ruleset" || $line[1] = "tables" ) ]]; then + descriptors=( ":: :_nft_families") + nextstate="start" #x restart + elif [[ $state = "delete" && $line[1] = "table" ]]; then + descriptors=(": : _nft_table all-handle") + nextstate="tcomplete-delete-table" + else + cmd_obj=$line[1] + cmd_subcmd=$state + descriptors=(": : _nft_table all") + nextstate="tcomplete" + fi + ;; + (tcomplete-delete-table) + # if only a family was completed, complete the table name. + case $line[1] in + (arp | bridge | inet | ip | ip6 | netdev) + descriptors=(": : _nft_table ${line[1]}-handle") + cmd_fam=$line[1] + ;; + # if 'handle' was completed, complete the handle number. + (handle) + descriptors=(": : _nft_table_handle_all " ) + ;; + # else, complete nothing and go to the next state. default family is 'ip' + (*) + descriptors=() + cmd_fam="ip" + ;; + esac + nextstate="delete-table" + ;; + (tcomplete) + # if only a family was completed, complete the table name. + case $line[1] in + (arp | bridge | inet | ip | ip6 | netdev) + descriptors=(": : _nft_table ${line[1]}") + cmd_fam=$line[1] + ;; + # else, complete nothing and go to the next state. default family is 'ip' + (*) + descriptors=() + cmd_fam="ip" + ;; + esac + nextstate="$cmd_subcmd-$cmd_obj" + ;; + (list-table) + descriptors=(":: :(\;)") + nextstate="start" + ;; + (delete-table) + #if family AND handle were input, complete handle number for given family. + if [[ $line[1] == "handle" ]]; then + descriptors=(":table handle: _nft_table_handle $cmd_fam" ) + else + descriptors=() + fi + nextstate="start" + ;; + (delete-chain | delete-set | delete-quota | delete-counter | delete-ct\\ helper) + cmd_tab=$line[1] + descriptors=(": : _nft_object $cmd_fam $cmd_tab $cmd_obj true") + nextstate="delete-obj-handle" + ;; + (delete-obj-handle) + if [[ $line[1] == "handle" ]]; then + descriptors=(": : _nft_object_handle $cmd_fam $cmd_tab $cmd_obj") + else + descriptors=(": :(\;)") + fi + nextstate="start" + ;; + (add-chain) + descriptors=(":chain name:") + nextstate="start" + ;; + (rename-chain) + cmd_tab=$line[1] + descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false") + nextstate="add-chain" + ;; + (replace-rule | delete-rule) + cmd_tab=$line[1] + descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false") + nextstate="repdel-rule" + ;; + (repdel-rule) + cmd_chain=$line[1] + descriptors=(": :(handle)" ": : _nft_rule_handle $cmd_fam $cmd_tab ${line[1]}") + if [[ $cmd_subcmd = "replace" ]];then + nextstate="rule-stmt" + else + nextstate="start" + fi + ;; + (add-rule) + cmd_tab=$line[1] + descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false") + nextstate="add-rule-2" + ;; + (add-rule-2) + cmd_chain=$line[1] + descriptors=(": :(handle index position)") + nextstate="add-rule-3" + ;; + (add-rule-3) + case $line[1] in + (index | position) + descriptors=(":${line[1]}:") + ;; + (handle) + descriptors=(": : _nft_rule_handle $cmd_fam $cmd_tab $cmd_chain") + ;; + (*) + descriptors=() + ;; + esac + nextstate="rule-stmt" + ;; + (rule-stmt) + #TODO + # _nft_rule $cmd_fam $cmd_tab $cmd_chain\ + # && return 0; + descriptors=":expression: " + nextstate="start" + ;; + (list-set | list-map | delete-map | list-chain | list-flowtable | delete-flowtable | list-ct\\ helper | list-counter | list-quota | list-meter) + cmd_tab=$line[1] + descriptors=(": : _nft_object $cmd_fam $cmd_tab $cmd_obj false") + nextstate="start" + ;; + #TODO: + #(add-element | delete-element) + #(add-set | add-map) + #(add-flowtable) + #("add-ct\ helper") + #(add-counter) + #(add-quota) + + (*) + return 1; + ;; + esac + _arguments -C -s \ + "${options[@]}" \ + "${descriptors[@]}" \ + "*:: :->$nextstate" \ + && return 0; + +done +} # end _nft + +_nft_subcommands(){ + local commands=( + 'add:add a table, chain, rule, set, map, or object' + 'list:list a ruleset, table, chain, set, map, or object' + 'flush:flush (delete everything from) a ruleset, table, chain, set, or map' + 'export:print the ruleset in a machine readable format (json or xml)' + 'delete:delete a table, chain, rule, set, element, map, or object' + 'create:similar to add but returns an error for existing chain' + 'rename:rename the specified chain' + 'insert:similar to the add command, but the rule is prepended to the beginning of the chain or before the rule at the given position' + 'replace:similar to the add command, but replaces the specified rule' + 'reset:list-and-reset stateful object' + 'monitor:listen to Netlink events' + 'describe:show information about the type of an expression and its data type' + ) + _describe -t commands 'nft subcommand' commands "$@" +} +_nft_mon_filter(){ + local monitor_filters=( + 'new:show only events of created objects' + 'destroy:show only events of deleted objects' + ) + _describe -t monitor_filters 'nft monitor' monitor_filters -J monitor_filters "$@" + _nft_mon_keywords +} + +_nft_mon_keywords(){ + local monitor_keywords=( + 'tables:show table events' + 'chains:show chain events' + 'sets:show set events' + 'rules:show rule events' + 'elements:show only events of element objects' + 'ruleset:show ruleset events, such as table, chain, rule, set, counters and quotas' + ) + _describe -t monitor_keywords 'nft monitor' monitor_keywords -J monitor_keywords "$@" + _nft_out_format +} + +_nft_out_format(){ + local monitor_format=( + 'json:format output to JSON' + 'xml:format output to XML' + ) + _describe -t monitor_format "output format" monitor_format -J monitor_format "$@" +} + +_nft_add(){ + local commands=( + 'table:add a new table' + 'flowtable:add a new flowtable' + 'chain:add a chain to a table' + 'rule:add a rule to an existing chain' + 'set:add a set to a table' + 'map:add a map to a table' + 'element:add one or multiple element(s) to a set or map' + 'ct\ helper:add a ct helper to a table' + 'counter:add a named counter to a table' + 'quota:add a named quota helper to a table' + ) + _describe -t commands 'nft add' commands "$@" +} + +_nft_create(){ + local commands=( + "table:add a table, but return an error if it already exists" + "chain:add a chain to a table, but return an error if it already exists" + "flowtable:add a flowtable, but return an error if it already exists" + ) + _describe -t commands 'nft create' commands "$@" +} + +_nft_delete(){ + local commands=( + "table:delete the specified table" + "chain:delete the specified chain, chain must be empty and mustn't be used as jump target" + "rule:delete the specified rule, rule must be referable to by a handle" + "set:delete the specified set" + "map:delete the specified map" + "element:delete element(s) from the specified set/map" + "flowtable:delete the specified flowtable" + "ct\ helper:delete the specified ct helper" + "counter:delete the specified counter" + "quota:delete the specified quota" + ) + _describe -t commands 'nft delete' commands "$@" +} + +_nft_flush(){ + local commands=( + "ruleset:clear the whole ruleset, including removing all tables and containing objects" + "table:flush all chains and rules of the specified table" + "chain:flush all rules of the specified chain" + "set:remove all elements from the specified set" + "map:remove all elements from the specified map" + ) + _describe -t commands 'nft flush' commands "$@" +} + +_nft_insert(){ + local commands=( + "rule:prepend a rule to the beginning of the chain or before the rule with the given handle" + ) + _describe -t commands 'nft insert' commands "$@" +} + +_nft_list(){ + local commands=( + "ruleset:print the ruleset in human-readable format" + "tables:list all tables (undocumented)" + "table:list all chains and rules of the specified table" + "chain:list all rules of the specified chain" + "set:display the elements in the specified set" + "map:display the elements in the specified map" + "flowtable:list all flowtables" + "ct\ helper:display stateful information the ct helper holds" + "counter:display stateful information the counter holds" + "quota:display stateful information the quota holds" + ) + _describe -t commands 'nft list' commands "$@" +} + +_nft_rename(){ + local commands=( + "chain:replace a chain" + ) + _describe -t commands 'nft rename' commands "$@" +} + +_nft_replace(){ + local commands=( + "rule:replace a rule" + ) + _describe -t commands 'nft replace' commands "$@" +} + +_nft_reset(){ + local commands=( + 'ct\ helper:reset and list a ct helper to a table' + 'counter:reset and list a counter from a table' + 'quota:reset and list a quota object a table' + ) + _describe -t commands 'nft reset' commands "$@" +} +_nft_families(){ + local families=( + "ip:IPv4 address family" + "ip6:IPv6 address family" + "inet:internet (IPv4+IPv6) address family" + "arp:ARP address family, handling IPv4 ARP packets" + "bridge:Bridge address family, handling packets which traverse a bridge device" + "netdev:Netdev address family, handling packets from ingress" + ) + _describe -t families 'nft families' families "$@" +} + +_nft_table(){ + # complete the names of tables and the families of existing tables + #$1 can be: all all-handle -handle + local tables=() + if [[ "$1" =~ "^all" ]]; then + local families=( ${(f)"$(_call_program -p tables nft list tables 2>/dev/null \ + | cut -d\ -f2 )"} ) + # ip is the default family, search also for table names there + 1="${1/all/ip}" + _describe -t families "family" families -J "family" + fi + if [[ "$1" =~ "-handle$" ]]; then + tables=("handle:adress the table by handle") + #remove -handle from $1 to be able to complete table names + 1="${1/-handle/}" + _describe -t tables "table" tables -V "handle" + fi + case $1 in + (arp | bridge | inet | ip | ip6 | netdev) + tables=( ${(f)"$(_call_program -p tables nft list ruleset -a 2>/dev/null \ + | grep '^table '"$1" | sed 's/table // ;s/{ # handle // ;s/\(\S*\) \(\S*\) \(\S*\)/\2:type \1, handle \3/' )"} ) + _describe -t tables "table" tables -V "table-name" + ;; + esac +} + +_nft_table_handle(){ + # complete the handles of tables with the specified family (with the table name in the description) + #$1:protocol family + local tables=( ${(f)"$(_call_program -p tables nft list ruleset -a 2>/dev/null \ + | grep '^table '"$1" | sed 's/table // ;s/{ # handle // ;s/\(\S*\) \(\S*\) \(\S*\)/\3:\2(type \1)/' )"} ) + echo $1 > /tmp/znfttab + _describe -t tables "table handle" tables +} + +_nft_table_handle_all(){ + # complete the handles of tables of all families (with the table name in the description) + local tables=( ${(f)"$(_call_program -p tables nft list ruleset -a 2>/dev/null \ + | grep '^table' | sed 's/table // ;s/{ # handle // ;s/\(\S*\) \(\S*\) \(\S*\)/\3:\2(type \1)/' )"} ) + _describe -t tables "table handle" tables +} + +_nft_object(){ + # complete the names of objects contained directly in a table (with the handle number in the description) + #$1:protocol family + #$2:table + #$3:object type (chain/set/map/flowtable/ct helper/counter/quota/meter) + #$4:include 'handle'? + local objects=( ${(f)"$(_call_program -p objects nft list table $1 $2 -a 2>/dev/null\ + | grep ""\\s\*$3"" | sed 's/\s*'"$3"' // ;s/ { # \(.*\)/:(\1)/' )"} ) + if $4 ;then + objects+=( "handle:adress $3 by handle") + fi + _describe -t objects "$3" objects +} + +_nft_object_handle(){ + # complete handles of objects contained directly in a table (with the name in the description) + #$1:protocol family + #$2:table + #$3:object type (chain/set/ct helper/counter/quota) + local handles=( ${(f)"$(_call_program -p handles nft list table $1 $2 -a 2>/dev/null\ + | grep ""\\s\*$3"" | sed 's/\s*'"$3"' // ;s/ { # handle// ;s/\(\S*\) \(\S*\)/\2:\1/' )"} ) + _describe -t handles "$3-handle" handles +} + +_nft_rule_handle(){ + # complete the handles of rules (and put the rule into the description) + #$1:protocol family + #$2:table + #$3:chain name + local rules=( ${(f)"$(_call_program -p nft-rule-handle nft list chain $1 $2 $3 -a 2>/dev/null \ + |grep -v '^\s*\(table\|chain\|type\|\}\)'|sed 's/^\s*\(.*\) # handle \(\S*\)$/\2:\1/' )"} ) + # don't sort those entries alphabetically, so they get shown in the order they are executed in nftables + _describe -t rules "rule" rules -V "rules" +} + +#currently, only the `nft` command is covered by this script. +_nft "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_node b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_node new file mode 100644 index 00000000..dd759864 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_node @@ -0,0 +1,174 @@ +#compdef node +# ------------------------------------------------------------------------------ +# Copyright (c) 2018 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Node.js v10.4.1 (https://nodejs.org) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Mario Fernandez (https://github.com/sirech) +# * Nicholas Penree (https://github.com/drudge) +# * Masafumi Koba (https://github.com/ybiquitous) +# * Shohei YOSHIDA (https://github.com/syohex) +# +# ------------------------------------------------------------------------------ + +_node_files() { + for (( i = 2; i < CURRENT; i++)); do + if [[ ${words[i]} == "--prof-process" ]]; then + _files -g "*.log" + return + fi + done + + _files -g "*.(js|mjs)" +} + +_node_args() { + if (( CURRENT == 2 )); then + _alternative "_node_files" "_values 'command' 'inspect[enable inspector for debugging]'" + return + fi + + _node_files +} + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +_arguments -C \ + '-[script read from stdin (default; interactive mode if a tty)]' \ + '--[indicate the end of node options]' \ + '--abort-on-uncaught-exception[aborting instead of exiting causes a core file to be generated for analysis]' \ + '--completion-bash[print source-able bash completion script]' \ + '--cpu-prof[Start the V8 CPU profiler on start up]' \ + '--cpu-prof-dir=[directory where the V8 profiles generated by --cpu-prof]: :_files -/' \ + '--cpu-prof-name=[file name of the V8 profile generated with --cpu-prof]: :_files' \ + '--cpu-prof-interval=[sampling interval in microseconds for the V8 CPU profiler]:number' \ + '--disable-proto=[disable Object.prototype.__proto__]:mode:(delete throw)' \ + '--disallow-code-generation-from-strings[disallow eval and friends]' \ + '--enable-source-maps[source map support]' \ + '--experimental-import-meta-resolve[experimental ES Module import.meta.resolve() support]' \ + '(--loader --experimental-loader)'{--loader,--experimental-loader}'=[Specify the module of a custom ECMAScript Module loader]: :_files' \ + '--experimental-modules[experimental ES Module support and caching modules]' \ + '--experimental-policy=[security policy file]: :_files' \ + '--experimental-repl-await[experimental await keyword support in REPL]' \ + '--experimental-report[enable report generation]' \ + '--experimental-specifier-resolution=[extension resolution algorithm for es modules]:resolution algorithm:(explicit none)' \ + '--experimental-top-level-await[enable experimental support for Top-Level await]' \ + '--experimental-vm-modules[experimental ES Module support in vm module]' \ + '--experimental-wasi-unstable-preview1[experimental WASI support]' \ + '--experimental-wasm-modules[experimental ES module support for webassembly modules]' \ + '--force-context-aware[disable loading non-context-aware addons]' \ + '--frozen-intrinsics[experimental frozen intrinsics support]' \ + '--heap-prof[Start the V8 heap profiler on start up]' \ + '--heap-prof-dir=[Directory where the V8 profiles generated by --heap-prof]: :_files -/' \ + '--heap-prof-interval=[sampling interval in bytes for the V8 heap profile]:number' \ + '--heap-prof-name=[file name of the V8 heap profile generated]: :_files' \ + '--heapsnapshot-signal=[Generate heap snapshot on specified signal]:signals:_signals -s' \ + '--http-parser=[HTTP parser]:HTTP parser:(legacy llhttp)' \ + '--http-server-default-timeout=[default http server socket timeout in ms]::number' \ + '--huge-max-old-generation-size[increase default maximum heap size with 16GB or more]' \ + '--icu-data-dir=[set ICU data load path to dir (overrides NODE_ICU_DATA) note: linked-in ICU data is present]: :_directories' \ + '--input-type=[set module type for string input]:module type :(commonjs module)' \ + '--insecure-http-parser[Use an insecure HTTP parser that accepts invalid HTTP headers]' \ + '--inspect-brk=-[activate inspector on host:port and break at start of user script]:[host\:]port' \ + '(--debug-port --inspect-port)'{--debug-port,--inspect-port}'=[set host:port for inspector]:[host\:]port' \ + '--inspect=-[activate inspector on host:port (default: 127.0.0.1:9229)]:[host\:]port' \ + '--inspect-publish-uid=[comma separated list of destinations for inspector uid]' \ + '--interpreted-frames-native-stack[helm system profilers to translate JavaScript interpreted frames]' \ + '--jitless[Disable runtime allocation of executable memory]' \ + '--max-http-header-size=[set the maximum size of HTTP headers]::number' \ + '--napi-modules[load N-API modules (no-op - option kept for compatibility)]' \ + '--no-deprecation[silence deprecation warnings]' \ + '--no-force-async-hooks-checks[disable checks for async_hooks]' \ + '--no-warnings[silence all process warnings]' \ + '--openssl-config=[load OpenSSL configuration from the specified file (overrides OPENSSL_CONF)]:file:_files' \ + '--pending-deprecation[emit pending deprecation warnings]' \ + '--policy-integrity=[ensure the security policy contents match the specified integrity]' \ + '--preserve-symlinks[preserve symbolic links when resolving]' \ + '--preserve-symlinks-main[preserve symbolic links when resolving the main module]' \ + '--prof[generate V8 profiler output]' \ + '--prof-process[process V8 profiler output generated using --prof]' \ + '--redirect-warnings=[write warnings to file instead of stderr]: :_files' \ + '--report-compact[output compact single-line JSON]' \ + '--report-directory=[custom report path]: :_files -/' \ + '--report-filename=[custom report file name]: :_files' \ + '--report-on-fatalerror[generate diagnostic report on fatal (internal) errors]' \ + '--report-on-signal=[generate diagnostic report upon receiving signals]' \ + '--report-signal=[causes diagnostic report to be produced on provided signal]:signals:_signals -s' \ + '--report-uncaught-exception[generate diagnostic report on uncaught exceptions]' \ + '--throw-deprecation[throw an exception on deprecations]' \ + '--title=[the process title to use on startup]:process title' \ + '--tls-cipher-list=[use an alternative default TLS cipher list]:cipher list string' \ + '--tls-keylog=[log TLS decryption keys to named file for traffic analysis]: :_files' \ + '(--tls-max-v1.3)--tls-max-v1.2[set default TLS maximum to TLSv1.2]' \ + '(--tls-max-v1.2)--tls-max-v1.3[set default TLS maximum to TLSv1.3]' \ + '(--tls-min-v1.1 --tls-min-v1.2 --tls-min-v1.3)--tls-min-v1.0[set default TLS minimum to TLSv1.0]' \ + '(--tls-min-v1.0 --tls-min-v1.2 --tls-min-v1.3)--tls-min-v1.1[set default TLS minimum to TLSv1.1]' \ + '(--tls-min-v1.0 --tls-min-v1.1 --tls-min-v1.3)--tls-min-v1.2[set default TLS minimum to TLSv1.2]' \ + '(--tls-max-v1.2 --tls-min-v1.0 --tls-min-v1.1 --tls-min-v1.2)--tls-min-v1.3[set default TLS minimum to TLSv1.3]' \ + '--trace-atomics-wait[trace Atomics.wait operations]' \ + '--trace-deprecation[show stack traces on deprecations]' \ + '--trace-event-categories[comma separated list of trace event categories to record]: :{_values -s , categories node node.async_hooks node.bootstrap node.perf node.perf.usertiming node.perf.timerify node.fs.sync node.vm.script v8}' \ + '--trace-event-file-pattern[Template string specifying the filepath for the trace-events data, it supports ${rotation} and ${pid} log-rotation id. %2$u is the pid.]:template string' \ + '--trace-events-enabled[track trace events]' \ + '--trace-exit[show stack trace when an environment exits]' \ + '--trace-sigint[prints a stack trace on SIGINT]' \ + '--trace-sync-io[show stack trace when use of sync IO is detected after the first tick]' \ + '--trace-tls[prints TLS packet trace information to stderr]' \ + '--trace-warnings[show stack traces on process warnings]' \ + '--track-heap-objects[track heap object allocations for heap snapshots]' \ + '--unhandled-rejections=[define unhandled rejections behavior]:rejection behavior:(strict warn none)' \ + '--use-bundled-ca[use bundled CA store (default)]' \ + '--use-largepages=[re-map the Node.js static code to large memory pages at startup]:mode:(off on silent)' \ + "--use-openssl-ca[use OpenSSL's default CA store]" \ + '(- 1 *)--v8-options[print v8 command line options]' \ + "--v8-pool-size=[set v8's thread pool size]:number" \ + '--zero-fill-buffers[automatically zero-fill all newly allocated Buffer and SlowBuffer instances]' \ + {-c,--check}'[syntax check script without executing]' \ + '(- 1 *)'{-e,--eval}'[evaluate script]:inline JavaScript' \ + '(- 1 *)'{-h,--help}'[print node command line options]' \ + {-i,--interactive}'[always enter the REPL even if stdin does not appear to be a terminal]' \ + '(- 1 *)'{-p,--print}'[evaluate script and print result]:inline JavaScript' \ + '*'{-r,--require}'[module to preload (option can be repeated)]: :_node_files' \ + '(- 1 *)'{-v,--version}'[print Node.js version]' \ + '*: :_node_args' && ret=0 + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nvm b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nvm new file mode 100644 index 00000000..05b4cf18 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_nvm @@ -0,0 +1,110 @@ +#compdef nvm +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for nvm (https://github.com/creationix/nvm). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Changwoo Park (https://github.com/pismute) +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 + +local -a _1st_arguments +_1st_arguments=( + 'help:Show this message' + 'install:Download and install a ' + 'uninstall:Uninstall a ' + 'use:Modify PATH to use ' + 'run:Run with as arguments' + 'ls:List installed [versions]' + 'ls-remote:List remote versions available for install' + 'deactivate:Undo effects of NVM on current shell' + 'alias:Set an alias named pointing to . Show all aliases beginning with [].' + 'unalias:Deletes the alias named ' + 'copy-packages:Install global NPM packages contained in to current version' + 'clear-cache:Clear cache' + 'version:Show current node version' +) + +_arguments -C \ + '1: :->cmds' \ + '*: :->args' && ret=0 + +__nvm_aliases(){ + local aliases + aliases="" + if [ -d $NVM_DIR/alias ]; then + aliases="`cd $NVM_DIR/alias && ls`" + fi + echo "${aliases}" +} + +__nvm_versions(){ + echo "$(nvm_ls) $(__nvm_aliases)" +} + +case $state in + cmds) + _describe -t commands 'nvm command' _1st_arguments && ret=0 + ;; + + args) + case $words[2] in + (use|run|ls|list|install|uninstall|copy-packages) + + _values 'version' $(__nvm_versions) && ret=0 + ;; + + (alias|unalias) + + _values 'aliases' $(__nvm_aliases) && ret=0 + ;; + + *) + (( ret )) && _message 'no more arguments' + ;; + + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_openssl b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_openssl new file mode 100644 index 00000000..df920963 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_openssl @@ -0,0 +1,1687 @@ +#compdef openssl +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ + +# openssl command [ command_opts ] [ command_args ] + +_openssl() { + local openssl_commands cmd cmds + if [[ "$CURRENT" -lt 2 ]]; then + # I do not think this can happen... + return + elif [[ "$CURRENT" -eq 2 ]]; then + # first parameter, the command + openssl_commands=(${(z)${${(f)"$(openssl help 2>&1)"}:#([A-Z]|openssl:Error:)*}}) + _describe 'openssl commands' openssl_commands + else + # $CURRENT -gt 2 + cmd="${words[2]}" + # Note: we could use ${(k)functions} to get a list of all functions and + # filter those that start with _openssl_ + # but that would mean defining a new function *somewhere* might mess with + # the completion... + cmds=(asn1parse ca ciphers cms crl crl2pkcs7 dgst dh dhparam dsa dsaparam \ + ec ecparam enc engine errstr gendh gendsa genpkey genrsa nseq ocsp \ + passwd pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand req rsa \ + rsautl s_client s_server s_time sess_id smime speed spkac srp ts \ + verify version x509) + # check if $cmd is in $cmds, the list of supported commands + if [[ "${cmds[(r)$cmd]}" == "${cmd}" ]]; then + # we should be able to complete $cmd + # run _openssl_$cmd with the remaining words from the command line + shift words + (( CURRENT-- )) + _openssl_${cmd} + elif [[ ${${=${"$(openssl help 2>&1)"/*Cipher commands[^)]#)/}}[(re)$cmd]} == "$cmd" ]]; then + # $cmd is a cipher command, which is practically an alias to enc + shift words + (( CURRENT-- )) + _openssl_enc + elif [[ ${${=${${"$(openssl help 2>&1)"%%Cipher commands*}/*Message Digest commands[^)]#)/}}[(re)$cmd]} == "$cmd" ]]; then + # $cmd is a message digest command, which is practically an alias to dgst + shift words + (( CURRENT-- )) + _openssl_dgst + fi + fi +} + + +_openssl_asn1parse() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format - one of DER PEM]:format:(DER PEM)' \ + '-in[input file]:file:_files' \ + '-out[output file (output format is always DER]:file:_files' \ + "-noout[don't produce any output]" \ + '-offset[offset into file]:number: ' \ + '-length[length of section in file]:number: ' \ + '-i[indent entries]' \ + '-dump[dump unknown data in hex form]' \ + '-dlimit[dump the first arg bytes of unknown data in hex form]:number: ' \ + '-oid[file of extra oid definitions]:file:_files' \ + "-strparse[a series of these can be used to 'dig' into multiple ASN1 blob wrappings]:offset:" \ + '-genstr[string to generate ASN1 structure from]:str:' \ + '-genconf[file to generate ASN1 structure from]:file:_files' +} + + +_openssl_ca() { + # written for openssl 1.0.1k + _arguments -C \ + '-verbose[talk alot while doing things]' \ + '-config[a config file]:file:_files' \ + '-name[the particular CA definition to use]:section: ' \ + '-gencrl[generate a new CRL]' \ + '-crldays[days is when the next CRL is due]:days: ' \ + '-crlhours[hours is when the next CRL is due]:hours: ' \ + '-startdate[certificate validity notBefore]:date: ' \ + '-enddate[certificate validity notAfter (overrides -days)]:date: ' \ + '-days[number of days to certify the certificate for]:days: ' \ + '-md[md to use, one of md2, md5, sha or sha1]:alg:(md2 md5 sha sha1)' \ + "-policy[the CA 'policy' to support]:policy: " \ + '-keyfile[private key file]:file:_files' \ + '-keyform[private key file format (PEM or ENGINE)]:format:(PEM ENGINE)' \ + '-key[key to decode the private key if it is encrypted]:password: ' \ + '-cert[the CA certificate]:file:_files' \ + '-selfsign[sign a certificate with the key associated with it]' \ + '-in[the input PEM encoded certificate request(s)]:file:_files' \ + '-out[where to put the output file(s)]:file:_files' \ + '-outdir[where to put output certificates]:dir:_files -/' \ + '-infiles[the last argument, requests to process]:*:files:_files' \ + '-spkac[file contains DN and signed public key and challenge]:file:_files' \ + '-ss_cert[file contains a self signed cert to sign]:file:_files' \ + "-preserveDN[don't re-order the DN]" \ + "-noemailDN[don't add the EMAIL field into certificate' subject]" \ + "-batch[don't ask questions]" \ + '-msie_hack[msie modifications to handle all those universal strings]' \ + '-revoke[revoke a certificate (given in file)]:file:_files' \ + "-subj[use arg instead of request's subject]:subject: " \ + '-utf8[input characters are UTF8 (default ASCII)]' \ + '-multivalue-rdn[enable support for multivalued RDNs]' \ + '-extensions[extension section (override value in config file)]:section: ' \ + '-extfile[configuration file with X509v3 extensions to add]:file:_files' \ + '-crlexts[CRL extension section (override value in config file)]:section: ' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-status[shows certificate status given the serial number]:serial: ' \ + '-updatedb[updates db for expired certificates]' +} + + +_openssl_ciphers() { + # written for openssl 1.0.1k + _arguments -C \ + '-v[verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL]' \ + '-V[even more verbose]' \ + '-ssl2[SSL2 mode]' \ + '-ssl3[SSL3 mode]' \ + '-tls1[TLS1 mode]' \ + ':cipher suite:_list_ciphers' +} + + +_openssl_cms() { + # written for openssl 1.0.1k + _arguments -C \ + '-encrypt[encrypt message]' \ + '-decrypt[decrypt encrypted message]' \ + '-sign[sign message]' \ + '-verify[verify signed message]' \ + '-cmsout[output CMS structure]' \ + '-des3[encrypt with triple DES]' \ + '-des[encrypt with DES]' \ + '-seed[encrypt with SEED]' \ + '-rc2-40[encrypt with RC2-40 (default)]' \ + '-rc2-64[encrypt with RC2-64]' \ + '-rc2-128[encrypt with RC2-128]' \ + '-aes128[encrypt PEM output with cbc aes]' \ + '-aes192[encrypt PEM output with cbc aes]' \ + '-aes256[encrypt PEM output with cbc aes]' \ + '-camellia128[encrypt PEM output with cbc camellia]' \ + '-camellia192[encrypt PEM output with cbc camellia]' \ + '-camellia256[encrypt PEM output with cbc camellia]' \ + "-nointern[don't search certificates in message for signer]" \ + "-nosigs[don't verify message signature]" \ + "-noverify[don't verify signers certificate]" \ + "-nocerts[don't include signers certificate when signing]" \ + '-nodetach[use opaque signing]' \ + "-noattr[don't include any signed attributes]" \ + "-binary[don't translate message to text]" \ + '-certfile[other certificates file]:file:_files' \ + '-certsout[certificate output file]:file:_files' \ + '-signer[signer certificate file]:file:_files' \ + '-recip[recipient certificate file for decryption]:file:_files' \ + '-keyid[use subject key identifier]' \ + '-in[input file]:file:_files' \ + '-inform[input format SMIME (default), PEM or DER]:format:(SMIME PEM DER)' \ + '-inkey[input private key (if not signer or recipient)]:file:_files' \ + '-keyform[input private key format (PEM or ENGINE)]:format:(PEM ENGINE)' \ + '-out[output file]:file:_files' \ + '-outform[output format SMIME (default), PEM or DER]:format:(SMIME PEM DER)' \ + '-content[supply or override content for detached signature]:file:_files' \ + '-to[to address mail head]:address: ' \ + '-from[from address mail head]:address: ' \ + '-subject[subject mail head]:subject: ' \ + '-text[include or delete text MIME headers]' \ + '-CApath[trusted certificates directory]:dir:_files -/' \ + '-CAfile[trusted certificates file]:file:_files' \ + "-crl_check[check revocation status of signer's certificate using CRLs]" \ + "-crl_check_all[check revocation status of signer's certificate chain using CRLs]" \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-passin[input file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-rand[files to use for random number input]:file:_rand_files' \ + '*:certificate:_files' +} + + +_openssl_crl() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format - default PEM (DER or PEM)]:format:(PEM DER)' \ + '-outform[output format - default PEM]:format:(PEM DER)' \ + '-text[print out a text format version]' \ + '-in[input file - default stdin]:file:_files' \ + '-out[output file - default stdout]:file:_files' \ + '-hash[print hash value]' \ + '-hash_old[print old-style (MD5) hash value]' \ + '-fingerprint[print the crl fingerprint]' \ + '-issuer[print issuer DN]' \ + '-lastupdate[print lastUpdate field]' \ + '-nextupdate[print nextUpdate field]' \ + '-crlnumber[print CRL number]' \ + '-noout[no CRL output]' \ + '-CAfile[verify CRL using certificates in the specified file]:file:_files' \ + '-CApath[verify CRL using certificates in the specified directory]:dir:_files -/' \ + '*-nameopt[various certificate name options]:options:_nameopts' +} + + +_openssl_crl2pkcs7() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format - DER or PEM]:format:(PEM DER)' \ + '-outform[output format - DER or PEM]:format:(PEM DER)' \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-certfile[certificates file of chain to a trusted CA (can be used more than once)]:file:_files' \ + "-nocrl[no crl to load, just certs from '-certfile']" +} + + +_openssl_dgst() { + # written for openssl 1.0.1k + local digests + digests=(-dss1 -md4 -md5 -mdc2 -ripemd160 -sha -sha1 -sha224 -sha256 -sha384 -sha512 -whirlpool) + # -hmac is listed twice because it's documented twice by openssl + _arguments -C -A '-*' \ + '(-r -hex -binary)-c[to output the digest with separating colons]' \ + '(-c -hex -binary)-r[to output the digest in coreutils format]' \ + '-d[to output debug info]' \ + '(-c -r -binary)-hex[output as hex dump]' \ + '(-c -r -hex)-binary[output in binary form]' \ + '-hmac[set the HMAC key to arg]:key: ' \ + '-non-fips-allow[allow use of non FIPS digest]' \ + '-sign[sign digest using private key in the specified file]:file:_files' \ + '-verify[verify a signature using public key in the specified file]:file:_files' \ + '-prverify[verify a signature using private key in the specified file]:file:_files' \ + '-keyform[key file format (PEM or ENGINE)]:format:(PEM ENGINE)' \ + '-out[output to filename rather than stdout]:file:_files' \ + '-signature[signature to verify]:file:_files' \ + '-sigopt[signature parameter]:nm\:v: ' \ + '-hmac[create hashed MAC with key]:key: ' \ + '-mac[create MAC (not necessarily HMAC)]:algorithm: ' \ + '-macopt[MAC algorithm parameters or key]:nm\:v: ' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + "($digests)-dss1[use the dss1 message digest algorithm]" \ + "($digests)-md4[to use the md4 message digest algorithm]" \ + "($digests)-md5[to use the md5 message digest algorithm]" \ + "($digests)-mdc2[to use the mdc2 message digest algorithm]" \ + "($digests)-ripemd160[to use the ripemd160 message digest algorithm]" \ + "($digests)-sha[to use the sha message digest algorithm]" \ + "($digests)-sha1[to use the sha1 message digest algorithm]" \ + "($digests)-sha224[to use the sha224 message digest algorithm]" \ + "($digests)-sha256[to use the sha256 message digest algorithm]" \ + "($digests)-sha384[to use the sha384 message digest algorithm]" \ + "($digests)-sha512[to use the sha512 message digest algorithm]" \ + "($digests)-whirlpool[to use the whirlpool message digest algorithm]" \ + '*:file:_files' +} + + +_openssl_dh() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-check[check the DH parameters]' \ + '-text[print a text form of the DH parameters]' \ + '-C[output C code]' \ + '-noout[no output]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' +} + + +_openssl_dhparam() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-dsaparam[read or generate DSA parameters, convert to DH]' \ + '-check[check the DH parameters]' \ + '-text[print a text form of the DH parameters]' \ + '-C[output C code]' \ + '-2[generate parameters using 2 as the generator value]' \ + '-5[generate parameters using 5 as the generator value]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-rand[files to use for random number input]:file:_rand_files' \ + '-noout[no output]' \ + ':numbits: ' +} + + +_openssl_dsa() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file]:file:_files' \ + '-passin[input file pass phrase source]:file:_files' \ + '-out[output file]:file:_files' \ + '-passout[output file pass phrase source]:file:_files' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-des[encrypt PEM output with cbc des]' \ + '-des3[encrypt PEM output with ede cbc des using 168 bit key]' \ + '-idea[encrypt PEM output with cbc idea]' \ + '-aes128[encrypt PEM output with cbc aes]' \ + '-aes192[encrypt PEM output with cbc aes]' \ + '-aes256[encrypt PEM output with cbc aes]' \ + '-camellia128[encrypt PEM output with cbc camellia]' \ + '-camellia192[encrypt PEM output with cbc camellia]' \ + '-camellia256[encrypt PEM output with cbc camellia]' \ + '-seed[encrypt PEM output with cbc seed]' \ + '-text[print the key in text]' \ + "-noout[don't print key out]" \ + '-modulus[print the DSA public value]' +} + + +_openssl_dsaparam() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-text[print as text]' \ + '-C[output C code]' \ + '-noout[no output]' \ + '-genkey[generate a DSA key]' \ + '-rand[files to use for random number input]:file:_rand_files' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + ':numbits: ' +} + + +_openssl_ec() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file]:file:_files' \ + '-passin[input file pass phrase source]:file:_files' \ + '-out[output file]:file:_files' \ + '-passout[output file pass phrase source]:file:_files' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + "-des[encrypt PEM output, instead of 'des' every other cipher supported by OpenSSL can be used]" \ + '-text[print the key]' \ + "-noout[don't print key out]" \ + '-param_out[print the elliptic curve parameters]' \ + '-conv_form[specifies the point conversion form]:form:(compressed uncompressed hybrid)' \ + '-param_enc[specifies the way the ec parameters are encoded in the asn1 der encoding]:encoding:(named_curve explicit)' +} + + +_openssl_ecparam() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file - default stdin]:file:_files' \ + '-out[output file - default stdout]:file:_files' \ + '-noout[do not print the ec parameter]' \ + '-text[print the ec parameters in text form]' \ + '-check[validate the ec parameters]' \ + "-C[print a 'C' function creating the parameters]" \ + "-name[use the ec parameters with 'short name' name]:name: " \ + "-list_curves[prints a list of all currently available curve 'short names']" \ + '-conv_form[specifies the point conversion form]:form:(compressed uncompressed hybrid)' \ + '-param_enc[specifies the way the ec parameters are encoded in the asn1 der encoding]:encoding:(named_curve explicit)' \ + "-no_seed[if 'explicit' parameters are chosen do not use the seed]" \ + '-genkey[generate ec key]' \ + '-rand[files to use for random number input]:file:_rand_files' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' +} + + +_openssl_enc() { + # written for openssl 1.0.1k + local ciphers + ciphers=(-aes-128-cbc -aes-128-cbc-hmac-sha1 -aes-128-cfb -aes-128-cfb1 \ + -aes-128-cfb8 -aes-128-ctr -aes-128-ecb -aes-128-gcm -aes-128-ofb \ + -aes-128-xts -aes-192-cbc -aes-192-cfb -aes-192-cfb1 -aes-192-cfb8 \ + -aes-192-ctr -aes-192-ecb -aes-192-gcm -aes-192-ofb -aes-256-cbc \ + -aes-256-cbc-hmac-sha1 -aes-256-cfb -aes-256-cfb1 -aes-256-cfb8 \ + -aes-256-ctr -aes-256-ecb -aes-256-gcm -aes-256-ofb -aes-256-xts \ + -aes128 -aes192 -aes256 -bf -bf-cbc -bf-cfb -bf-ecb -bf-ofb \ + -blowfish -camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1 \ + -camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb \ + -camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1 \ + -camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb \ + -camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1 \ + -camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb \ + -camellia128 -camellia192 -camellia256 -cast -cast-cbc -cast5-cbc \ + -cast5-cfb -cast5-ecb -cast5-ofb -des -des-cbc -des-cfb -des-cfb1 \ + -des-cfb8 -des-ecb -des-ede -des-ede-cbc -des-ede-cfb -des-ede-ofb \ + -des-ede3 -des-ede3-cbc -des-ede3-cfb -des-ede3-cfb1 \ + -des-ede3-cfb8 -des-ede3-ofb -des-ofb -des3 -desx -desx-cbc \ + -id-aes128-GCM -id-aes192-GCM -id-aes256-GCM -idea -idea-cbc \ + -idea-cfb -idea-ecb -idea-ofb -rc2 -rc2-40-cbc -rc2-64-cbc \ + -rc2-cbc -rc2-cfb -rc2-ecb -rc2-ofb -rc4 -rc4-40 -rc4-hmac-md5 \ + -rc5 -rc5-cbc -rc5-cfb -rc5-ecb -rc5-ofb -seed -seed-cbc -seed-cfb \ + -seed-ecb -seed-ofb) + _arguments -C \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-pass[pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-e[encrypt]' \ + '-d[decrypt]' \ + '(-a -base64)'{-a,-base64}'[base64 encode/decode, depending on encryption flag]' \ + '-k[the password to derive the key from]:password: ' \ + '-kfile[read the password to derive the key from the first line of the file]:file:_files' \ + '-md[the md to use to create a key from a passphrase]:alg:(md2 md5 sha sha1)' \ + '-S[the actual salt to use]:salt: ' \ + '-K[the actual key to use]:key: ' \ + '-iv[the actual IV to use]:IV: ' \ + '-p[print out the key and IV used]' \ + '-P[print out the key and IV used the exit]' \ + '-bufsize[set the buffer size for I/O]:size: ' \ + '-nopad[disable standard block padding]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + "(${ciphers})-aes-128-cbc[cipher types]" \ + "(${ciphers})-aes-128-cbc-hmac-sha1[cipher types]" \ + "(${ciphers})-aes-128-cfb[cipher types]" \ + "(${ciphers})-aes-128-cfb1[cipher types]" \ + "(${ciphers})-aes-128-cfb8[cipher types]" \ + "(${ciphers})-aes-128-ctr[cipher types]" \ + "(${ciphers})-aes-128-ecb[cipher types]" \ + "(${ciphers})-aes-128-gcm[cipher types]" \ + "(${ciphers})-aes-128-ofb[cipher types]" \ + "(${ciphers})-aes-128-xts[cipher types]" \ + "(${ciphers})-aes-192-cbc[cipher types]" \ + "(${ciphers})-aes-192-cfb[cipher types]" \ + "(${ciphers})-aes-192-cfb1[cipher types]" \ + "(${ciphers})-aes-192-cfb8[cipher types]" \ + "(${ciphers})-aes-192-ctr[cipher types]" \ + "(${ciphers})-aes-192-ecb[cipher types]" \ + "(${ciphers})-aes-192-gcm[cipher types]" \ + "(${ciphers})-aes-192-ofb[cipher types]" \ + "(${ciphers})-aes-256-cbc[cipher types]" \ + "(${ciphers})-aes-256-cbc-hmac-sha1[cipher types]" \ + "(${ciphers})-aes-256-cfb[cipher types]" \ + "(${ciphers})-aes-256-cfb1[cipher types]" \ + "(${ciphers})-aes-256-cfb8[cipher types]" \ + "(${ciphers})-aes-256-ctr[cipher types]" \ + "(${ciphers})-aes-256-ecb[cipher types]" \ + "(${ciphers})-aes-256-gcm[cipher types]" \ + "(${ciphers})-aes-256-ofb[cipher types]" \ + "(${ciphers})-aes-256-xts[cipher types]" \ + "(${ciphers})-aes128[cipher types]" \ + "(${ciphers})-aes192[cipher types]" \ + "(${ciphers})-aes256[cipher types]" \ + "(${ciphers})-bf[cipher types]" \ + "(${ciphers})-bf-cbc[cipher types]" \ + "(${ciphers})-bf-cfb[cipher types]" \ + "(${ciphers})-bf-ecb[cipher types]" \ + "(${ciphers})-bf-ofb[cipher types]" \ + "(${ciphers})-blowfish[cipher types]" \ + "(${ciphers})-camellia-128-cbc[cipher types]" \ + "(${ciphers})-camellia-128-cfb[cipher types]" \ + "(${ciphers})-camellia-128-cfb1[cipher types]" \ + "(${ciphers})-camellia-128-cfb8[cipher types]" \ + "(${ciphers})-camellia-128-ecb[cipher types]" \ + "(${ciphers})-camellia-128-ofb[cipher types]" \ + "(${ciphers})-camellia-192-cbc[cipher types]" \ + "(${ciphers})-camellia-192-cfb[cipher types]" \ + "(${ciphers})-camellia-192-cfb1[cipher types]" \ + "(${ciphers})-camellia-192-cfb8[cipher types]" \ + "(${ciphers})-camellia-192-ecb[cipher types]" \ + "(${ciphers})-camellia-192-ofb[cipher types]" \ + "(${ciphers})-camellia-256-cbc[cipher types]" \ + "(${ciphers})-camellia-256-cfb[cipher types]" \ + "(${ciphers})-camellia-256-cfb1[cipher types]" \ + "(${ciphers})-camellia-256-cfb8[cipher types]" \ + "(${ciphers})-camellia-256-ecb[cipher types]" \ + "(${ciphers})-camellia-256-ofb[cipher types]" \ + "(${ciphers})-camellia128[cipher types]" \ + "(${ciphers})-camellia192[cipher types]" \ + "(${ciphers})-camellia256[cipher types]" \ + "(${ciphers})-cast[cipher types]" \ + "(${ciphers})-cast-cbc[cipher types]" \ + "(${ciphers})-cast5-cbc[cipher types]" \ + "(${ciphers})-cast5-cfb[cipher types]" \ + "(${ciphers})-cast5-ecb[cipher types]" \ + "(${ciphers})-cast5-ofb[cipher types]" \ + "(${ciphers})-des[cipher types]" \ + "(${ciphers})-des-cbc[cipher types]" \ + "(${ciphers})-des-cfb[cipher types]" \ + "(${ciphers})-des-cfb1[cipher types]" \ + "(${ciphers})-des-cfb8[cipher types]" \ + "(${ciphers})-des-ecb[cipher types]" \ + "(${ciphers})-des-ede[cipher types]" \ + "(${ciphers})-des-ede-cbc[cipher types]" \ + "(${ciphers})-des-ede-cfb[cipher types]" \ + "(${ciphers})-des-ede-ofb[cipher types]" \ + "(${ciphers})-des-ede3[cipher types]" \ + "(${ciphers})-des-ede3-cbc[cipher types]" \ + "(${ciphers})-des-ede3-cfb[cipher types]" \ + "(${ciphers})-des-ede3-cfb1[cipher types]" \ + "(${ciphers})-des-ede3-cfb8[cipher types]" \ + "(${ciphers})-des-ede3-ofb[cipher types]" \ + "(${ciphers})-des-ofb[cipher types]" \ + "(${ciphers})-des3[cipher types]" \ + "(${ciphers})-desx[cipher types]" \ + "(${ciphers})-desx-cbc[cipher types]" \ + "(${ciphers})-id-aes128-GCM[cipher types]" \ + "(${ciphers})-id-aes192-GCM[cipher types]" \ + "(${ciphers})-id-aes256-GCM[cipher types]" \ + "(${ciphers})-idea[cipher types]" \ + "(${ciphers})-idea-cbc[cipher types]" \ + "(${ciphers})-idea-cfb[cipher types]" \ + "(${ciphers})-idea-ecb[cipher types]" \ + "(${ciphers})-idea-ofb[cipher types]" \ + "(${ciphers})-rc2[cipher types]" \ + "(${ciphers})-rc2-40-cbc[cipher types]" \ + "(${ciphers})-rc2-64-cbc[cipher types]" \ + "(${ciphers})-rc2-cbc[cipher types]" \ + "(${ciphers})-rc2-cfb[cipher types]" \ + "(${ciphers})-rc2-ecb[cipher types]" \ + "(${ciphers})-rc2-ofb[cipher types]" \ + "(${ciphers})-rc4[cipher types]" \ + "(${ciphers})-rc4-40[cipher types]" \ + "(${ciphers})-rc4-hmac-md5[cipher types]" \ + "(${ciphers})-rc5[cipher types]" \ + "(${ciphers})-rc5-cbc[cipher types]" \ + "(${ciphers})-rc5-cfb[cipher types]" \ + "(${ciphers})-rc5-ecb[cipher types]" \ + "(${ciphers})-rc5-ofb[cipher types]" \ + "(${ciphers})-seed[cipher types]" \ + "(${ciphers})-seed-cbc[cipher types]" \ + "(${ciphers})-seed-cfb[cipher types]" \ + "(${ciphers})-seed-ecb[cipher types]" \ + "(${ciphers})-seed-ofb[cipher types]" +} + + +_openssl_engine() { + # written for openssl 1.0.1k + _arguments -C \ + '(-vv -vvv -vvvv)-v[verbose mode, for each engine, list its "control commands"]' \ + "(-v -vvv -vvvv)-vv[like -v, but additionally display each command's description]" \ + '(-v -vv -vvvv)-vvv[like -vv, but also add the input flags for each command]' \ + '(-v -vv -vvv)-vvvv[like -vvv, but also show internal input flags]' \ + '-c[for each engine, also list the capabilities]' \ + '(-tt)-t[for each engine, check that they are really available]' \ + '(-t)-tt[display error trace for unavailable engines]' \ + "-pre[runs command 'cmd' against the ENGINE before any attempts to load it (if -t is used)]:cmd: " \ + "-post[runs command 'cmd' against the ENGINE after loading it (only used if -t is also provided)]:cmd: " \ + '*:engine:_engines' + # TODO: can cmd (for -pre and -post) be completed? +} + + +_openssl_errstr() { + # written for openssl 1.0.1k + # written for openssl 1.0.2a + _arguments -C \ + '-stats' \ + ':errno: ' +} + + +_openssl_gendh() { + # written for openssl 1.0.1k + _arguments -C \ + "-out[output the key to 'file']:file:_files" \ + '-2[use 2 as the generator value]' \ + '-5[use 5 as the generator value]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-rand[files to use for random number input]:file:_rand_files' \ + ':numbits: ' +} + + +_openssl_gendsa() { + # written for openssl 1.0.1k + _arguments -C \ + "-out[output the key to 'file']:file:_files" \ + '-des[encrypt the generated key with DES in cbc mode]' \ + '-des3[encrypt the generated key with DES in ede cbc mode (168 bit key)]' \ + '-idea[encrypt the generated key with IDEA in cbc mode]' \ + '-seed[encrypt PEM output with cbc seed]' \ + '-aes128[encrypt PEM output with cbc aes]' \ + '-aes192[encrypt PEM output with cbc aes]' \ + '-aes256[encrypt PEM output with cbc aes]' \ + '-camellia128[encrypt PEM output with cbc camellia]' \ + '-camellia192[encrypt PEM output with cbc camellia]' \ + '-camellia256[encrypt PEM output with cbc camellia]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-rand[files to use for random number input]:file:_rand_files' \ + ':dsaparam-file:_files' +} + + +_openssl_genpkey() { + # written for openssl 1.0.1k + local ciphers cipher_opts + if ! ciphers=( ${$(openssl list-cipher-algorithms | cut -d' ' -f1)} ) 2>/dev/null ; then + ciphers=( ${$(openssl list -cipher-algorithms | cut -d' ' -f1)} ) + fi + cipher_opts=() + for alg in ${ciphers}; do + cipher_opts=(${cipher_opts} "(${${(l:32:: ::-:)ciphers[@]}// / })-${alg}[use this cipher to encrypt the key]") + done + _arguments -C \ + '-out[output file]:file:_files' \ + '-outform[output format]:format:(PEM DER)' \ + '-pass[output file pass phrase source]:pass phrase source:_pass_phrase_source' \ + $cipher_opts \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '(-algorithm)-paramfile[parameters file]:file:_files' \ + '(-paramfile)-algorithm[the public key algorithm]:algorithm:(EC RSA DSA DH)' \ + '-pkeyopt[public key options]:option\:value: ' \ + '-genparam[generate parameters, not key]' \ + '-text[print the in text]' + # NB: options order may be important! See the manual page. + # TODO: complete pkeyopts + # However: "The precise set of options supported depends on the public key + # algorithm used and its implementation." +} + + +_openssl_genrsa() { + # written for openssl 1.0.1k + _arguments -C \ + '-des[encrypt the generated key with DES in cbc mode]' \ + '-des3[encrypt the generated key with DES in ede cbc mode (168 bit key)]' \ + '-idea[encrypt the generated key with IDEA in cbc mode]' \ + '-seed[encrypt PEM output with cbc seed]' \ + '-aes128[encrypt PEM output with cbc aes]' \ + '-aes192[encrypt PEM output with cbc aes]' \ + '-aes256[encrypt PEM output with cbc aes]' \ + '-camellia128[encrypt PEM output with cbc camellia]' \ + '-camellia192[encrypt PEM output with cbc camellia]' \ + '-camellia256[encrypt PEM output with cbc camellia]' \ + '-out[output the key to file]:file:_files' \ + '-passout[output file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-f4[use F4 (0x10001) for the E value]' \ + '-3[use 3 for the E value]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-rand[files to use for random number input]:file:_rand_files' \ + ':numbits: ' +} + + +_openssl_nseq() { + # written for openssl 1.0.1k + _arguments -C \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-toseq[output NS Sequence file]' +} + + +_openssl_ocsp() { + # written for openssl 1.0.1k + _arguments -C \ + '-out[output filename]:file:_files' \ + '-issuer[issuer certificate]:file:_files' \ + '-cert[certificate to check]:file:_files' \ + '-serial[serial number to check]:serial: ' \ + '-signer[certificate to sign OCSP request with]:file:_files' \ + '-signkey[private key to sign OCSP request with]:file:_files' \ + '-sign_other[additional certificates to include in signed request]:file:_files' \ + "-no_certs[don't include any certificates in signed request]" \ + '-req_text[print text form of request]' \ + '-resp_text[print text form of response]' \ + '-text[print text form of request and response]' \ + '-reqout[write DER encoded OCSP request to "file"]:file:_files' \ + '-respout[write DER encoded OCSP response to "file"]:file:_files' \ + '-reqin[read DER encoded OCSP request from "file"]:file:_files' \ + '-respin[read DER encoded OCSP reponse from "file"]:file:_files' \ + '-nonce[add OCSP nonce to request]' \ + "-no_nonce[don't add OCSP nonce to request]" \ + '-url[OCSP responder URL]:URL: ' \ + '-host[send OCSP request to given host on given port]:host\:port: ' \ + '-path[path to use in OCSP request]' \ + '-CApath[trusted certificates directory]:directory:_files -/' \ + '-CAfile[trusted certificates file]:file:_files' \ + '-VAfile[validator certificates file]:file:_files' \ + '-validity_period[maximum validity discrepancy in seconds]:seconds: ' \ + '-status_age[maximum status age in seconds]:seconds: ' \ + "-noverify[don't verify response at all]" \ + '-verify_other[additional certificates to search for signer]:file:_files' \ + "-trust_other[don't verify additional certificates]" \ + "-no_intern[don't search certificates contained in response for signer]" \ + "-no_signature_verify[don't check signature on response]" \ + "-no_cert_verify[don't check signing certificate]" \ + "-no_chain[don't chain verify response]" \ + "-no_cert_checks[don't do additional checks on signing certificate]" \ + '-port[port to run responder on]:port: ' \ + '-index[certificate status index file]:file:_files' \ + '-CA[CA certificate]:file:_files' \ + '-rsigner[responder certificate to sign responses with]:file:_files' \ + '-rkey[responder key to sign responses with]:file:_files' \ + '-rother[other certificates to include in response]:file:_files' \ + "-resp_no_certs[don't include any certificates in response]" \ + '-nmin[number of minutes before next update]:minutes: ' \ + '-ndays[number of days before next update]:days: ' \ + '-resp_key_id[identify reponse by signing certificate key ID]' \ + '-nrequest[number of requests to accept (default unlimited)]:limit: ' \ + '-dss1[use specified digest in the request]' \ + '-md4[use specified digest in the request]' \ + '-md5[use specified digest in the request]' \ + '-mdc2[use specified digest in the request]' \ + '-ripemd160[use specified digest in the request]' \ + '-ripemd[use specified digest in the request]' \ + '-rmd160[use specified digest in the request]' \ + '-sha1[use specified digest in the request]' \ + '-sha224[use specified digest in the request]' \ + '-sha256[use specified digest in the request]' \ + '-sha384[use specified digest in the request]' \ + '-sha512[use specified digest in the request]' \ + '-sha[use specified digest in the request]' \ + '-ssl2-md5[use specified digest in the request]' \ + '-ssl3-md5[use specified digest in the request]' \ + '-ssl3-sha1[use specified digest in the request]' \ + '-whirlpool[use specified digest in the request]' \ + '-timeout[timeout connection to OCSP responder after n seconds]:seconds: ' +} + + +_openssl_passwd() { + # written for openssl 1.0.1k + _arguments -C \ + '-crypt[standard Unix password algorithm (default)]' \ + '-1[MD5-based password algorithm]' \ + '-apr1[MD5-based password algorithm, Apache variant]' \ + '-salt[use provided salt]:salt: ' \ + '-in[read passwords from file]:file:_files' \ + '-stdin[read passwords from stdin]' \ + '-noverify[never verify when reading password from terminal]' \ + '-quiet[no warnings]' \ + '-table[format output as table]' \ + '-reverse[switch table columns]' \ + '*:password:' +} + + +_openssl_pkcs12() { + # written for openssl 1.0.2d + local algorithms + algorithms=(aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc \ + aes-256-ecb bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc \ + camellia-128-ecb camellia-192-cbc camellia-192-ecb \ + camellia-256-cbc camellia-256-ecb cast-cbc cast5-cbc cast5-cfb \ + cast5-ecb cast5-ofb des-cbc des-cfb des-ecb des-ede des-ede-cbc \ + des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb \ + des-ede3-ofb des-ofb idea-cbc idea-cfb idea-ecb idea-ofb \ + rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 \ + rc4-40 rc5-cbc rc5-cfb rc5-ecb rc5-ofb seed-cbc seed-cfb \ + seed-ecb seed-ofb PBE-MD2-DES PBE-MD5-DES PBE-SHA1-RC2-64 \ + PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES PBE-SHA1-RC4-128 \ + PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 \ + PBE-SHA1-RC2-40) + _arguments -C \ + '-export[output PKCS12 file]' \ + '-chain[add certificate chain]' \ + '-inkey[private key if not infile]:file:_files' \ + '-certfile[add all certs in the specified file]:file:_files' \ + "-CApath[PEM format directory of CA's]:file:_files" \ + "-CAfile[PEM format file of CA's]:file:_files" \ + '-name[use specified friendly name]:name: ' \ + '*-caname[use specified CA friendly name]:name: ' \ + '-in[input filename]:file:_files' \ + '-out[output filename]:file:_files' \ + "-noout[don't output anything, just verify]" \ + "-nomacver[don't verify MAC]" \ + "-nocerts[don't output certificates]" \ + '-clcerts[only output client certificates]' \ + '-cacerts[only output CA certificates]' \ + "-nokeys[don't output private keys]" \ + '-info[give info about PKCS#12 structure]' \ + '-des[encrypt private keys with DES]' \ + '-des3[encrypt private keys with triple DES (default)]' \ + '-idea[encrypt private keys with idea]' \ + '-seed[encrypt private keys with seed]' \ + '-aes128[encrypt PEM output with cbc aes]' \ + '-aes192[encrypt PEM output with cbc aes]' \ + '-aes256[encrypt PEM output with cbc aes]' \ + '-camellia128[encrypt PEM output with cbc camellia]' \ + '-camellia192[encrypt PEM output with cbc camellia]' \ + '-camellia256[encrypt PEM output with cbc camellia]' \ + "-nodes[don't encrypt private keys]" \ + "-noiter[don't use encryption iteration]" \ + "-nomaciter[don't use MAC iteration]" \ + '-maciter[use MAC iteration]' \ + "-nomac[don't generate MAC]" \ + '-twopass[separate MAC, encryption passwords]' \ + '-descert[encrypt PKCS#12 certificates with triple DES (default RC2-40)]' \ + "-certpbe[specify certificate PBE algorithm (default RC2-40)]:alg:(${algorithms})" \ + '-keypbe[specify private key PBE algorithm (default 3DES)]:alg:(${algorithms})' \ + '-macalg[digest algorithm used in MAC (default SHA1)]:alg:_list_message_digest_algorithms' \ + '-keyex[set MS key exchange type]' \ + '-keysig[set MS key signature type]' \ + '-password[set import/export password source]:pass phrase source:_pass_phrase_source' \ + '-passin[input file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-passout[output file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-rand[files to use for random number input]:file:_rand_files' \ + '-CSP[Microsoft CSP name]:name: ' \ + '-LMK[add local machine keyset attribute to private key]' +} + + +_openssl_pkcs7() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-print_certs[print any certs or crl in the input]' \ + '-text[print full details of certificates]' \ + "-noout[don't output encoded data]" \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' +} + + +_openssl_pkcs8() { + # written for openssl 1.0.2d + _arguments -C \ + '-in[input file]:file:_files' \ + '-inform[input format]:format:(PEM DER)' \ + '-passin[input file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-outform[output format]:format:(PEM DER)' \ + '-out[output file]:file:_files' \ + '-passout[output file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-topk8[output PKCS8 file]' \ + '-nooct[use (nonstandard) no octet format]' \ + '-embed[use (nonstandard) embedded DSA parameters format]' \ + '-nsdb[use (nonstandard) DSA Netscape DB format]' \ + '-noiter[use 1 as iteration count]' \ + '-nocrypt[use or expect unencrypted private key]' \ + '-v2[use PKCS#5 v2.0 and given cipher]:alg:(aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx idea idea-cbc idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 rc5 rc5-cbc rc5-cfb rc5-ecb rc5-ofb seed seed-cbc seed-cfb seed-ecb seed-ofb)' \ + '-v2prf[set the PRF algorithm to use with PKCS#5 v2.0]:alg:(hmacWithMD5 hmacWithRMD160 hmacWithSHA1 hmacWithSHA224 hmacWithSHA256 hmacWithSHA384 hmacWithSHA512)' \ + '-v1[use PKCS#5 v1.5 and given cipher]:obj:(PBE-MD2-DES PBE-MD5-DES PBE-SHA1-RC2-64 PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES PBE-SHA1-RC4-128 PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 PBE-SHA1-RC2-40)' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' +} + + +_openssl_pkey() { + # written for openssl 1.0.1k + _arguments -C \ + '-in[input file]:file:_files' \ + '-inform[input format]:format:(PEM DER)' \ + '-passin[input file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-outform[output format]:format:(PEM DER)' \ + '-out[output file]:file:_files' \ + '-passout[output file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' +} + + +_openssl_pkeyparam() { + # written for openssl 1.0.1k + _arguments -C \ + '-in[the input filename to read parameters from]:file:_files' \ + '-out[the output filename to write parameters]:file:_files' \ + '-text[prints out the parameters in plain text in addition to the encoded version]' \ + '-noout[do not output the encoded version of the parameters]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' +} + + +_openssl_pkeyutl() { + # written for openssl 1.0.1k + _arguments -C \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-sigfile[signature file (verify operation only)]:file:_files' \ + '-inkey[input key]:file:_files' \ + '-keyform[private key format]:format:(PEM DER)' \ + '-pubin[input is a public key]' \ + '-certin[input is a certificate carrying a public key]' \ + '-pkeyopt[public key options]:option\:value:_pkeyopts' \ + '-sign[sign with private key]' \ + '-verify[verify with public key]' \ + '-verifyrecover[verify with public key, recover original data]' \ + '-encrypt[encrypt with public key]' \ + '-decrypt[decrypt with private key]' \ + '-derive[derive shared secret]' \ + '-hexdump[hex dump output]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-passin[pass phrase source]:pass phrase source:_pass_phrase_source' +} + + +_openssl_prime() { + # written for openssl 1.0.1k + _arguments -C \ + '-hex[hex]' \ + '-checks[number of checks]:checks: ' \ + ':number:' +} + + +_openssl_rand() { + # written for openssl 1.0.1k + _arguments -C \ + '-out[write to file]:file:_files' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-rand[files to use for random number input]:file:_rand_files' \ + '-base64[base64 encode output]' \ + '-hex[hex encode output]' \ + ':num:' +} + + +_openssl_req() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-text[text form of request]' \ + '-pubkey[output public key]' \ + '-noout[do not output REQ]' \ + '-verify[verify signature on REQ]' \ + '-modulus[RSA modulus]' \ + "-nodes[don't encrypt the output key]" \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + "-subject[output the request's subject]" \ + '-passin[private key pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-key[use the private key contained in the specified file]:file:_files' \ + '-keyform[key file format]:format:(PEM DER)' \ + '-keyout[file to send the key to]:file:_files' \ + '-rand[files to use for random number input]:file:_rand_files' \ + "-newkey rsa\:-[generate a new RSA key of the specified number of bits in size]:bits: " \ + "-newkey dsa\:[generate a new DSA key, parameters taken from CA in the specified file]:file:_files" \ + "-newkey ec\:[generate a new EC key, parameters taken from CA in the specified file]:file:_files" \ + '-md2[digest to sign with]' \ + '-md4[digest to sign with]' \ + '-md5[digest to sign with]' \ + '-mdc2[digest to sign with]' \ + '-sha1[digest to sign with]' \ + '-config[request template file]:file:_files' \ + '-subj[set or modify request subject]:subject: ' \ + '-multivalue-rdn[enable support for multivalued RDNs]' \ + '-new[new request]' \ + '-batch[do not ask anything during request generation]' \ + '-x509[output a x509 structure instead of a certificate request]' \ + '-days[number of days a certificate generated by -x509 is valid for]:days: ' \ + '-set_serial[serial number to use for a certificate generated by -x509]:serial: ' \ + '-newhdr[output "NEW" in the header lines]' \ + "-asn1-kludge[output the 'request' in a format that is wrong but some CA's have been reported as requiring]" \ + '-extensions[specify certificate extension section (override value in config file)]:section: ' \ + '-reqexts[specify request extension section (override value in config file)]:section: ' \ + '-utf8[input characters are UTF8 (default ASCII)]' \ + '*-nameopt[various certificate name options]:options:_nameopts' \ + '*-reqopt[- various request text options]:options:_certopts' + # TODO: complete -extensions and -reqexts +} + + +_openssl_rsa() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER NET)' \ + '-outform[output format]:format:(PEM DER NET)' \ + '-in[input file]:file:_files' \ + '-sgckey[use IIS SGC key format]' \ + '-passin[input file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-out[output file]:file:_files' \ + '-passout[output file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-des[encrypt PEM output with cbc des]' \ + '-des3[encrypt PEM output with ede cbc des using 168 bit key]' \ + '-idea[encrypt PEM output with cbc idea]' \ + '-seed[encrypt PEM output with cbc seed]' \ + '-aes128[encrypt PEM output with cbc aes]' \ + '-aes192[encrypt PEM output with cbc aes]' \ + '-aes256[encrypt PEM output with cbc aes]' \ + '-camellia128[encrypt PEM output with cbc camellia]' \ + '-camellia192[encrypt PEM output with cbc camellia]' \ + '-camellia256[encrypt PEM output with cbc camellia]' \ + '-text[print the key in text]' \ + "-noout[don't print key out]" \ + '-modulus[print the RSA key modulus]' \ + '-check[verify key consistency]' \ + '-pubin[expect a public key in input file]' \ + '-pubout[output a public key]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' +} + + +_openssl_rsautl() { + # written for openssl 1.0.1k + _arguments -C \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-inkey[input key]:file:_files' \ + '-keyform[private key format]:format:(PEM DER)' \ + '-pubin[input is an RSA public]' \ + '-certin[input is a certificate carrying an RSA public key]' \ + '-ssl[use SSL v2 padding]' \ + '-raw[use no padding]' \ + '-pkcs[use PKCS#1 v1.5 padding (default)]' \ + '-oaep[use PKCS#1 OAEP]' \ + '-sign[sign with private key]' \ + '-verify[verify with public key]' \ + '-encrypt[encrypt with public key]' \ + '-decrypt[decrypt with private key]' \ + '-hexdump[hex dump output]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-passin[pass phrase source]:pass phrase source:_pass_phrase_source' +} + + +_openssl_s_client() { + # written for openssl 1.0.1k + _arguments -C \ + '(-6)-4[use IPv4 only]' \ + '(-4)-6[use IPv6 only]' \ + '(-connect)-host[use -connect instead]:host: ' \ + '(-connect)-port[use -connect instead]:port: ' \ + '(-host -port)-connect[who to connect to (default is localhost:4433)]:host\:port: ' \ + '-verify[turn on peer certificate verification]:depth: ' \ + '-verify_return_error[return verification errors]' \ + '-cert[certificate file to use, PEM format assumed]:file:_files' \ + '-certform[certificate format (PEM or DER) PEM default]:format:(PEM DER)' \ + '-key[private key file to use, in cert file if not specified but cert file is]:file:_files' \ + '-keyform[key format (PEM or DER) PEM default]:format:(PEM DER)' \ + '-pass[private key file pass phrase source]:pass phrase source:_pass_phrase_source' \ + "-CApath[PEM format directory of CA's]:directory:_files -/" \ + "-CAfile[PEM format file of CA's]:file:_files" \ + '-reconnect[drop and re-make the connection with the same Session-ID]' \ + '-pause[sleep(1) after each read(2) and write(2) system call]' \ + '-prexit[print session information even on connection failure]' \ + '-showcerts[show all certificates in the chain]' \ + '-debug[extra output]' \ + '-msg[show protocol messages]' \ + '-nbio_test[more ssl protocol testing]' \ + "-state[print the 'ssl' states]" \ + '-nbio[run with non-blocking IO]' \ + '-crlf[convert LF from terminal into CRLF]' \ + '-quiet[no s_client output]' \ + '(-no_ign_eof)-ign_eof[ignore input eof (default when -quiet)]' \ + "(-ign_eof)-no_ign_eof[don't ignore input eof]" \ + '-psk_identity[PSK identity]:identity: ' \ + '-psk[PSK in hex (without 0x)]:key: ' \ + "-srpuser[SRP authentication for 'user']:user: " \ + "-srppass[password for 'user']:password: " \ + '-srp_lateuser[SRP username into second ClientHello message]' \ + '-srp_moregroups[tolerate other than the known g N values]' \ + '-srp_strength[minimal length in bits for N (default 1024)]:int: ' \ + '(-no_ssl2 -ssl3 -tls1 -tls1_1 -tls1_2 -dtls1)-ssl2[just use SSLv2]' \ + '(-no_ssl3 -ssl2 -tls1 -tls1_1 -tls1_2 -dtls1)-ssl3[just use SSLv3]' \ + '(-no_tls1_2 -ssl2 -ssl3 -tls1 -tls1_1 -dtls1)-tls1_2[just use TLSv1.2]' \ + '(-no_tls1_1 -ssl2 -ssl3 -tls1 -tls1_1 -dtls1)-tls1_1[just use TLSv1.1]' \ + '(-no_tls1 -ssl2 -ssl3 -tls1 -tls1_1 -dtls1)-tls1[just use TLSv1.0]' \ + '(-no_dtls1 -ssl2 -ssl3 -tls1 -tls1_1 -tls1_2)-dtls1[just use DTLSv1]' \ + '-fallback_scsv[send TLS_FALLBACK_SCSV]' \ + '-mtu[set the link layer MTU]' \ + '(-tls1_2)-no_tls1_2[turn off TLSv1.2]' \ + '(-tls1_1)-no_tls1_1[turn off TLSv1.1]' \ + '(-tls1)-no_tls1[turn off TLSv1.0]' \ + '(-ssl3)-no_ssl3[turn off SSLv3]' \ + '(-ssl2)-no_ssl2[turn off SSLv2]' \ + '-bugs[switch on all SSL implementation bug workarounds]' \ + "-serverpref[use server's cipher preferences (only SSLv2)]" \ + '-cipher[preferred cipher to use]:cipher suite:_list_ciphers' \ + "-starttls[use the STARTTLS command before starting TLS for those protocols that support it]:protocol:(smtp pop3 imap ftp xmpp)" \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-rand[files to use for random number input]:file:_rand_files' \ + '-sess_out[file to write SSL session to]:file:_files' \ + '-sess_in[file to read SSL session from]:file:_files' \ + '-servername[set TLS extension servername in ClientHello]:host: ' \ + '-tlsextdebug[hex dump of all TLS extensions received]' \ + '-status[request certificate status from server]' \ + '-no_ticket[disable use of RFC4507bis session tickets]' \ + '-nextprotoneg[enable NPN extension, considering named protocols supported (comma-separated list)]:protocols: ' \ + '-legacy_renegotiation[enable use of legacy renegotiation (dangerous)]' \ + '-use_srtp[offer SRTP key management with a colon-separated profile list]:profiles: ' \ + '-keymatexport[export keying material using label]:label: ' \ + '-keymatexportlen[export len bytes of keying material (default 20)]:len: ' +} + + +_openssl_s_server() { + # written for openssl 1.0.1k + _arguments -C \ + '-accept[port to accept on (default is 4433)]:port: ' \ + '-context[set session ID context]:id: ' \ + '-verify[turn on peer certificate verification]:depth: ' \ + '-Verify[turn on peer certificate verification, must have a cert]:depth: ' \ + '-verify_return_error[return verification errors]' \ + '-cert[certificate file to use (default is server.pem)]:file:_files' \ + '-crl_check[check the peer certificate has not been revoked by its CA]' \ + '-crl_check_all[check the peer certificate has not been revoked by its CA or any other CRL in the CA chain]' \ + '-certform[certificate format]:format:(PEM DER)' \ + '-key[Private Key file to use, in cert file if not specified (default is server.pem)]:file:_files' \ + '-keyform[key format]:format:(PEM DER ENGINE)' \ + '-pass[private key file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-dcert[second certificate file to use (usually for DSA)]:file:_files' \ + '-dcertform[second certificate format]:format:(PEM DER)' \ + '-dkey[second private key file to use (usually for DSA)]:file:_files' \ + '-dkeyform[second key format]:format:(PEM DER ENGINE)' \ + '-dpass[second private key file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-dhparam[DH parameter file to use, in cert file if not specified or a default set of parameters is used]:file:_files' \ + '-named_curve[elliptic curve name to use for ephemeral ECDH keys. (default is nistp256)]:named curve:_list_curves' \ + '-nbio[run with non-blocking IO]' \ + '-nbio_test[test with the non-blocking test bio]' \ + '-crlf[convert LF from terminal into CRLF]' \ + '-debug[print more output]' \ + '-msg[show protocol messages]' \ + '-state[print the SSL states]' \ + "-CApath[PEM format directory of CA's]:file:_files -/" \ + "-CAfile[PEM format file of CA's]:file:_files" \ + "-nocert[don't use any certificates (Anon-DH)]" \ + '-cipher[preferred cipher to use]:cipher suite:_list_ciphers' \ + "-serverpref[use server's cipher preferences]" \ + '-quiet[no server output]' \ + '-no_tmp_rsa[do not generate a tmp RSA key]' \ + '-psk_hint[PSK identity hint to use]:hint: ' \ + '-psk[PSK in hex (without 0x)]:PSK: ' \ + '-srpvfile[the verifier file for SRP]:file:_files' \ + '-srpuserseed[a seed string for a default user salt]:seed: ' \ + '-ssl2[just talk SSLv2]' \ + '-ssl3[just talk SSLv3]' \ + '-tls1_2[just talk TLSv1.2]' \ + '-tls1_1[just talk TLSv1.1]' \ + '-tls1[just talk TLSv1]' \ + '-dtls1[just talk DTLSv1]' \ + '-timeout[enable timeouts]' \ + '-mtu[set link layer MTU]' \ + '-chain[read a certificate chain]' \ + '-no_ssl2[just disable SSLv2]' \ + '-no_ssl3[just disable SSLv3]' \ + '-no_tls1[just disable TLSv1]' \ + '-no_tls1_1[just disable TLSv1.1]' \ + '-no_tls1_2[just disable TLSv1.2]' \ + '-no_dhe[disable ephemeral DH]' \ + '-no_ecdhe[disable ephemeral ECDH]' \ + '-bugs[turn on SSL bug compatibility]' \ + '-hack[workaround for early Netscape code]' \ + "-www[respond to a 'GET /' with a status page]" \ + "-WWW[respond to a 'GET / HTTP/1.0' with file ./]" \ + "-HTTP[respond to a 'GET / HTTP/1.0' with file ./ with the assumption it contains a complete HTTP response]" \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-id_prefix[generate SSL/TLS session IDs prefixed by arg]:prefix: ' \ + '-rand[files to use for random number input]:file:_rand_files' \ + '-servername[servername for HostName TLS extension]:hostname: ' \ + '-servername_fatal[on mismatch send fatal alert (default warning alert)]' \ + '-cert2[certificate file to use for servername (default is server2.pem)]:file:_files' \ + '-key2[Private Key file to use for servername, in cert file if not specified (default is server2.pem)]:file:_files' \ + '-tlsextdebug[hex dump of all TLS extensions received]' \ + '-no_ticket[disable use of RFC4507bis session tickets]' \ + '-legacy_renegotiation[enable use of legacy renegotiation (dangerous)]' \ + '-nextprotoneg[set the advertised protocols for the NPN extension (comma-separated list)]:protocol:(http/1.0 http/1.1)' \ + '-use_srtp[offer SRTP key management with a colon-separated profile list]:profiles: ' \ + '-4[use IPv4 only]' \ + '-6[use IPv6 only]' \ + '-keymatexport[export keying material using label]:label: ' \ + '-keymatexportlen[export len bytes of keying material (default 20)]:length: ' \ + '-status[respond to certificate status requests]' \ + '-status_verbose[enable status request verbose printout]' \ + '-status_timeout[status request responder timeout]:seconds: ' \ + '-status_url[status request fallback URL]:URL: ' + # TODO: srtp profiles +} + + +_openssl_s_time() { + # written for openssl 1.0.1k + _arguments -C \ + '-connect[host:port to connect to (default is localhost:4433)]:host\:port: ' \ + '-nbio[run with non-blocking IO]' \ + '-ssl2[just use SSLv2]' \ + '-ssl3[just use SSLv3]' \ + '-bugs[turn on SSL bug compatibility]' \ + '-new[just time new connections]' \ + '-reuse[just time connection reuse]' \ + "-www[retrieve the specified page from the site]:page: " \ + '-time[max number of seconds to collect data, default 30]:seconds: ' \ + '-verify[turn on peer certificate verification]:depth: ' \ + '-cert[certificate file to use, PEM format assumed]:file:_files' \ + '-key[RSA file to use, PEM format assumed, key is in cert file]:file:_files' \ + "-CApath[PEM format directory of CA's]:file:_files -/" \ + "-CAfile[PEM format file of CA's]:file:_files" \ + '-cipher[preferred cipher to use]:cipher suite:_list_ciphers' +} + + +_openssl_sess_id() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format]:format:(PEM DER)' \ + '-outform[output format]:format:(PEM DER)' \ + '-in[input file (default stdin)]:file:_files' \ + '-out[output file (default stdout)]:file:_files' \ + '-text[print ssl session id details]' \ + '-cert[output certificate ]' \ + '-noout[no CRL output]' \ + '-context[set the session ID context]:id: ' +} + + +_openssl_smime() { + # written for openssl 1.0.1k + _arguments -C \ + '-encrypt[encrypt message]' \ + '-decrypt[decrypt encrypted message]' \ + '-sign[sign message]' \ + '-verify[verify signed message]' \ + '-pk7out[output PKCS#7 structure]' \ + '-des3[encrypt with triple DES]' \ + '-des[encrypt with DES]' \ + '-seed[encrypt with SEED]' \ + '-rc2-40[encrypt with RC2-40 (default)]' \ + '-rc2-64[encrypt with RC2-64]' \ + '-rc2-128[encrypt with RC2-128]' \ + '-aes128[encrypt PEM output with cbc aes]' \ + '-aes192[encrypt PEM output with cbc aes]' \ + '-aes256[encrypt PEM output with cbc aes]' \ + '-camellia128[encrypt PEM output with cbc camellia]' \ + '-camellia192[encrypt PEM output with cbc camellia]' \ + '-camellia256[encrypt PEM output with cbc camellia]' \ + "-nointern[don't search certificates in message for signer]" \ + "-nosigs[don't verify message signature]" \ + "-noverify[don't verify signers certificate]" \ + "-nocerts[don't include signers certificate when signing]" \ + '-nodetach[use opaque signing]' \ + "-noattr[don't include any signed attributes]" \ + "-binary[don't translate message to text]" \ + '-certfile[other certificates file]:file:_files' \ + '-signer[signer certificate file]:file:_files' \ + '-recip[recipient certificate file for decryption]:file:_files' \ + '-in[input file]:file:_files' \ + '-inform[input format]:format:(SMIME PEM DER)' \ + '-inkey[input private key (if not signer or recipient)]:file:_files' \ + '-keyform[input private key format]:format:(PEM ENGINE)' \ + '-out[output file]:file:_files' \ + '-outform[output format]:format:(SMIME PEM DER)' \ + '-content[supply or override content for detached signature]:file:_files' \ + '-to[to address]:address: ' \ + '-from[from address]:address: ' \ + '-subject[subject]:subject: ' \ + '-text[include or delete text MIME headers]' \ + '-CApath[trusted certificates directory]:directory:_files -/' \ + '-CAfile[trusted certificates file]:file:_files' \ + "-crl_check[check revocation status of signer's certificate using CRLs]" \ + "-crl_check_all[check revocation status of signer's certificate chain using CRLs]" \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-passin[input file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-rand[files to use for random number input]:file:_rand_files' \ + ':certificate:_files' +} + + +_openssl_speed() { + # written for openssl 1.0.1k + local algorithms + algorithms=(mdc2 md4 md5 hmac sha1 sha256 sha512 whirlpoolrmd160 idea-cbc \ + seed-cbc rc2-cbc rc5-cbc bf-cbc des-cbc des-ede3 aes-128-cbc \ + aes-192-cbc aes-256-cbc aes-128-ige aes-192-ige aes-256-ige \ + camellia-128-cbc camellia-192-cbc camellia-256-cbc rc4 rsa512 \ + rsa1024 rsa2048 rsa4096 dsa512 dsa1024 dsa2048 ecdsap160 \ + ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521 ecdsak163 \ + ecdsak233 ecdsak283 ecdsak409 ecdsak571 ecdsab163 ecdsab233 \ + ecdsab283 ecdsab409 ecdsab571 ecdsa ecdhp160 ecdhp192 ecdhp224 \ + ecdhp256 ecdhp384 ecdhp521 ecdhk163 ecdhk233 ecdhk283 ecdhk409 \ + ecdhk571 ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571 ecdh idea \ + seed rc2 des aes camellia rsa blowfish) + _arguments -C \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-evp[use the specified EVP]:EVP: ' \ + '-decrypt[time decryption instead of encryption (only EVP)]' \ + '-mr[produce machine readable output]' \ + '-multi[run n benchmarks in parallel]:benchmarks: ' \ + "*:algorithm:(${algorithms})" +} + + +_openssl_spkac() { + # written for openssl 1.0.1k + _arguments -C \ + '-in[input file]:file:_files' \ + '-out[output file]:file:_files' \ + '-key[create SPKAC using private key]:file:_files' \ + '-passin[input file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-challenge[challenge string]:string: ' \ + '-spkac[alternative SPKAC name]:spkacname: ' \ + '-spksect[alternative section name]:section: ' \ + "-noout[don't print SPKAC]" \ + '-pubkey[output public key]' \ + '-verify[verify SPKAC signature]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' +} + + +_openssl_srp() { + # written for openssl 1.0.1k + _arguments -C \ + '-verbose[talk a lot while doing things]' \ + '-config[a config file]:file:_files' \ + '-name[the particular srp definition to use]:definition: ' \ + '-srpvfile[the srp verifier file name]:file:_files' \ + '(-modify -delete -list)-add[add an user and srp verifier]' \ + '(-add -delete -list)-modify[modify the srp verifier of an existing user]' \ + '(-add -modify -list)-delete[delete user from verifier file]' \ + '(-add -modify -delete)-list[list user]' \ + '-gn[g and N values to be used for new verifier]:g and N: ' \ + '-userinfo[additional info to be set for user]:userinfo: ' \ + '-passin[input file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-passout[output file pass phrase source]:pass phrase source:_pass_phrase_source' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '-rand[files to use for random number input]:file:_rand_files' \ + ':user:' +} + + +_openssl_ts() { + # written for openssl 1.0.1k + # written for openssl 1.0.2e + local action digests + digests=(-dss1 -md4 -md5 -mdc2 -ripemd160 -sha -sha1 -sha224 -sha256 \ + -sha384 -sha512 -whirlpool) + if [[ "${CURRENT}" -eq 2 ]]; then + # first parameter to ts + _values 'openssl time stamp action' '-query[time stamp request generation]' '-reply[time stamp response generation]' '-verify[time stamp response verification]' + else + action="${words[2]}" + case "${action}" in + -query) + _arguments -C \ + '-rand[files to use for random number input]:file:_rand_files' \ + '-config[config file to use]:file:_files' \ + '(-digest)-data[data file for which the time stamp request needs to be created]:file:_files' \ + '(-data)-digest[digest of the data file]:bytes: ' \ + "($digests)-dss1[use the dss1 message digest algorithm]" \ + "($digests)-md4[to use the md4 message digest algorithm]" \ + "($digests)-md5[to use the md5 message digest algorithm]" \ + "($digests)-mdc2[to use the mdc2 message digest algorithm]" \ + "($digests)-ripemd160[to use the ripemd160 message digest algorithm]" \ + "($digests)-sha[to use the sha message digest algorithm]" \ + "($digests)-sha1[to use the sha1 message digest algorithm]" \ + "($digests)-sha224[to use the sha224 message digest algorithm]" \ + "($digests)-sha256[to use the sha256 message digest algorithm]" \ + "($digests)-sha384[to use the sha384 message digest algorithm]" \ + "($digests)-sha512[to use the sha512 message digest algorithm]" \ + "($digests)-whirlpool[to use the whirlpool message digest algorithm]" \ + '-policy[policy to use for creating the time stamp token]:policy ID: ' \ + '-no_nonce[do not include a nonce in the request]' \ + '-cert[request a signing certificate in the response]' \ + '-in[use the previously created time stamp request]:file:_files' \ + '-out[name of the output file to which the request will be written]:file:_files' \ + '-text[output in human-readable format instead of DER]' + ;; + -reply) + _arguments -C \ + '-config[config file to use]:file:_files' \ + '-section[config file section for response generation]:section: ' \ + '-queryfile[file containing a DER encoded time stamp request]:file:_files' \ + '-passin[private key password source]:pass phrase source:_pass_phrase_source' \ + '-signer[signer certificate of the TSA in PEM format]:file:_files' \ + '-inkey[signer private key in PEM format]:file:_files' \ + '-chain[signer certificate chain in PEM format]:file:_files' \ + '-policy[default policy to use for response]:policy ID: ' \ + '-in[use the previously created time stamp response in DER format]:file:_files' \ + '-token_in[the parameter to -in is a time stamp token in DER format]' \ + '-out[name of the output file to which the response will be written]:file:_files' \ + '-token_out[output a time stamp token instead of a time stamp response]' \ + '-text[output in human-readable format instead of DER]' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' + ;; + -verify) + _arguments -C \ + '(-digest -queryfile)-data[verify response against the specified file]:file:_files' \ + '(-data -queryfile)-digest[verify the response against the specified message digest]:digest bytes: ' \ + '(-data -digest)-queryfile[the original time stamp request in DER format]:file:_files' \ + '-in[time stamp response that needs to be verified in DER format]:file:_files' \ + '-token_in[the parameter to -in is a time stamp token in DER format]' \ + '-CApath[directory containing the trusted CA certificates of the client]:directory:_files -/' \ + '-CAFile[file containing a set of trusted self-signed CA certificates in PEM format]:file:_files' \ + '-untrusted[set of additional untrusted certificates in PEM format which may be needed when building the certificate chain]:file:_files' + ;; + esac + fi +} + + +_openssl_verify() { + # written for openssl 1.0.1k + _arguments -C \ + '-CApath[a directory of trusted certificates]:directory:_files -/' \ + '-CAfile[file A file of trusted certificates]:file:_files' \ + '-purpose[the intended use for the certificate]:purpose:(sslclient sslserver nssslserver smimesign smimeencrypt crlsign any ocsphelper timestampsign)' \ + '*-policy[enable policy processing and add arg to the user-initial-policy-set]:object name or OID: ' \ + '-ignore_critical[ignore critical extensions]' \ + '-attime[perform validation checks using the given time]:timestamp: ' \ + '-check_ss_sig[verify the signature on the self-signed root CA]' \ + "-crlfile[file containing one or more CRL's (in PEM format) to load]:file:_files" \ + '-crl_check[check end entity certificate in CRL]' \ + '-crl_check_all[check all certificates in CRL]' \ + '-policy_check[enables certificate policy processing]' \ + '-explicit_policy[set policy variable require-explicit-policy]' \ + '-inhibit_any[set policy variable inhibit-any-policy]' \ + '-inhibit_map[set policy variable inhibit-policy-mapping]' \ + '-x509_strict[strict X.509-compliance]' \ + '-extended_crl[enable extended CRL features]' \ + '-use_deltas[enable support for delta CRLs]' \ + '-policy_print[print out diagnostics related to policy processing]' \ + '-untrusted[a file of untrusted certificates]:file:_files' \ + '(-*)-help[print out a usage message]' \ + '-issuer_checks[print out diagnostics relating to searches for the issuer certificate of the current certificate]' \ + '-verbose[print extra information about the operations being performed]' \ + '*:certificate:_files' + # TODO: - may be used to separate certificates from options + # TODO: Do not hardcode purposes +} + + +_openssl_version() { + # written for openssl 1.0.1k + _arguments -C \ + '-a[all information, this is the same as setting all the other flags]' \ + '-v[the current OpenSSL version]' \ + '-b[the date the current version of OpenSSL was built]' \ + '-o[option information: various options set when the library was built]' \ + '-f[compilation flags]' \ + '-p[platform setting]' \ + '-d[OPENSSLDIR setting]' +} + + +_openssl_x509() { + # written for openssl 1.0.1k + _arguments -C \ + '-inform[input format - default PEM (one of DER, NET or PEM)]:format:(DER NET PEM)' \ + '-outform[output format - default PEM (one of DER, NET or PEM)]:arg:(DER NET PEM)' \ + '-keyform[private key format - default PEM]:arg:(DER PEM)' \ + '-CAform[CA format - default PEM]:arg:(DER PEM)' \ + '-CAkeyform[CA key format - default PEM]:arg:(DER PEM)' \ + '-in[input file - default stdin]:file:_files' \ + '-out[output file - default stdout]:file:_files' \ + '-passin[private key password source]:pass phrase source:_pass_phrase_source' \ + '-serial[print serial number value]' \ + '-subject_hash[print subject hash value]' \ + '-subject_hash_old[print old-style (MD5) subject hash value]' \ + '-issuer_hash[print issuer hash value]' \ + '-issuer_hash_old[print old-style (MD5) issuer hash value]' \ + '-hash[synonym for -subject_hash]' \ + '-subject[print subject DN]' \ + '-issuer[print issuer DN]' \ + '-email[print email address(es)]' \ + '-startdate[notBefore field]' \ + '-enddate[notAfter field]' \ + '-purpose[print out certificate purposes]' \ + '-dates[both Before and After dates]' \ + '-modulus[print the RSA key modulus]' \ + '-pubkey[output the public key]' \ + '-fingerprint[print the certificate fingerprint]' \ + '-alias[output certificate alias]' \ + '-noout[no certificate output]' \ + '-ocspid[print OCSP hash values for the subject name and public key]' \ + '-ocsp_uri[print OCSP Responder URL(s)]' \ + '-trustout[output a "trusted" certificate]' \ + '-clrtrust[clear all trusted purposes]' \ + '-clrreject[clear all rejected purposes]' \ + '-addtrust[trust certificate for a given purpose]:purpose:(clientAuth serverAuth emailProtection)' \ + '-addreject[reject certificate for a given purpose]:purpose:(clientAuth serverAuth emailProtection)' \ + '-setalias[set certificate alias]:alias: ' \ + '-days[how long till expiry of a signed certificate (default 30 days)]:days: ' \ + '-checkend[check whether the cert expires in the specified time]:seconds: ' \ + '-signkey[self sign cert with arg]:file:_files' \ + '-x509toreq[output a certification request object]' \ + '-req[input is a certificate request, sign and output]' \ + '-CA[set the CA certificate, must be PEM format]:file:_files' \ + '-CAkey[set the CA key, must be PEM format]:file:_files' \ + '-CAcreateserial[create serial number file if it does not exist]' \ + '-CAserial[serial file]:file:_files' \ + '-set_serial[serial number to use]' \ + '-text[print the certificate in text form]' \ + '-C[print out C code forms]' \ + '(-md5 -sha1 -mdc2)-md2[digest to use]' \ + '(-md2 -sha1 -mdc2)-md5[digest to use]' \ + '(-md2 -md5 -mdc2)-sha1[digest to use]' \ + '(-md2 -md5 -sha1)-mdc2[digest to use]' \ + '-extfile[configuration file with X509V3 extensions to add]' \ + '-extensions[section from config file with X509V3 extensions to add]' \ + '-clrext[delete extensions before signing and input certificate]' \ + '*-nameopt[various certificate name options]:options:_nameopts' \ + '-engine[use the specified engine, possibly a hardware device]:engine:_engines' \ + '*-certopt[various certificate text options]:options:_certopts' +} + + +_pass_phrase_source() { + # pass:password + # env:var + # file:pathname + # fd:number + # stdin + _values -S : 'pass phrase source' \ + 'pass[obtain the password from the command line]:password: ' \ + 'env[obtain the password from the environment variable var]:var:_parameters -g "*export*"' \ + 'file[obtain the password from a file]:file:_files' \ + 'fd[read the password from the file descriptor number]:number: ' \ + 'stdin[read the password from standard input]' +} + + +_rand_files() { + # FIXME: this does not allow using multiple files separated by : + # the following would probably work, but how to generate $files? + #_values -s : -S ' ' 'random source file or directory' ${files} + _files +} + + +_engines() { + # openssl engines + local engines + engines=(${${${(@f)"$(_call_program engines openssl engine)"}%)*}#\(}) + _values 'engines' ${engines} +} + + +_list_ciphers() { + # openssl ciphers + local ciphers + # add cipher suites + ciphers=(${(@s/:/)"$(_call_program ciphers openssl ciphers)"}) + # add static cipher strings + ciphers=(${ciphers} \ + 'DEFAULT[the default cipher list]' \ + 'COMPLEMENTOFDEFAULT[the ciphers included in ALL but not enabled by default]' \ + 'ALL[all cipher suites except the eNULL ciphers]' \ + 'COMPLEMENTOFALL[the cipher suites not enabled by ALL]' \ + 'HIGH["high" encryption cipher suites]' \ + 'MEDIUM["medium" encryption cipher suites]' \ + 'LOW["low" encryption cipher suites]' \ + {EXP,EXPORT}'[export encryption algorithms]' \ + 'EXPORT40[40 bit export encryption algorithms]' \ + 'EXPORT56[56 bit export encryption algorithms]' \ + {eNULL,NULL}'[ciphers offering no encryption]' \ + 'aNULL[ciphers offering no authentication]' \ + {kRSA,RSA}'[cipher suites using RSA key exchange]' \ + 'kDHr[cipher suites using DH key agreement signed by CAs with RSA keys]' \ + 'kDHd[cipher suites using DH key agreement signed by CAs with DSS keys]' \ + 'kDH[cipher suites using DH key agreement]' \ + {kDHE,kEDH}'[cipher suites using ephemeral DH key agreement, including anonymous cipher suites]' \ + {DHE,EDH}'[cipher suites using authenticated ephemeral DH key agreement]' \ + 'ADH[anonymous DH cipher suites, not including anonymous ECDH ciphers]' \ + 'DH[cipher suites using DH, including anonymous DH, ephemeral DH and fixed DH]' \ + 'kECDHr[cipher suites using fixed ECDH key agreement signed by CAs with RSA keys]' \ + 'kECDHe[cipher suites using fixed ECDH key agreement signed by CAs with ECDSA keys]' \ + 'kECDH[cipher suites using fixed ECDH key agreement]' \ + {kECDHE,kEECDH}'[cipher suites using ephemeral ECDH key agreement, including anonymous cipher suites]' \ + {ECDHE,kEECDH}'[cipher suites using authenticated ephemeral ECDH key agreement]' \ + 'AECDH[anonymous Elliptic Curve Diffie Hellman cipher suites]' \ + 'ECDH[cipher suites using ECDH key exchange, including anonymous, ephemeral and fixed ECDH]' \ + 'aRSA[cipher suites using RSA authentication]' \ + {aDSS,DSS}'[cipher suites using DSS authentication]' \ + 'aDH[cipher suites effectively using DH authentication]' \ + 'aECDH[cipher suites effectively using ECDH authentication]' \ + {aECDSA,ECDSA}'[cipher suites using ECDSA authentication]' \ + 'TLSv1.2[TLSv1.2 cipher suites]' \ + 'TLSv1[TLSv1.0 cipher suites]' \ + 'SSLv3[SSLv3.0 cipher suites]' \ + 'SSLv2[SSLv2.0 cipher suites]' \ + 'AES128[cipher suites using 128 bit AES]' \ + 'AES256[cipher suites using 256 bit AES]' \ + 'AES[cipher suites using AES]' \ + 'AESGCM[AES in Galois Counter Mode (GCM)]' \ + 'CAMELLIA128[cipher suites using 128 bit CAMELLIA]' \ + 'CAMELLIA256[cipher suites using 256 bit CAMELLIA]' \ + 'CAMELLIA[cipher suites using CAMELLIA]' \ + '3DES[cipher suites using triple DES]' \ + 'DES[cipher suites using DES (not triple DES)]' \ + 'RC4[cipher suites using RC4]' \ + 'RC2[cipher suites using RC2]' \ + 'IDEA[cipher suites using IDEA]' \ + 'SEED[cipher suites using SEED]' \ + 'MD5[cipher suites using MD5]' \ + {SHA1,SHA}'[cipher suites using SHA1]' \ + 'SHA256[cipher suites using SHA256]' \ + 'SHA384[cipher suites using SHA284]' \ + 'aGOST[cipher suites using GOST R 34.10 for authentication]' \ + 'aGOST01[cipher suites using GOST R 34.10-2001 authentication]' \ + 'aGOST94[cipher suites using GOST R 34.10-94 authentication]' \ + 'kGOST[cipher suites, using VKO 34.10 key exchange]' \ + 'GOST94[cipher suites, using HMAC based on GOST R 34.11-94]' \ + 'GOST89MAC[cipher suites using GOST 28147-89 MAC instead of HMAC]' \ + 'PSK[cipher suites using pre-shared keys (PSK)]' \ + 'SUITEB128[suite B mode operation using 128 or 192 bit level of security]' \ + 'SUITEB128ONLY[suite B mode operation using 128 bit level of security]' \ + 'SUITEB192[suite B mode operation using 192 bit level of security]' \ + ) + # FIXME: support !, + and - before each cipher suite + _values -s : 'cipher suite' ${ciphers} +} + + +_list_curves() { + # openssl ecparam -list_curves + local curves not_curves + curves="$(_call_program list_curves openssl ecparam -list_curves)" + # identify lines that do not contain curve names but only descriptions + not_curves=(${${(f)curves[@]}:#*:*}) + # remove non-curve lines, trailing descriptions and leading spaces + curves=(${${${${(f)curves[@]}:|not_curves}%:*}##* }) + _values 'named curves' ${curves} +} + + +_list_message_digest_algorithms() { + # openssl list-message-digest-algorithms + local algorithms + algorithms=(${${(@f)"$(_call_program message_digest_algorithms openssl list-message-digest-algorithms)"}%% *}) + _values 'message digest algorithms' ${algorithms} +} + + +_nameopts() { + _values -s ',' -w 'nameopts' \ + '(-compat compat)'{-compat,compat}'[use the old format. This is equivalent to specifying no name options at all]' \ + '(-RFC2253 RFC2253)'{-RFC2253,RFC2253}'[displays names compatible with RFC2253 equivalent to esc_2253, esc_ctrl, esc_msb, utf8, dump_nostr, dump_unknown, dump_der, sep_comma_plus, dn_rev and sname]' \ + '(-oneline oneline)'{-oneline,oneline}'[a oneline format which is more readable than RFC2253. Equivalent to esc_2253, esc_ctrl, esc_msb, utf8, dump_nostr, dump_der, use_quote, sep_comma_plus_space, space_eq and sname options]' \ + '(-multiline multiline)'{-multiline,multiline}'[a multiline format. Equivalent to esc_ctrl, esc_msb, sep_multiline, space_eq, lname and align]' \ + '(-esc_2253 esc_2253)'{-esc_2253,esc_2253}'[escape the "special" characters required by RFC2253 in a field]' \ + '(-esc_ctrl esc_ctrl)'{-esc_ctrl,esc_ctrl}'[escape control characters]' \ + '(-esc_msb esc_msb)'{-esc_msb,esc_msb}'[escape characters with the MSB set]' \ + '(-use_quote use_quote)'{-use_quote,use_quote}'[escapes some characters by surrounding the whole string with " characters]' \ + '(-utf8 utf8)'{-utf8,utf8}'[convert all strings to UTF8 format first]' \ + '(-ignore_type ignore_type)'{-ignore_type,ignore_type}'[this option does not attempt to interpret multibyte characters in any way]' \ + '(-show_type show_type)'{-show_type,show_type}'[show the type of the ASN1 character string]' \ + '(-dump_der dump_der)'{-dump_der,dump_der}'[use DER encoding when hexdumping fields]' \ + '(-dump_nostr dump_nostr)'{-dump_nostr,dump_nostr}'[dump non character string types]' \ + '(-dump_all dump_all)'{-dump_all,dump_all}'[dump all fields]' \ + '(-dump_unknown dump_unknown)'{-dump_unknown,dump_unknown}'[dump any field whose OID is not recognised by OpenSSL]' \ + '(-sep_comma_plus sep_comma_plus)'{-sep_comma_plus,sep_comma_plus}'[these options determine the field separators]' \ + '(-sep_comma_plus_space sep_comma_plus_space)'{-sep_comma_plus_space,sep_comma_plus_space}'[these options determine the field separators]' \ + '(-sep_semi_plus_space sep_semi_plus_space)'{-sep_semi_plus_space,sep_semi_plus_space}'[these options determine the field separators]' \ + '(-sep_multiline sep_multiline)'{-sep_multiline,sep_multiline}'[these options determine the field separators]' \ + '(-dn_rev dn_rev)'{-dn_rev,dn_rev}'[reverse the fields of the DN]' \ + '(-nofname nofname)'{-nofname,nofname}'[do not display field names]' \ + '(-sname sname)'{-sname,sname}'[display field names in short form]' \ + '(-lname lname)'{-lname,lname}'[display field names in long form]' \ + '(-oid oid)'{-oid,oid}'[display field names in numerical form]' \ + '(-align align)'{-align,align}'[align field values for a more readable output. Only usable with sep_multiline]' \ + '(-space_eq space_eq)'{-space_eq,space_eq}'[places spaces around the = character which follows the field name]' +} + + +_certopts() { + _values -s ',' -w 'certopts' \ + 'compatible[use the old format. This is equivalent to specifying no output options at all]' \ + "no_header[don't print header information: that is the lines saying \"Certificate\" and \"Data\"]" \ + "no_version[don't print out the version number]" \ + "no_serial[don't print out the serial number]" \ + "no_signame[don't print out the signature algorithm used]" \ + "no_validity[don't print the validity, that is the notBefore and notAfter fields]" \ + "no_subject[don't print out the subject name]" \ + "no_issuer[don't print out the issuer name]" \ + "no_pubkey[don't print out the public key]" \ + "no_sigdump[don't give a hexadecimal dump of the certificate signature]" \ + "no_aux[don't print out certificate trust information]" \ + "no_extensions[don't print out any X509V3 extensions]" \ + 'ext_default[retain default extension behaviour: attempt to print out unsupported certificate extensions]' \ + 'ext_error[print an error message for unsupported certificate extensions]' \ + 'ext_parse[ASN1 parse unsupported extensions]' \ + 'ext_dump[hex dump unsupported extensions]' \ + '(no_issuer no_pubkey no_header no_version no_sigdump no_signame)ca_default[the value used by the ca utility, equivalent to no_issuer, no_pubkey, no_header, no_version, no_sigdump and no_signame]' +} + + +_openssl "$@" + +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_optirun b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_optirun new file mode 100644 index 00000000..ebc0e005 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_optirun @@ -0,0 +1,75 @@ +#compdef optirun +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for the optirun command from bumblebee +# (https://github.com/Bumblebee-Project/Bumblebee). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Christophe-Marie Duquesne +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line +typeset -A opt_args + +local -a arguments + +arguments=( + '--version[output version information]' + '(-h --help)'{-h,--help}'[show help]' + '(-c --vgl-compress)'{-c,--vgl-compress}'[image transport method]:method:(proxy jpeg rgb xb yuv)' + '--failsafe[run a program even if the nvidia card is unavailable]:boolean:(true false)' + '--no-failsafe[do not run a program if the nvidia card is unavailable]' + '--vgl-options[options to be passed to vglrun (example: +tr)]' + '(-q --quiet --silent)'{-q,--quiet,--silent}'[suppress all logging messages]' + '(-v --verbose)'{-v,--verbose}'[increase the verbosity level of log messages]' + '--debug[set the verbosity level to the maximum]' + '(-b --bridge)'{-b,--bridge}'[specify bridge library to use: VirtualGL, Primus or auto]:method:(auto primus virtualgl none)' + '(-d --display)'{-d,--display}'[the X display number to use]' + '(-C --config)'{-C,--config}'[retrieve settings for Bumblebee from FILE]:file:_files' + '(-l --ldpath)'{-l,--ldpath}'[PATH the libraries like libGL.so are searched in]:file:_files' + '--primus-ldpath[a colon-separated list of paths which are searched for the primus libGL.so.1]:file:_files' + '(-s --socket)'{-s,--socket}'[use FILE for communication with the daemon]:file:_files' + '--no-xorg[do not start secondary X server (implies -b none)]' + '*::arguments: _normal' +) + +_arguments $arguments + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_patool b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_patool new file mode 100644 index 00000000..d132a6c2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_patool @@ -0,0 +1,95 @@ +#compdef patool +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for patool (https://github.com/wummel/patool). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Sergei Eremenko (https://github.com/SmartFinn) +# +# ------------------------------------------------------------------------------ + +local state line ret=1 + +_arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(--non-interactive)'--non-interactive'[do not query for user input]' \ + '(-v --verbose)'{-v,--verbose}'[verbose operation]' \ + '1:cmd:->cmds' \ + '*:arg:->args' && ret=0 + +case $state in + (cmds) + local -a cmds + + cmds=( + 'create:create an archive from given files' + 'diff:show differences between two archives' + 'extract:extract files from given archives' + 'formats:show all supported archive formats' + 'list:list files in archives' + 'repack:repackage archive to a different format' + 'recompress:recompress an archive to smaller size' + 'search:search in archive contents for given pattern' + 'test:test the given archives' + ) + + _describe -t commands 'patool commands' cmds && ret=0 + ;; + (args) + case $line[1] in + (extract) + _arguments \ + '--outdir[extract to the given output directory]:select directory:_files -/' \ + '*:files:_files' && ret=0 + ;; + (formats) + _message 'no more arguments' && ret=0 + ;; + (search) + _arguments \ + '2:search pattern:' \ + '*:files:_files' && ret=0 + ;; + (*) + _arguments \ + '*:files:_files' && ret=0 + ;; + esac + ;; +esac + +return $ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_perf b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_perf new file mode 100644 index 00000000..26154f21 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_perf @@ -0,0 +1,1030 @@ +#compdef perf +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Linux performance counters 3.3 (perf.wiki.kernel.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# * Shohei YOSHIDA +# +# ------------------------------------------------------------------------------ + +_perf_events() { + local -a events=(${(@f)$(perf list | sed -n -e 's/^ \([^ =]*\).*$/\1/p')}) + _values -s ',' 'events' $events +} + +_perf_top_fields() { + local fields=(overhead overhead_sys overhead_us overhead_children sample period) + _values -s ',' 'fields' $fields +} + +_perf_pids() { + local -a pids=(/proc/[1-9]*(:t)) + _values -s ',' 'pids' $pids +} + +_perf_stat_command() { + _alternative "_command_names -e" "subcommand:command:(record report)" +} + +_perf_c2c_coalesce() { + local columns=(tid pid iaddr dso) + _values -s ',' 'columns' $columns +} + +_perf_mem_type() { + local types=(load store) + _values -s ',' 'type' $types +} + +_perf_test_list() { + # TODO show test detail + local -a test_list=(${(@f)$(perf test list 2>&1 | sed -n -e 's/^ *\([^ ]*\): \(.*\)$/\1/p')}) + _values -s ',' 'test' $test_list +} + +_perf_report_sort_keys() { + local -a sort_keys=( + "comm" "pid" "dso" "dso_size" "symbol" "symbol_size" "parent" "cpu" + "socket" "srcline" "srcfile" "weight" "local_weight" "cgroup_id" + "transaction" "overhead" "overhead_sys" "overhead_us" "overhead_guest_sys" + "overhead_guest_us" "sample" "period" "time" "dso_from" "dso_to" "symbol_from" + "symbol_to" "srcline_from" "srcline_to" "mispredict" "in_tx" "abort" "cycles" + "symbol_daddr" "dso_daddr" "locked" "tlb" "mem" "snoop" "dcacheline" + "phys_daddr" "trace" "trace_fields" + ) + + _values -s ',' 'keys' $sort_keys +} + +_perf_branch_filter() { + local -a filters=( + 'any:any type of branches' + 'any_call:any function call or system call' + 'any_ret:any function return or system call return' + 'ind_call:any indirect branch' + 'call:direct calls, including far (to/from kernel) calls' + 'u:only when the branch target is at the user level' + 'k:only when the branch target is in the kernel' + 'hv:only when the target is at the hypervisor level' + 'in_tx:only when the target is in a hardware transaction' + 'no_tx:only when the target is not in a hardware transaction' + 'abort_tx:only when the target is a hardware transaction abort' + 'cond:conditional branches' + 'save_type:save branch type during sampling in case binary is not available later' + ) + _describe -t filters 'branch filter' filters +} + +_perf_clock_id() { + local clocks=(CLOCK_MONOTONIC CLOCK_MONOTONIC_RAW CLOCK_BOOTTIME CLOCK_REALTIME CLOCK_TAI) + _values 'clocks' $clocks +} + +_perf_lock_subcommand() { + local -a subcmds=( + 'record:records lock events' + 'report:reports statistical data' + 'script:shows raw lock events' + 'info:shows metadata like threads or addresses of lock instances' + ) + _describe -t subcmds 'lock subcommand ' subcmds +} + +_perf_trace_subcommand() { + _alternative "_command_names -e" "subcommand:command:(record)" +} + +_perf_kmem_sort_keys() { + local -a keys=(ptr callsite bytes hit pingpong frag page order migtype gfp) + + for ((i = 1; i < CURRENT; i++)) + do + if [[ $words[$i] == "--slab" ]]; then + keys=(ptr callsite bytes hit pingpong frag) + break + fi + if [[ $words[$i] == "--page" ]]; then + keys=(page callsite hit order migtype gfp) + break + fi + done + + _values -s ',' 'key' $keys +} + +_perf_sched_subcommand() { + local -a subcmds=( + 'record:record the scheduling events' + 'latency:report the per task scheduling latencies' + 'script:see a detailed trace' + 'replay:simulate the workload' + 'map:print a textual context-switching outline' + 'timehist:provides an analysis of scheduling events' + ) + _describe -t subcmds 'lock subcommand ' subcmds +} + +_perf_script_fields() { + local -a fields=( + "comm" "tid" "pid" "time" "cpu" "event" "trace" "ip" "sym" "dso" + "addr" "symoff" "srcline" "period" "iregs" "uregs" "brstack" + "brstacksym" "flags" "bpf-output" "brstackinsn" "brstackoff" + "callindent" "insn" "insnlen" "synth" "phys_addr" "metric" + "misc" "srccode" "ipc" + ) + + compset -P '(hw|sw|trace):' + + _values -s ',' 'fields' $fields +} + +_perf() { + local context curcontext="$curcontext" state line + typeset -A opt_args + + local ret=1 + + _arguments -C \ + '(- : *)--version[show version number and exit]' \ + '(- : *)--help[show help]: :_perf_cmds' \ + '1: :_perf_cmds' \ + '*::arg:->args' \ + && ret=0 + + case $state in + (args) + curcontext="${curcontext%:*:*}:perf-cmd-$words[1]:" + case $line[1] in + (annotate) + # TODO Complete CPU list + # TODO Complete disassembler style + _arguments \ + '(- : *)'{-a,--all}'[prints all the available commands on the standard output]' \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-d --dsos)'{-d,--dsos=}'[only consider symbols in these dsos]:dso list' \ + '(-s --symbol)'{-s,--symbol=}'[symbol to annotate]:symbol' \ + '(-f --force)'{-f,--force}'[do not complain, do it]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '(-k --vmlinux)'{-k,--vmlinux=}'[vmlinux pathname]: :_files' \ + '(-m --modules)'{-m,--modules}'[load module symbols]' \ + '(-l --print-line)'{-l,--print-line}'[print matching source lines]' \ + '(-P --full-paths)'{-P,--full-paths}'[don'\''t shorten the displayed pathnames]' \ + '--stdio[use the stdio interface]' \ + '--tui[use the TUI interface]' \ + '(-C --cpu)'{-C,--cpu}'[only report samples for the list of CPUs provided]:CPU list' \ + '--asm-raw[show raw instruction encoding of assembly instructions]' \ + '(--no-source)--source[interleave source code with assembly code]' \ + '(--source)--no-source[don'\''t interleave source code with assembly code]' \ + '--symfs=[look for files with symbols relative to this directory]: :_files -/' \ + '(-M --disassembler-style)'{-M,--disassembler-style=}'[set disassembler style for objdump]:disassembler style' \ + '1::symbol name' \ + && ret=0 + ;; + (archive) + _arguments \ + '1: :_files' \ + && ret=0 + ;; + (bench) + _arguments \ + '(-r --repeat)'{-r,--repeat=}'[specify amount of times to repeat the run]' \ + '(-f --format)'{-f,--format=}'[specify format style]: :(default simple)' \ + '1:subsystem:(sched mem numa futex epoll all)' \ + '*:: :->bench_subsystem' \ + && ret=0 + ;; + (buildid-cache) + _arguments \ + '(-a --add)'{-a,--add=}'[add specified file to the cache]: :_files' \ + '(-f --force)'{-f,--force}'[do not complain, do it]' \ + '(-k --kcore)'{-k,--kcore=}'[add specified kcore file to core]:kcore:_files' \ + '(-r --remove)'{-r,--remove=}'[remove specified file from the cache]: :_files' \ + '(-p,--purge)'{-p,--purge=}'[purge all cached binaries including older caches which have specified path]: :_files' \ + '(-P,--purge-all)'{-P,--purge-all}'[purge all cached binaries]' \ + '(-M,--missing)'{-M,--missing=}'[list missing build ids in the cache for the specified file]: :_files' \ + '(-u,--update)'{-u,--update=}'[update specified file of the cache]: :_files' \ + '(-l,--list)'{-l,--list}'[list all valid binaries from cache]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '--target-ns=[obtain mount namespace information from the target pid]: :_pids' \ + && ret=0 + ;; + (buildid-list) + _arguments \ + '(-H --with-hits)'{-H,--with-hits}'[show only DSOs with hits]' \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-f --force)'{-f,--force}'[don'\''t do ownership validation]' \ + '(-k --kernel)'{-k,--kernel}'[show running kernel build id]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + && ret=0 + ;; + (c2c) + _arguments \ + '1:subcmd:(record report)' \ + '*:: :->c2c_args' + ;; + (config) + _arguments \ + '(-l --list)'{-l,--list}'[show current config variables for all sections]' \ + '--user[read or write user config]' \ + '--system[read or write system config]' \ + && ret=0 + ;; + (data) + _arguments \ + '1:command:((convert))' \ + '*:: :->data_args' \ + && ret=0 + ;; + (diff) + _arguments \ + '(-M --displacement)'{-M,--displacement}'[show position displacement relative to baseline]' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '(-m --modules)'{-m,--modules}'[load module symbols]' \ + '(-d --dsos)'{-d,--dsos=}'[only consider symbols in these dsos]:dso list' \ + '(-C --comms)'{-C,--comms=}'[only consider symbols in these comms]:comm list' \ + '(-S --symbols)'{-S,--symbols=}'[only consider these symbols]:symbol list' \ + '(-s --sort)'{-s,--sort=}'[sort by key(s)]: :_values -s , key pid comm dso symbol' \ + '(-t --field-separator)'{-t,--field-separator=}'[use a special separator character and don'\''t pad with spaces]:separator' \ + '(-v --verbose)'{-v,--verbose}'[be verbose, for instance, show the raw counts in addition to the diff]' \ + '(-f --force)'{-f,--force}'[don'\''t complain, do it]' \ + '--symfs=[look for files with symbols relative to this directory]: :_files -/' \ + '1:old file:_files' \ + '2:new file:_files' \ + && ret=0 + ;; + (evlist) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + && ret=0 + ;; + (ftrace) + _arguments \ + '(-t --tracer)'{-t,--tracer=}'[tracer to use]:tracer:(function_tracer function)' \ + '(-v --verbose)'{-v,--verbose=}'[verbosity level]:level:' \ + '(-p --pid)'{-p,--pid=}'[trace on existing process ID]:pids:_perf_pids' \ + '(-a --all-cpus)'{-a,--all-cpus}'[force system-wide collection]' \ + '(-C --cpu)'{-C,--cpu=}'[only trace for the list of CPUs]:cpu_list:' \ + \*{-T,--trace-funcs=}'[only trace functions given by the argument]:func:' \ + \*{-N,--notrace-funcs=}'[do not trace functions given by the argument]:func:' \ + \*{-G,--graph-funcs=}'[set graph filter on the given function]:func:' \ + \*{-g,--nograph-funcs=}'[set graph notrace filter on the given function]:func:' \ + '(-D,--graph-depth)'{-D,--graph-depth=}'[set max depth for function graph tracer]' \ + && ret=0 + ;; + (inject) + _arguments \ + '(-b --build-ids)'{-b,--build-ids=}'[inject build-ids into the output stream]:build-id list' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-i --input)'{-i,--input=}'[input file name]:input:_files' \ + '(-o --output)'{-o,--output=}'[output file name]:output:_files' \ + '(-s --sched-stat)'{-s,--sched-stat}'[merge sched_stat and sched_switch for getting events]' \ + '--kallsyms=[kallsyms file]:kallsyms:_files' \ + '--itrace=[decode instruction tracing data]' \ + '--strip[use with --itrace to strip out non-synthesized events]' \ + '(-j --jit)'{-j,--jit}'[process jitdump files]' \ + '(-f --force)'{-f,--force}'[do not complain, do it]' \ + && ret=0 + ;; + (kallsyms) + _arguments \ + '(-v --verbose)'{-v,--verbose=}'[increase verbosity level]' \ + && ret=0 + ;; + (kmem) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-f --force)'{-f,--force}'[dont do ownership validation]' \ + '--caller[show per-callsite statistics]' \ + '--alloc[show per-allocation statistics]' \ + '(-s --sort)'{-s,--sort=}'[sort by output]: :_perf_kmem_sort_keys' \ + '(-n --lines)'{-n,--lines}'[print n lines only]:number' \ + '--raw-ip[print raw ip instead of symbol]' \ + '--slab[analyze slab allocator events]' \ + '--page[analyze page allocator events]' \ + '--live[show live page stat]' \ + '--time=[only analyze samples within given time window]:time_window:' \ + '1:command:((record\:record\ the\ kmem\ events\ of\ an\ arbitrary\ workload stat\:report\ kernel\ memory\ statistics))' \ + '*:: :->kmem_args' \ + && ret=0 + ;; + (kvm) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-o --output)'{-o,--output=}'[output file name]: :_files' \ + '--host=[collect host side performance profile]:host' \ + '--guest=[collect guest side performance profile]:guest' \ + '--guestmount=[guest os root file system mount directory]: :_files -/' \ + '--guestkallsyms=[guest os /proc/kallsyms file copy]: :_files' \ + '--guestmodules=[guest os /proc/modules file copy]: :_files' \ + '--guestvmlinux=[guest os kernel vmlinux]: :_files' \ + '1:command:((top record report diff buildid-list))' \ + && ret=0 + ;; + (list) + _arguments \ + '1:event type:((hw\:hardware\ events hardware\:hardware\ events sw\:software\ events software\:software\ events cache\:cache\ events hwcache\:cache\ events tracepoint\:tracepoint\ events))' \ + && ret=0 + ;; + (lock) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '(-f --force)'{-f,--force}'[dont complain do it]' \ + '1:command:_perf_lock_subcommand' \ + '*:: :->lock_args' \ + && ret=0 + ;; + (mem) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]:file:_files' \ + '(-f --force)'{-f,--force}'[do not ownership validation]' \ + '(-t --type)'{-t,--type=}'[select the memory operation type]:type:_perf_mem_type' \ + '(-D --dump-raw-samples)'{-D,--dump-raw-trace}'[dump the raw decoded samples]' \ + '(-x --field-separator)'{-x,--field-separator=}'[specify the field separator used when raw samples]:separator:' \ + '(-C --cpu)'{-C,--cpu=}'[monitor only on the list of CPUs provided]:cpus:' \ + '(-U --hide-unresolved)'{-U,--hide-unresolved}'[only display entries resolved to a symbol]' \ + '(-p --phys-data)'{-p,--phys-data}'[record/report sample phisical addresses]' \ + '1:command:(record report)' \ + '*::arg:->mem_args' \ + && ret=0 + ;; + (probe) + _arguments \ + '(-k --vmlinux)'{-k,--vmlinux=}'[specify vmlinux path which has debuginfo]:path:_files' \ + '(-m --module)'{-m,--module=}'[specify module name]:modname_or_path:_files' \ + '(-s --source)'{-s,--source=}'[specify path to kernel source]:path:_files -/' \ + '(-v --verbose -q --quiet)'{-v,--verbose}'[be more verbose]' \ + '(-q --quiet -v --verbose)'{-q,--quiet}'[be quiet]' \ + \*{-a,--add=}'[define a probe event]:probe:' \ + \*{-d,--del=}'[delete probe events]:probe:' \ + '(-l --list)'{-l,--list=}'[list up current probe events]:event:' \ + '(-L --line)'{-L,--line=}'[show source code lines which can be probed]' \ + \*{-V,--vars=}'[show available local variables at given probe point]:probe:' \ + '--externs[show external defined variables]' \ + '--no-inlines[search only for non-inlined functions]' \ + \*{-F,--funcs=}'[show available functions in given module or kernel]:filter:' \ + \*{-D,--definition=}'[show trace-event definition]:probe:' \ + '*--filter=[set filter]:filter:' \ + '(-f --force)'{-f,--force}'[forcibly add events with existing name]' \ + '(-n --dry-run)'{-n,--dry-run}'[dry run]' \ + '--cache[cache the probes]' \ + '--max-probes=[set the maximum number of probe points for an event]:number:' \ + '--target-ns=[obtain mount namespace information from the target pid]:pid:_pids' \ + '(-x --exec)'{-x,--exec=}'[specify path to the executable of shared library]:path:_files' \ + '--demangle-kernel[demangle kernel symbols]' \ + && ret=0 + ;; + (record) + _arguments \ + \*{-e,--events=}'[select the PMU event]:event:_perf_events' \ + '*--filter=[event filter]:filter:' \ + '--exclude-perf[do not record events issued by perf itself]' \ + '(-a --all-cpus)'{-a,--all-cpus}'[system-wide collection from all CPUs]' \ + '(-p --pid)'{-p,--pid=}'[record events on existing process ID]:pids:_perf_pids' \ + '(-t --tid)'{-t,--tid=}'[record events on existing thread ID]:tids:' \ + '(-u --uid)'{-u,--uid=}'[record events in threads owned by uid]:uid:' \ + '(-r --realtime)'{-r,--realtime=}'[collect data with this RT SCHED_FIFO priority]:priority:' \ + '--no-buffering[collect data without buffering]' \ + '(-c --count)'{-c,--count=}'[event period to sample]:period:' \ + '(-o --output)'{-o,--output=}'[output file name]:out_file:_files' \ + '(-i --no-inherit)'{-i,--no-inherit}'[child tasks do not inherit counters]' \ + '(-F --freq)'{-F,--freq=}'[profile at this frequency]:freq:(max)' \ + '--string-freq[fail if the specified frequency cannot be used]' \ + '(-m --mmap-pages)'{-m,--mmap-pages=}'[number of mmap data pages]:pages:' \ + '--group[put all events in a single event group]' \ + '-g[enables call-graph recording]' \ + '--call-graph=[setup and enable call-graph recording]:method:(fp dwarf lbr)' \ + '(-q --quiet)'{-q,--quiet}'[do not print any message]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-s --stat)'{-s,--stat}'[record per-thread event counts]' \ + '(-d --data)'{-d,--data}'[record the sample virtual addresses]' \ + '--phys-data[record the sample physical addresses]' \ + '(-T --timestamp)'{-T,--timestamp}'[record the sample timestamps]' \ + '(-P --period)'{-P,--period}'[record the sample period]' \ + '--sample-cpu[record the sample cpu]' \ + '(-n --no-samples)'{-n,--no-samples}'[do not sample]' \ + '(-C --cpu)'{-C,--cpu=}'[collect samples only on the list of CPUs provided]:cpus:' \ + '(-B --no-buildid)'{-B,--no-buildid}'[do not save the build ids of binaries in the perf.data files]' \ + '(-N --no-buildid-cache)'{-N,--no-buildid-cache}'[do not update the buildid cache]' \ + \*{-G,--cgroup=}'[monitor only in the container (cgroup) called "name"]:name:' \ + '(-b --branch-any)'{-b,--branch-any}'[enable taken branch stack sampling]' \ + '(-j --branch-filter)'{-j,--branch-filter=}'[specify stack sampling filter]:filter:_perf_branch_filter' \ + '--weight[enable weightened sampling]' \ + '--namespaces[record events of type PREF_RECORD_NAMESPACES]' \ + '--transaction[record transaction flags for transaction related events]' \ + '(-D --delay)'{-D,--delay=}'[wait msecs before measuring]' \ + '(-I,--intr-regs)'{-I,--intr-regs=}'[capture machine state (registers) at interrupt]:registers:' \ + '--user-regs=[capture user registers at sample time]:registers:' \ + '--running-time[record running and enabled time for read events]' \ + '(-k --clockid)'{-k,--clockid=}'[sets the clockid to use for time fields]:clock_id:_perf_clock_id' \ + '--proc-map-timeout=[time out(ms) limit of processing /proc/XXX/mmap]:msecs:' \ + '--switch-events[record context switch events]' \ + '--clang-path=[path to clang binary to use compiling BPF scripts]:clang_path:_files' \ + '--clang-opt=[option passed to clang when compiling BPF scripts]:clang_opt:' \ + '--vmlinux=[specify vmlinux path which has debuginfo]:vmlinux_path:_files' \ + '--buildid-all[record build-id of all DSOs]' \ + '--aio=[use "n" control blocks in asynchronous trace writing mode]:number:' \ + '--affinity=[set affinity mask by mode value]' \ + '--mmap-flush=[specify minimal number of bytes]:bytes:' \ + '(-z --compression-level)'{-z,--compression-level=}'[compressed level]:level:' \ + '--all-kernel[configure all used events to run in kernel space]' \ + '--all-user[configure all used events to run in user space]' \ + '(--user-callchains)--kernel-callchains[collect callchains only from kernel space]' \ + '(--kernel-callchains)--user-callchains[collect callchains only from user space]' \ + '--timestamp-filename[append timestamp to output file name]' \ + '--timestamp-boundary[record timestamp boundary]' \ + '--switch-output=[generate multiple perf.data files based on mode]:mode:' \ + '--switch-max-files=[when rotating perf.data only keep N files]:number:' \ + '--dry-run[parse options then exit]' \ + '--tail-synthesize[collect samples during finalization instead of beginning of recording]' \ + '--overwrite[makes all events use an overwritable ring buffer]' \ + '1:command:_command_names -e' \ + '*::args:_normal' \ + && ret=0 + ;; + (report) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]:file:_files' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-q --quiet)'{-q,--quiet}'[do not show any message]' \ + '(-n --show-nr-samples)'{-n,--show-nr-samples}'[show the number of samples for each symbol]' \ + '--show-cpu-utilization[show sample percentage for different cpu modes]' \ + '(-T --threads)'{-T,--threads}'[show per-thread event counters]' \ + '(-c --comms)'{-c,--comms=}'[only consider symbols in these comms]:comms:' \ + '--pid=[only show events for given process ID]:pid:_perf_pids' \ + '--tid=[only show events for given thread ID]:tid:' \ + \*{-d,--dsos=}'[only consider symbols in these dsos]:dsos:' \ + \*{-S,--symbols=}'[only consider these symbols]:symbol:' \ + '--symbol-filter=[only show symbols that match with this filter]:filter:' \ + '(-U --hide-unresolved)'{-U,--hide-unresolved}'[only display entries resolved to a symbol]' \ + '(-s --sort)'{-s,--sort=}'[sort histogram entries by given keys]:keys:_perf_report_sort_keys' \ + '(-F --fields)'{-F,--fields=}'[specify output field]:field:(overhead overhead_sys overhead_us overhead_children sample period)' \ + '(-p --parent)'{-p,--parent=}'[a regex filter to identify parent]:regex:' \ + '(-x --exclude-other)'{-x,--exclude-other}'[only display entries with parent-match]' \ + '(-w --column-widths)'{-w,--column-widths=}'[force each column width to the provided list]' \ + '(-t --field-separator)'{-t,--field-separator=}'[use a special separator character]:sep:' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '(-g --call-graph)'{-g,--call-graph=}'[display call chains using this argument]' \ + '--children[accumulate callchain of children to parent entry]' \ + '--max-stack=[set the stack depth limit]:number:' \ + '(-G --inverted)'{-G,--inverted}'[alias for inverted caller based call graph]' \ + '--ignore-callees=[regex for ignoring callees of the function]:regex:' \ + '--pretty=[pretty printing style]:style:(normal raw)' \ + '--stdio[use the stdio interface]' \ + '--stdio-color=[color output configuring]:type:(always never auto)' \ + '--tui[use the TUI interface]' \ + '--gtk[use the GTK2 interface]' \ + '(-k --vmlinux --ignore-vmlinux)'{-k,--vmlinux=}'[vmlinux pathname]:vmlinux:_files' \ + '(-k --vmlinux)--ignore-vmlinux[ignore vmlinux files]' \ + '--kallsyms=[kallsyms pathname]:kallsyms:_files' \ + '(-m --modules)'{-m,--modules}'[load module symbols]' \ + '(-f --force)'{-f,--force}'[do not do ownership validation]' \ + '--symfs=[look for files with symbols relative to this directory]:symfs:_files -/' \ + '(-C --cpu)'{-C,--cpu=}'[only report sample for the list of CPUs provided]' \ + '(-M --disassembler-style)'{-M,--disassembler-style=}'[set disassembler style for objdump]:style:' \ + '--source[interleave source code with assembly code]' \ + '--asm-raw[show raw instruction encoding of assembly instructions]' \ + '--show-total-period[show a column with sum of periods]' \ + '(-I --show-info)'{-I,--show-info}'[display extended information about the perf.data file]' \ + '(-b --branch-stack)'{-b,--branch-stack}'[use the addressed of sampled taken branch]' \ + '--branch-history[add the addresses of sampled taken branches to the callstack]' \ + '--objdump=[path to objdump binary]:path:_files' \ + '--group[show event group information together]' \ + '--demangle[demangle symbol names to human readable form]' \ + '--demangle-kernel[demangle kernel symbol names to human readable form]' \ + '--mem-mode[use the data addresses of samples]' \ + '--percent-limit=[do not show entries which have an overhead under this percent]:number:' \ + '--percentage=[determine how to display the overhead percentage of filtered entries]:number:' \ + '--header[show header information in the perf.data file]' \ + '--header-only[show only perf.data header]' \ + '--time=[only analyze samples within given time window]:time:' \ + '--switch-on=[only consider events after this event is found]:event:' \ + '--switch-off=[stop considering events after this event is found]:event:' \ + '--show-on-off-events[show the --switch-on/off events too]' \ + '--itrace=[options for decoding instruction tracing data]' \ + '--full-source-path[show the full path for source files]' \ + '--show-ref-call-graph[show reference callgraphs]' \ + '--socket-filter[only report the samples on the processor socket]' \ + '--samples=[save N individual samples for each histogram entry]:number:' \ + '--raw-trace[do not use print fmt or plugins]' \ + '--hierarchy[enable hierarchical output]' \ + '(--no-inline)--inline[print inline stack]' \ + '(--inline)--no-inline[do not print inline stack]' \ + '--mmaps[show --tasks output plus mmap information]' \ + '--ns[show time stamps in nanoseconds]' \ + '--stat[display overall events statistics without any further processing]' \ + '--tasks[display monitored tasks stored in perf data]' \ + '--percent-type=[set annotation percent type]:type:(global-period local-period global-hits local-hits)' \ + '--time-quantum=[configure time quantum for time sort key]' \ + && ret=0 + ;; + (sched) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-D --dump-raw-trace)'{-D,--dump-raw-trace}'[dump raw trace in ASCII]' \ + '(-f --force)'{-f,--force}'[do not complain, do it]' \ + '1:command:_perf_sched_subcommand' \ + '*:: :->sched_args' \ + && ret=0 + ;; + (script) + # TODO 'perf-script' completion + _arguments \ + '(-D --dump-raw-trace)'{-d,--dump-raw-trace}'[display verbose dump of the trace data]' \ + '(-L --Latency)'{-L,--Latency=}'[show latency attributes]: :' \ + '(-l --list)'{-l,--list=}'[display a list of available trace scripts]: :' \ + '(-s --script)'{-s,--script=}'[process trace data with the given script]: :' \ + '(-g --gen-script)'{-g,--gen-script=}'[generate perf-script starter script for given language]:lang:' \ + '-a[force system-wide collection]' \ + '(-i --input)'{-i,--input=}'[input file name]:file:_files' \ + '(-d --debug-mode)'{-d,--debug-mode}'[do various checks]' \ + \*{-F,--fields=}'[comma separated list of fields to print]:fields:_perf_script_fields' \ + '(-k --vmlinux)'{-k,--vmlinux=}'[vmlinux pathname]:vmlinux:_files' \ + '--kallsyms=[kallsyms pathname]:kallsyms:_files' \ + '(-G --hide-call-graph)'{-G,--hide-call-graph}'[when printing symbols do not display call chain]' \ + '--stop-bt[stop display of callgraph at these symbols]' \ + '(-C --cpu)'{-C,--cpu=}'[only report samples for the list of CPUs provided]:cpus:' \ + '(-c --comms)'{-c,--comms=}'[only display events for these comms]:comms:' \ + '--pid=[only show events for given process ID]:pids:_perf_pids' \ + '--tid=[only show events for given thread ID]:tids:' \ + '(-I --show-info)'{-I,--show-info}'[display extended information about the perf.data file]' \ + '--show-kernel-path[try to resolve the path of kernel.kallsyms]' \ + '--show-task-events[display task related events]' \ + '--show-mmap-events[display mmap related events]' \ + '--show-namespace-events[display namespace events]' \ + '--show-switch-events[display context switch events]' \ + '--show-lost-events[display lost events]' \ + '--show-round-events[display finished round events]' \ + '--show-bpf-events[display bpf events]' \ + '--demangle[demangle symbol names to human readable form]' \ + '--demangle-kernel[demangle kernel symbol names to human readable form]' \ + '--header[show perf.data header]' \ + '--header-only[show only perf.data header]' \ + '--itrace=[options for decoding instruction tracing data]' \ + '--full-source-path[show the full path for source files for srcline output]' \ + '--max-stack=[set the stack depth limit]:number:' \ + '--ns[use 9 decimal places when displaying time]' \ + '(-f --force)'{-f,--force}'[do not ownership validation]' \ + '--time=[only analyze samples within given time window]' \ + '--max-blocks=[set the maximum number of program blocks to print]:number:' \ + '--reltime[print time stamps relative to trace start]' \ + '--per-event-dump[create per event files]' \ + '--inline[the inline stack will be printed]' \ + '--insn-trace[show instruction stream for intel_pt traces]' \ + '--xed[run xed disassembler on output]' \ + '--call-trace[show call stream for intel_pt traces]' \ + '--call-ret-trace[show call and return stream for intel_pt traces]' \ + '--graph-function=[for itrace only show specified functions and their callees for itrace]:functions:' \ + '--switch-on=[only consider events after this event is found]:event:' \ + '--switch-off=[stop considering events after this event is found]' \ + '--show-on-off-events[show the --switch-on/off events too]' \ + '1:command:(record report)' \ + && ret=0 + ;; + (stat) + _arguments \ + \*{-e,--events=}'[select the PMU event]:event:_perf_events' \ + '(-i --no-inherit)'{-i,--no-inherit}'[child tasks do not inherit counters]' \ + '(-p --pid)'{-p,--pid=}'[stat events on existing process id]:pid:_pids' \ + '(-t --tid)'{-t,--tid=}'[stat events on existing thread id]:tid:' \ + '(-a --all-cpus)'{-a,--all-cpus}'[system-wide collection from all CPUs]' \ + '--no-scale[do not scale/normalize counter values]' \ + \*{-d,--detailed}'[print more detailed statistics]' \ + '(-r --repeat)'{-r,--repeat=}'[repeat command and print average + stddev]:count:' \ + '(-B --big-num)'{-B,--big-num}'[print large numbers with thousands separators according to locale]' \ + '(-C --cpu)'{-C,--cpu=}'[count only the list of CPUs]:cpus:' \ + '(-A --no-aggr)'{-A,--no-aggr}'[do not aggregate counts across all monitored CPUs]' \ + '(-n --null)'{-n,--null}'[null run]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-x --field-separator)'{-x,--field-separator=}'[print separator]' \ + '--table[display time for each run in a table format]' \ + '(-G --cgroup)'{-G,--cgroup=}'[monitor only in the container called this name]' \ + '(-o --output)'{-o,--output=}'[print the output into this file]:file:_files' \ + '--append[append to the output file designated with -o option]' \ + '--log-fd[log output to fd, instead of stderr]' \ + '--pre[pre measurement hook]: :_command_names -e' \ + '--post[post measurement hook]: :_command_names -e' \ + '(-I --interval-print)'{-I,--interval-print=}'[print count deltas every millseconds]:msec:' \ + '--interval-count[print count delta for fixed number of times]:times:' \ + '--interval-clear[clear the screen before next interval]' \ + '--timeout[stop the perf stat session and print count after milliseconds]:msec:' \ + '--metric-only[only print compted metrics]' \ + '--per-socket[aggregate counts per processor socket for system-wide mode measurements]' \ + '--per-die[aggregate counts per processor die for sytem-wide mode measurements]' \ + '--per-core[aggregate counts per phisical processor for sytem-wide mode measurements]' \ + '--per-thread[aggregate counts per monitored threads]' \ + '(-D --delay)'{-D,--delay=}'[wait msecs before measuring]:msec:' \ + '(-T --transaction)'{-T,--transaction}'[print statistics of transactional execution]' \ + '(-)1:command:_perf_stat_command' \ + '*::arg:_normal' \ + && ret=0 + # TODO report/record sub-subcommand completion + ;; + (test) + _arguments \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-s --skip)'{-s,--skip=}'[Tests to skip]:tests:_perf_test_list' \ + '(-F --dont-fork)'{-F,--dont-fork}'[do not fork child for each test]' \ + '1:command:((list))' \ + && ret=0 + ;; + (timechart) + _arguments \ + '(-i --input)'{-i,--input=}'[input file name]: :_files' \ + '(-o --output)'{-o,--output=}'[output file name]: :_files' \ + '(-w --width)'{-w,--width=}'[select the width of the SVG file]:width' \ + '(-P --power-only)'{-P,--power-only}'[only output the CPU power section of the diagram]' \ + '(-T --task-only)'{-T,--task-only}'[do not output processor state transitions]' \ + '(-p --process)'{-p,--process}'[select the processes to display, by name or PID]:process' \ + '(-f --force)'{-f,--force}'[do not complain, do it]' \ + '--symfs=[look for files with symbols relative to this directory]: :_files -/' \ + '(-n --proc-num)'{-n,--proc-num=}'[print task info for at least given number of tasks]:number:' \ + '(-t --topology)'{-t,--topology}'[sort CPUs according to topology]' \ + '--highlight=[highlight tasks using different color]:nsecs_or_task:' \ + '--io-skip-eagain[do not draw EAGAIN IO events]' \ + '--io-min-times=[draw small events as if they lasted min-time]:nsecs:' \ + '--io-merge-dist=[merge events that are merge-dist nanoseconds apart]:nsecs:' \ + '1:command:((record))' \ + '*:: :->timechart_args' \ + && ret=0 + ;; + (top) + _arguments \ + '(-a --all-cpus)'{-a,--all-cpus}'[system wide collection]' \ + '(-c --count)'{-c,--count=}'[event period to sample]:count:' \ + '(-C --cpu)'{-C,--cpu=}'[monitor only the list of CPUs provided]:cpu_list:' \ + '(-d --delay)'{-d,--delay=}'[number of seconds to delay between refreshes]' \ + \*{-e,--event=}'[select the PMU event]:event:_perf_events' \ + '(-E --entries)'{-E,--entries=}'[display thie many functions]' \ + '(-f --count-filter)'{-f,--count-filter=}'[only display functions with more events than this]:count:' \ + '--group[put the counters into a counter group]' \ + '(-F --freq)'{-F,--freq=}'[profile at thie frequency]:freq:(max)' \ + '(-i --inherit)'{-i,--inherit}'[child tasks do not inherit counters]' \ + '(-k --vmlinux --ignore-vmlinux)'{-k,--vmlinux=}'[path to vmlinux]:vmlinux:_files' \ + '(-k --vmlinux)--ignore-vmlinux[ignore vmlinux files]' \ + '--kallsyms=[kallsyms pathname]:sym_path:_files' \ + '(-m --mmap-pages)'{-m,--mmap-pages=}'[number of mmap data pages or size]:number:' \ + '(-p --pid)'{-p,--pid=}'[profile events on existing process ID]:pid:_pids' \ + '(-t --tid)'{-t,--tid=}'[profile events on existing thread ID]:tid:' \ + '(-u --uid)'{-u,--uid=}'[record events in threads owned by uid]:uid:' \ + '(-r --realtime)'{-r,--realtime=}'[collect data with this RT SCHED_FIFO priority]:priority:' \ + '--sym-annotate=[annotate this symbol]' \ + '(-K --hide_kernel_symbols)'{-K,--hide_kernel_symbols}'[hide kernel symbols]' \ + '(-U --hide_user_symbols)'{-K,--hide_user_symbols}'[hide user symbols]' \ + '--demangle-kernel[demangle kernel symbols]' \ + '(-D --dump-symtab)'{-D,--dump-symtab}'[dump the symbol table used for profiling]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-z --zero)'{-z,--zero}'[zero history access display updates]' \ + '(-s --sort)'{-s,--sort}'[sort by keys]' \ + '--fields=[specify output field ]:fields:_perf_top_fields' \ + '(-n --show-nr-samples)'{-n,--show-nr-samples}'[show a column with the number of samples]' \ + '--show-total-period[show a column with the sum of periods]' \ + '--dsos[only consider symbols in these dsos]' \ + '--comms[only consider symbols in these comms]' \ + '--symbols[only consider these symbols]' \ + '(-M --disassembler-style)'{-M,--disassembler-style=}'[set disassembler style]:style:' \ + '(--no-source)--source[interleave source code with assembly code]' \ + '(--source)--no-source[disable interleaving source code]' \ + '--asm-raw[show raw instruction encoding of assembly instructions]' \ + '-g[Enables call-graph recording]' \ + '--call-graph[setup and enable call-graph recording]' \ + '--children[accumulate callchain of children to parent entry]' \ + '--max-stack[set the stack depth limit]' \ + '--ignore-callees=[ignore callees of functions regex]:regex:' \ + '--percent-limit[do not show entries which have an overhead under that percent]' \ + '(-w --column-widths)'{-w,--column-widths=}'[force each column width to this list]' \ + '--proc-map-timeout[set timeout limit for processing process map]' \ + '(-b --branch-any)'{-b,--branch-any}'[enable taken branch stack sampling]' \ + '(-j --branch-filter)'{-j,--branch-filter}'[enable taken branch stack sampling]' \ + '--raw-trace[do not use print fmt or plugins]' \ + '--hierarchy[enable hierarchy output]' \ + '--overwrite[overwrite records]' \ + '--force[do not do ownership validation]' \ + '--num-thread-synthesize[threads to run when synthesizing events for existing processes]'\ + '--namespaces[record events of type PREF_RECORD_NAMESPACES]' \ + '--switch-on=[only consider events after this event is found]:event:' \ + '--switch-off=[stop considering events after this event is found]:event:' \ + '--show-on-off-events[show the --switch-on/off events too]' \ + && ret=0 + ;; + (trace) + _arguments \ + '(-a --all-cpus)'{-a,--all-cpus}'[force system-wide collection from all cpus]' \ + '(-e --expr --event)'{-e,--expr=,--event=}'[list of syscalls and other perf events to show]::event:' \ + '(-D --delay)'{-d,--delay=}'[wait msecs before measuring]' \ + '(-o --output)'{-o,--output=}'[output file name]:output:_files' \ + '(-p --pid)'{-p,--pid=}'[record events on existing process ID]:pid:_perf_pids' \ + '(-t --tid)'{-u,--tid=}'[record events on existing thread ID]:tid:' \ + '(-u --uid)'{-u,--uid=}'[record events in threads owned by uid]:uid:' \ + \*{-G,--cgroup=}'[record events in threads in a cgroup]' \ + '--filter-pids=[filter out events for these pids and for trace itself]:pid:_perf_pids' \ + '(-v --verbose)'{-v,--verbose=}'[verbosity level]' \ + '--no-inherit[child tasks do not inherit counters]' \ + '(-m --mmap-pages)'{-m,--mmap-pages=}'[number of mmap data pages]:number:' \ + '(-C --cpu)'{-C,--cpu}'[collect samples only on the list of CPUs provides]:cpus:' \ + '--duration=[show only events that had a duration grater than N.M ms]' \ + '--sched[accrue thread runtime and provide a summary at the end of the session]' \ + '--failure[show only syscalls that failed]' \ + '(-i --input)'{-i,--input=}'[process events from a given perf data file]:file:_files' \ + '(-T --time)'{-T,--time}'[print full timestamp]' \ + '(--no-comm)--comm[show process COMM]' \ + '(--comm)--no-comm[do not show process COMM]' \ + '(-s --summary)'{-s,--summary}'[show only a summary of syscalls by thread]' \ + '(-S --with-summary)'{-S,--with-summary}'[show all syscalls followed by a summary by thread]' \ + '--tool_stats[show tool stats]' \ + '(-f --force)'{-f,--force}'[do not complain, do it]' \ + '(-F --pf)'{-F,--pf=}'[trace pagefaults]:type:(all min maj)' \ + '(--no-syscalls)--syscalls[trace system calls]' \ + '(--syscalls)--no-syscalls[not trace system calls]' \ + '--call-graph=[setup and enable call-graph recording]' \ + '--kernel-syscall-graph[show the kernel callchains on the syscall exit path]' \ + '--max-events=[stop after processing N events]:events:' \ + '--switch-on=[only consider events after this event is found]:event:' \ + '--switch-off=[stop considering events after this event is found]:event:' \ + '--show-on-off-events[show the --switch-on/off events too]' \ + '--max-stack=[set the stack depth max limit]:limit:' \ + '--min-stack=[set the stack depth min limit]:limit:' \ + '--print-sample[print the PERF_RECORD_SAMPLE PERF_SAMPLE_ info]' \ + '--proc-map-timeout=[time out(ms) limit of processing /proc/XXX/mmap]' \ + '--sort-events[do sorting on batches of events]' \ + '--map-dump[dump BPF maps setup by events passed via -e]' \ + '1: :_perf_trace_subcommand' \ + && ret=0 + # TODO command completion + ;; + (version) + _arguments \ + '--build-options[the status of compiled-in libraries are printed]' \ + && ret=0 + ;; + (help) + _arguments \ + '(- : *)'{-a,--all}'[prints all the available commands on the standard output]' \ + '1: :_perf_cmds' \ + && ret=0 + ;; + *) + _call_function ret _perf_cmd_$words[1] && ret=0 + (( ret )) && _message 'no more arguments' + ;; + esac + ;; + esac + + case $state in + (bench_subsystem) + case $words[1] in + (sched) + _arguments \ + '1:suite:(messaging pipe)' \ + '*:: :->bench_sched_suite' \ + && ret=0 + ;; + (mem) + _arguments \ + '1:suite:(memcpy memset)' \ + '*:: :->bench_mem_suite' \ + && ret=0 + ;; + (numa) + _arguments \ + '1:suite:(mem)' \ + && ret=0 + ;; + (futex) + _arguments \ + '1:suite:(hash wake wake-parallel requeue lock-pi)' \ + && ret=0 + ;; + (epoll) + _arguments \ + '1:suite:(wait ctl)' \ + && ret=0 + ;; + esac + ;; + (c2c_args) + case $words[1] in + (record) + _arguments \ + \*{-e,--event=}'[select the PMU event]:events:_perf_events' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-l --ldlat)'{-l,--ldlat=}'[configure mem-loads latency]:latency:' \ + '(-k --all-kernel)'{-k,--all-kernel}'[configure all used events to run in the kernel space]' \ + '(-u --all-user)'{-u,--all-user}'[configure all used events to run in user space]' \ + '1:command:_command_names -e' \ + '*::args:_normal' \ + && ret=0 + ;; + (report) + _arguments \ + '(-k --vmlinux)'{-k,--vmlinux=}'[vmlinux pathname]:vmlinux:_files' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '(-i --input)'{-i,--input=}'[specify the input file to process]:proc_file:_files' \ + '(-N --node-info)'{-N,--node-info}'[show extra node info in report]' \ + '(-c --coalesce)'{-c,--coalesce=}'[specify sorting fields for single cacheline display]:field:_perf_c2c_coalesce' \ + '(-g --call-graph)'{-g,--call-graph}'[setup callchains parameters]' \ + '--stdio[force the stdio output]' \ + '--stats[display only statistic tables]' \ + '--full-symbols[display full length of symbols]' \ + '--no-source[do not display source line column]' \ + '--show-all[show all captured HITM lines]' \ + '(-f --force)'{-f,--force}'[do not do ownership validation]' \ + '(-d --display)'{-d,--display=}'[switch to HITM type]:hitm_type:(rmt lcl)' \ + && ret=0 + ;; + esac + ;; + (data_args) + if [[ $words[1] == "convert" ]]; then + _arguments \ + '--to-ctf=[specify the path of CTF data directory]:data_dir:_files -/' \ + '-i[specify input perf data file path]:path:_files' \ + '(-f --force)'{-f,--force}'[do not complain do it]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '--all[convert all events including non-sample events to output]' \ + && ret=0 + fi + ;; + (kmem_args) + if [[ $words[1] == "record" ]]; then + _arguments \ + '1:command:_command_names -e' \ + '*::args:_normal' \ + && ret=0 + fi + ;; + (lock_args) + case $words[1] in + (record) + _arguments \ + '1:command:_command_names -e' \ + '*::args:_normal' \ + && ret=0 + ;; + (report) + _arguments \ + '(-k --key)'{-k,--key=}'[sorting key]:key:(default contented avg_wait wait_total wait_max wait_min)' \ + && ret=0 + ;; + (info) + _arguments \ + '(-t --threads)'{-t,--threads}'[dump thread list in perf.data]' \ + '(-m --map)'{-m,--map}'[dump map of lock instances]' \ + && ret=0 + ;; + esac + ;; + (mem_args) + case $words[1] in + (record) + _arguments \ + \*{-e,--event=}'[event selector]:events:_perf_events' \ + '(-K --all-kernel)'{-K,--all-kernel}'[configure all used events to run in kernel space]' \ + '(-U --all-user)'{-K,--all-user}'[configure all used events to run in user space]' \ + '(-v --verbose)'{-v,--verbose}'[be more verbose]' \ + '--ldlat=[specify desired latency for loads event]:latency:' \ + '1:command:_command_names -e' \ + '*::args:_normal' \ + && ret=0 + ;; + esac + ;; + (sched_args) + case $words[1] in + (record) + _arguments \ + '1:command:_command_names -e' \ + '*::args:_normal' \ + && ret=0 + ;; + (map) + _arguments \ + '--compact[show only CPUs with activity]' \ + '--cpus[show just entries with activities]' \ + '--color-cpus=[highlight the given cpus]:cpus:' \ + '--color-pids=[highlight the given pids]:pids:' \ + && ret=0 + ;; + (timehist) + _arguments \ + '(-k --vmlinux)'{-k,--vmlinux=}'[vmlinux pathname]:vmlinux:_files' \ + '--kallsyms=[kallsyms pathname]:kallsyms:_files' \ + '(-g --call-graph)'{-g,--callgraph}'[display call chains]' \ + '--max-stack=[maximum number of functions to display in backtrace]:number:' \ + '(-p --pid)'{-p,--pid=}'[only show events for given process ID]:pids:_perf_pids' \ + '(-t --tid)'{-t,--tid=}'[only show events for given thread ID]:tids:' \ + '(-s --summary)'{-s,--summary}'[show only summary scheduling]' \ + '(-S --with-summary)'{-S,--with-summary}'[show all scheduling events by a summary]' \ + '--symfs=[look for files with symbols relative to this directory]:dir:_files -/' \ + '(-V --cpu-visual)'{-V,--cpu-visual}'[show visual aid for sched switches by CPU]' \ + '(-w --wakeups)'{-w,--wakeups}'[show wakeup events]' \ + '(-M --migrations)'{-M,--migrations}'[show migration events]' \ + '(-n --next)'{-n,--next}'[show next task]' \ + '(-I --idle-hist)'{-I,--idle-hist}'[show idle-related events only]' \ + '--time=[only analyze samples within given time window]:time_window:' \ + '--state[show task state when it switched out]' \ + && ret=0 + ;; + esac + ;; + (timechart_args) + if [[ $words[1] == "record" ]]; then + _arguments \ + '(-P --power-only)'{-P,--power-only}'[record only power-related events]' \ + '(-T --tasks-only)'{-T,--tasks-only}'[record only tasks-related events]' \ + '(-I --io-only)'{-I,--io-only}'[record only io-related events]' \ + '(-g --callchain)'{-g,--callchain}'[do call-graph recording]' \ + '1:command:_command_names -e' \ + '*::args:_normal' \ + && ret=0 + fi + ;; + esac + + case $state in + (bench_sched_suite) + case $words[1] in + (messaging) + _arguments \ + '(-p --pipe)'{-p,--pipe}'[use pipe instead of socketpair]' \ + '(-t --thread)'{-t,--thread}'[be multi thread instead of multi process]' \ + '(-g --group)'{-g,--group=}'[specify number of groups]:number:' \ + '(-l --nr_loops)'{-l,--nr_loops=}['specify number of loops']\ + && ret=0 + ;; + (pipe) + _arguments \ + '(-l --loop)'{-l,--loop}'[specify number of loops]:number:' \ + && ret=0 + esac + ;; + (bench_mem_suite) + # memcpy and memset support same options + _arguments \ + '(-l --size)'{-l,--size=}'[specify size of memory to copy]:size:' \ + '(-f --function)'{-f,--function=}'[specify function to copy]:function:' \ + '(-l --nr_loops)'{-l,--nr_loops=}'[repeat memcpy invocation this number of times]:number:' \ + '(-c --cycles)'{-c,--cycles}'[use perf cpu-cycles event instead of gettimeofday]' \ + && ret=0 + ;; + esac +} + +# FIXME Parse 'perf --help' instead of hard-coding. +(( $+functions[_perf_cmds] )) || +_perf_cmds() { + local commands; commands=( + 'annotate:read perf.data (created by perf record) and display annotated code' + 'archive:create archive with object files with build-ids found in perf.data file' + 'bench:general framework for benchmark suites' + 'buildid-cache:manage build-id cache' + 'buildid-list:list the buildids in a perf.data file' + 'c2c:shared data C2C/HITM analyzer' + 'config:get and set variables in a configuration file' + 'data:data file related processing' + 'diff:read two perf.data files and display the differential profile' + 'evlist:list the event names in a perf.data file' + 'ftrace:simple wrapper for kernel ftrace functionality' + 'inject:filter to augment the events stream with additional information' + 'kallsyms:searches running kernel for symbols' + 'kmem:tool to trace/measure kernel memory(slab) properties' + 'kvm:tool to trace/measure kvm guest os' + 'list:list all symbolic event types' + 'lock:analyze lock events' + 'mem:profile memory access' + 'probe:define new dynamic tracepoints' + 'record:run a command and record its profile into perf.data' + 'report:read perf.data (created by perf record) and display the profile' + 'sched:tool to trace/measure scheduler properties (latencies)' + 'script:read perf.data (created by perf record) and display trace output' + 'stat:run a command and gather performance counter statistics' + 'test:runs sanity tests' + 'timechart:tool to visualize total system behavior during a workload' + 'top:system profiling tool' + 'trace:strace inspired tool' + 'version:display the version of perf binary' + 'help:show command usage information' + ) + _describe -t commands 'command' commands "$@" +} + +_perf "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_periscope b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_periscope new file mode 100644 index 00000000..588c4efa --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_periscope @@ -0,0 +1,36 @@ +#compdef periscope +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Periscope (http://code.google.com/p/periscope). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- : *)'{-h,--help}'[show help message and exit]' \ + '(- : *)--version[show version number and exit]' \ + '*'{-l,--language}'[wanted language]: :_language_codes ISO-639-1' \ + '(-f --force)'{-f,--force}'[replace existing subtitle file]' \ + '(-q --query)'{-q,--query}'[query to send to the subtitles website]:queries' \ + '--list-plugins[list all plugins supported by periscope]' \ + '--list-active-plugins[list all plugins used to search subtitles]' \ + '--cache-folder[cache/config directory to use]: :_files -/' \ + '--quiet[run in quiet mode (only show warn and error messages)]' \ + '--debug[set the logging level to debug]' \ + '*: :_files' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pgsql_utils b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pgsql_utils new file mode 100644 index 00000000..1e17deca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pgsql_utils @@ -0,0 +1,521 @@ +#compdef psql pg_dump pg_dumpall pg_restore createdb dropdb vacuumdb createuser dropuser initdb +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users, Dominic Mitchell, Johann 'Myrkraverk' Oskarsson, Daniel Serodio, J Smith +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for PostgreSQL utils (http://postgresql.org). +# +# Source: http://www.zsh.org/mla/users/2004/msg01006.html +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Dominic Mitchell +# +# * Johann 'Myrkraverk' Oskarsson +# +# * Daniel Serodio pg_dumpall completion +# +# * J Smith various completion additions +# +# ------------------------------------------------------------------------------ + + +_pgsql_get_identity () { + _pgsql_user=${(v)opt_args[(i)-U|--username]} + _pgsql_port=${(v)opt_args[(i)-p|--port]} + _pgsql_host=${(v)opt_args[(i)-h|--host]} + + _pgsql_params=( + ${_pgsql_user:+"--username=$_pgsql_user"} + ${_pgsql_port:+"--port=$_pgsql_port"} + ${_pgsql_host:+"--host=$_pgsql_host"} + ) +} + +# Postgres Allows specifying the path to the directory containing the +# socket as well as a hostname. +_pgsql_host_or_dir() { + _alternative \ + 'hosts:host:_hosts' \ + 'directories:directory:_directories' +} + +# This creates a port completion list based on socket files on the +# local computer. Be default, Postgres puts them in /tmp/ but Debian +# changed that to /var/run/postgresql/ in their packages. +_pgsql_ports() { + compadd "$@" - /tmp/.s.PGSQL.<->(N:e) /var/run/postgresql/.s.PGSQL.<->(N:e) +} + +_pgsql_users () { + local _pgsql_user _pgsql_port _pgsql_host _pgsql_params + local _pgsql_user_sql + _pgsql_get_identity + + # We use _pgsql_port and _pgsql_host directly here instead of + # _pgsql_params so as to not pick up a partially completed + # username. + _pgsql_params=( + ${_pgsql_port:+"--port=$_pgsql_port"} + ${_pgsql_host:+"--host=$_pgsql_host"} + ) + + _pgsql_user_sql='select r.rolname from pg_catalog.pg_roles r where r.rolcanlogin = true' + + compadd "$@" - $( psql $_pgsql_params[@] -XAqt -c $_pgsql_user_sql template1 2>/dev/null ) + +} + +_pgsql_tables () { + local _pgsql_user _pgsql_port _pgsql_host _pgsql_params + _pgsql_get_identity + + # Need to pull out the database name from the existing arguments. + # This is going to vary between commands. Thankfully, it's only + # used by pg_dump, which always has the dbname in arg1. If it's + # not present it defaults to ${PGDATABASE:-$LOGNAME}, which + # matches (I think) the PostgreSQL behaviour. + + local db + db=${line[1]:-${PGDATABASE:-$LOGNAME}} + + ## Instead of parsing the output of the psql \ commands, we look + ## up the tables ourselves. The following query has been tested + ## with Postgres 8.2 - 9.2. + + local _pgsql_table_sql + _pgsql_table_sql="select n.nspname || '.' || c.relname \ + from pg_catalog.pg_class c \ + left join pg_catalog.pg_namespace n on n.oid = c.relnamespace \ + where c.relkind in ('r', '') \ + and n.nspname <> 'pg_catalog' \ + and n.nspname <> 'information_schema' \ + and n.nspname !~ '^pg_toast' \ + and pg_catalog.pg_table_is_visible( c.oid ) \ + order by 1" + + compadd "$@" - \ + $( psql $_pgsql_params[@] -AXqt -c $_pgsql_table_sql $db 2>/dev/null ) +} + +_pgsql_schemas () { + local _pgsql_user _pgsql_port _pgsql_host _pgsql_params + _pgsql_get_identity + + local db + db=${line[1]:-${PGDATABASE:-$LOGNAME}} + + local _pgsql_schema_sql="select n.nspname \ + from pg_catalog.pg_namespace n \ + where n.nspname !~ '^pg_' \ + and n.nspname <> 'information_schema' \ + order by 1;" + + compadd "$@" - \ + $( psql $_pgsql_params[@] -AXqt -c $_pgsql_schema_sql $db 2>/dev/null ) +} + +_pgsql_databases () { + local _pgsql_user _pgsql_port _pgsql_host _pgsql_params + _pgsql_get_identity + + local _pgsql_services _pgsql_service_files + _pgsql_service_files=(~/.pg_service.conf) + (( $+commands[pg_config] )) && _pgsql_service_files+=$(pg_config --sysconfdir)/pg_service.conf + + _pgsql_services=$( grep -h '^\[.*\]' $_pgsql_service_files 2>/dev/null \ + | sed -e 's/^\[/service=/' -e 's/\].*$//' ) + + local _pgsql_db_sql + _pgsql_db_sql="select d.datname from pg_catalog.pg_database d \ + where d.datname <> 'template0'" + + compadd "$@" - \ + ${(f)_pgsql_services} \ + $( psql $_pgsql_params[@] -AXtq -c $_pgsql_db_sql template1 2>/dev/null ) +} + +_pgsql_encodings () { + local _pgsql_user + _pgsql_get_identity + + local _pgsql_db_sql + _pgsql_db_sql="select pg_encoding_to_char(i) from generate_series(0,100) i;" + + compadd "$@" - $( psql $_pgsql_params[@] -AXtq -c $_pgsql_db_sql template1 ) +} + + +## +## The actual completion code for the commands +## + +_psql () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s "-*" \ + "$_pgsql_common_opts[@]" \ + {-V,--version}'[display client version]' \ + {-a,--echo-all}'[print commands read]' \ + {-A,--no-align}'[unaligned output mode]' \ + {-c+,--command=}':execute SQL command:' \ + {-d+,--dbname=}':database to connect to:_pgsql_databases' \ + {-b,--echo-errors}'[echo failed commands]' \ + {-e,--echo-queries}'[display queries submitted]' \ + {-E,--echo-hidden}'[display hidden queries]' \ + {-L,--log-file=}'[send session log to file]' \ + {-n,--no-readline}'[disable enhanced command line editing (readline)]' \ + {-f+,--file=}':SQL file to read:_files' \ + {-F+,--field-separator=}':field separator char:' \ + {-H,--html}'[HTML output]' \ + {-l,--list}'[list databases]' \ + {-o+,--output=}':query output:_files' \ + {-P+,--pset=}':set psql variable:' \ + {-q,--quiet}'[non verbose mode]' \ + {-R+,--record-separator=}':record separator char:' \ + {-s,--single-step}'[prompt before each query]' \ + {-S,--single-line}'[newline sends query]' \ + {-t,--tuples-only}'[don'\''t display header/footer]' \ + {-T+,--table-attr=}':HTML table options:' \ + -u'[prompt for username/password]' \ + {-v+,--set=,--variable=}':set SQL variable:' \ + {-x,--expanded}'[one column per line]' \ + {-z,--field-separator-zero}'[set field separator for unaligned output to zero byte]' \ + {-0,--record-separator-zero}'[set record separator for unaligned output to zero byte]' \ + {-X,--no-psqlrc}'[don'\''t read ~/.psqlrc]' \ + ':PostgreSQL database:_pgsql_databases' \ + ':PostgreSQL user:_pgsql_users' +} + +_pg_dump () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-a,--data-only}'[dump only data]' \ + {-b,--blobs}'[dump blobs as well]' \ + {-c,--clean}'[include clean cmds in dump]' \ + {-C,--create}'[include createdb cmds in dump]' \ + {-E+,--encoding=}':database encoding:_pgsql_encodings' \ + {-d,--inserts}'[use INSERT not COPY]' \ + {-D,--{attribute,column}-inserts}'[use INSERT (cols) not COPY]' \ + {-f+,--file=}':output file:_files' \ + {-F+,--format=}':output format:_values "format" "p[plain text]" "t[tar]" "c[custom]"' \ + {-j,--jobs=}'[use this many parallel jobs to dump]' \ + {-i,--ignore-version}'[ignore version mismatch]' \ + {-n+,--schema=}':schema to dump:_pgsql_schemas' \ + {-N+,--exclude-schema=}':schema to NOT dump:_pgsql_schemas' \ + {-o,--oids}'[dump objects identifiers for every table]' \ + {-O,--no-owner}'[don'\''t recreate as same owner]' \ + {-R,--no-reconnect}'[don'\''t output connect]' \ + {-s,--schema-only}'[no data, only schema]' \ + {-S+,--superuser=}':superuser name:_pgsql_users' \ + {-t+,--table=}':table to dump:_pgsql_tables' \ + {-T+,--exclude-table=}':table to NOT dump:_pgsql_tables' \ + {-v,--verbose}'[verbose mode]' \ + {-V,--version}'[display client version]' \ + {-x,--no-{acl,privileges}}'[don'\''t dump ACLs]' \ + -X+':option:_values "option" use-set-session-authorization disable-triggers' \ + {-Z+,--compress=}':compression level:_values "level" 9 8 7 6 5 4 3 2 1 0' \ + ':PostgreSQL database:_pgsql_databases' \ + --section=':dump named section:_values "section" pre-data data post-data' \ + --binary-upgrade'[for use by upgrade utilities only]' \ + --column-inserts'[dump data as INSERT commands with column names]' \ + --disable-dollar-quoting'[disable dollar quoting, use SQL standard quoting]' \ + --disable-triggers'[disable triggers during data-only restore]' \ + --enable-row-security'[enable row security (dump only content user has access to)]' \ + --exclude-table-data='[do NOT dump data for the named table(s)]' \ + --if-exists'[use IF EXISTS when dropping objects]' \ + --inserts'[dump data as INSERT commands, rather than COPY]' \ + --lock-wait-timeout='[fail after waiting TIMEOUT for a table lock]' \ + --load-via-partition-root'[load partitions via the root table]' \ + --no-comments'[do not dump comments]' \ + --no-publications'[do not dump publications]' \ + --no-security-labels'[do not dump security label assignments]' \ + --no-synchronized-snapshots'[do not use synchronized snapshots in parallel jobs]' \ + --no-tablespaces'[do not dump tablespace assignments]' \ + --no-unlogged-table-data'[do not dump unlogged table data]' \ + --on-conflict-do-nothing'[add ON CONFLICT DO NOTHING to INSERT commands]' \ + --quote-all-identifiers'[quote all identifiers, even if not key words]' \ + --serializable-deferrable'[wait until the dump can run without anomalies]' \ + --snapshot='[use given snapshot for the dump]' \ + --strict-names'[require table and/or schema include patterns to match at least one entity each]' \ + --use-set-session-authorization'[use SET SESSION AUTHORIZATION commands instead of ALTER OWNER]' +} + +_pg_restore () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-d+,--dbname=}':database to connect to:_pgsql_databases' \ + {-f+,--file=}':output file:_files' \ + {-F+,--format=}':output format:_values "format" "p[plain text]" "t[tar]" "c[custom]"' \ + {-l,--list}'[list databases]' \ + {-a,--data-only}'[dump only data]' \ + {-b,--blobs}'[include large objects in dump]' \ + {-B,--no-blobs}'[exclude large objects in dump]' \ + {-c,--clean}'[include clean (drop) cmds before recreating]' \ + {-C,--create}'[include createdb cmds in dump]' \ + {-e,--exit-on-error}'[exit on error, default is to continue]' \ + {-I,--index=}':index name:' \ + {-j,--jobs=}':use this many parallel jobs to restore:' \ + {-L,--use-list=}':use table of contents from this file for selecting/ordering output:' \ + {-n,--schema=}':restore only objects in this schema:' \ + {-O,--no-owner}'[skip restoration of object ownership]' \ + {-P,--function=}':restore named function:' \ + {-s,--schema-only}'[restore only the schema, no data]' \ + {-S,--superuser=}':superuser user name to use for disabling triggers:' \ + {-t,--table=}':restore named table:' \ + {-T,--trigger=}':restore named trigger:' \ + {-x,--no-privileges}'[skip restoration of access privileges (grant/revoke)]' \ + {-1,--single-transaction}'[restore as a single transaction]' \ + {-v,--verbose}'[verbose mode]' \ + {-V,--version}'[display client version]' \ + --disable-triggers'[disable triggers during data-only restore]' \ + --enable-row-security'[enable row security]' \ + --if-exists'[use IF EXISTS when dropping objects]' \ + --no-comments'[do not restore comments]' \ + --no-data-for-failed-tables'[do not restore data of tables that could not be created]' \ + --no-publications'[do not restore publications]' \ + --no-security-labels'[do not restore security labels]' \ + --no-subscriptions'[do not restore subscriptions]' \ + --no-tablespaces'[do not restore tablespace assignments]' \ + --section=':dump named section:_values "section" pre-data data post-data' \ + --use-set-session-authorization'[use SET SESSION AUTHORIZATION commands instead of ALTER OWNER commands to set ownership]' \ + "1: :_files" +} + +_pg_dumpall () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-a,--data-only}'[dump only data]' \ + {-c,--clean}'[include clean (drop) cmds before recreating]' \ + {-g,--globals-only}'[dump only global objects, no databases]' \ + {-f+,--file=}':output file:_files' \ + {-o,--oids}'[dump objects identifiers for every table]' \ + {-O,--no-owner}'[don'\''t recreate as same owner]' \ + {-r,--roles-only}'[no databases or tablespaces, only roles]' \ + {-s,--schema-only}'[no data, only schema]' \ + {-S+,--superuser=}':superuser name:_pgsql_users' \ + {-t,--tablespaces-only}'[no databases or roles, only tablespaces]' \ + {-x,--no-privileges}'[don'\''t dump ACLs]' \ + --binary-upgrade'[for use by upgrade utilities only]' \ + --column-inserts'[use INSERT with column names not COPY]' \ + --disable-dollar-quoting'[disable dollar quoting, use SQL standard quoting]' \ + --disable-triggers'[disable triggers during data-only restore]' \ + --inserts'[use INSERT not COPY]' \ + --no-security-labels'[do not dump security label assignments]' \ + --no-tablespaces'[do not dump tablespace assignments]' \ + --no-unlogged-table-data'[do not dump unlogged table data]' \ + --quote-all-identifiers'[quote all identifiers, even if not key words]' \ + --use-set-session-authorization'[use SET SESSION AUTHORIZATION cmds instead of ALTER OWNER]' +} + +_createdb () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-e,--echo}'[display SQL queries]' \ + {-q,--quiet}'[non verbose mode]' \ + {-D+,--location=}':database location:_directories' \ + {-T+,--template=}':database template:_pgsql_databases' \ + {-E+,--encoding=}':database encoding:_pgsql_encodings' \ + ':PostgreSQL database:' \ + ':comment:' +} + +_dropdb () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-e,--echo}'[display SQL queries]' \ + {-q,--quiet}'[non verbose mode]' \ + {-i,--interactive}'[confirm before drop]' \ + ':PostgreSQL database:_pgsql_databases' +} + +_vacuumdb () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-a,--all}'[vacuum all databases]' \ + {-d+,--dbname=}':database to connect to:_pgsql_databases' \ + {-t+,--table=}':table to dump:_pgsql_tables' \ + {-f,--full}'[do full vacuuming]' \ + {-z,--analyze}'[update optimizer hints]' \ + {-Z,--analyze-only}'[only update optimizer statistics; no vacuum]' \ + {-e,--echo}'[show the commands being sent to the server]' \ + {-q,--quiet}'[do not write any messages]' \ + {-v,--verbose}'[write a lot of output]' \ + '--min-mxid-age=[minimum multixact ID age of tables to vacuum]' \ + '--min-xid-age=[minimum transaction ID age of tables to vacuum]' \ + '--skip-locked[skip relations that cannot be immediately locked]' \ + '--analyze-in-stages[only update optimizer statistics, in multiple]' \ + '--help[show this help, then exit]' \ + '--version[output version information, then exit]' \ + '--maintenance-db=[alternate maintenance database]' \ + '1:PostgreSQL database:_pgsql_databases' +} + +_createuser () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-e,--echo}'[display SQL queries]' \ + {-c,--connection-limit=}'[connection limit for role (default: no limit)]' \ + {-d,--createdb}'[role can create new databases]' \ + {-D,--no-createdb}'[role cannot create databases]' \ + {-E,--encrypted}'[encrypt stored password]' \ + {-g,--role=}'[new role will be a member of this role]' \ + {-i,--inherit}'[role inherits privileges of roles it is a member of (default)]' \ + {-I,--no-inherit}'[role does not inherit privileges]' \ + {-l,--login}'[role can login (default)]' \ + {-L,--no-login}'[role cannot login]' \ + {-N,--unencrypted}'[do not encrypt stored password]' \ + {-P,--pwprompt}'[assign a password to new role]' \ + {-r,--createrole}'[role can create new roles]' \ + {-R,--no-createrole}'[role cannot create roles]' \ + {-s,--superuser}'[role will be superuser]' \ + {-S,--no-superuser}'[role will not be superuser]' \ + --interactive'[prompt for missing role name and attributes rather than using defaults]' \ + --replication'[role can initiate replication]' \ + --no-replication'[role cannot initiate replication]' \ +} + +_dropuser () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + "$_pgsql_common_opts[@]" \ + {-e,--echo}'[display SQL queries]' \ + {-q,--quiet}'[non verbose mode]' \ + {-i,--interactive}'[prompt before deleting anything, and prompt for role name if not specified]' \ + ':PostgreSQL user:_pgsql_users' +} + +_initdb () { + local curcontext="$curcontext" state line expl + typeset -A opt_args + + _arguments -C -s \ + {--auth=,-A+}':default authentication method for local connections:_values "auth methods" $_pgsql_auth_methods[@]' \ + --auth-host=':default authentication method for local TCP/IP connections:_values "auth methods" $_pgsql_auth_methods[@]' \ + --auth-local=':default authentication method for local-socket connections:_values "auth methods" $_pgsql_auth_methods[@]' \ + {-D+,--pgdata=}':location for this database cluster:_files' \ + {-E+,--encoding=}':set default encoding for new databases:' \ + --locale=':set default locale for new databases:' \ + --lc-collate=':set the default locale for collate:' \ + --lc-ctype=':set the default locale for ctype:' \ + --lc-messages=':set the default locale for messages:' \ + --lc-monetary=':set the default locale for monetary:' \ + --lc-numeric=':set the default locale for numeric:' \ + --lc-time=':set the default local for time:' \ + --no-locale'[equivalent to --locale=C]' \ + --pwfile=':read password for the new superuser from file:_files' \ + {-T+,--text-search-config=}'[default text search configuration]' \ + {-U+,--username=NAME}':database superuser name:' \ + {-W,--pwprompt}'[prompt for a password for the new superuser]' \ + {-X+,--xlogdir=}':location for the transaction log directory:_files' \ + {-d,--debug}'[generate lots of debugging output]' \ + -L+':where to find the input files:_files' \ + {-k,--data-checksums}':use data page checksums:' \ + {-n,--noclean}'[do not clean up after errors]' \ + {-N,--nosync}':do not wait for changes to be written safely to disk:' \ + {-s,--show}'[show internal settings]' \ + {-S,--sync-only}'[only sync data directory]' \ + ':location for this database cluster:_files' +} + +_pgsql_utils () { + local _pgsql_common_opts _pgsql_auth_methods + + _pgsql_common_opts=( + {-\?,--help}'[display help]' + {-h+,--host=}':database host:_pgsql_host_or_dir' + {-p+,--port=}':database port number:_pgsql_ports' + {-U+,--username=}':connect as user:_pgsql_users' + {-W,--password}'[prompt for password]' + --role='[do SET ROLE before restore]' + ) + + _pgsql_auth_methods=( + trust + reject + md5 + password + gss + sspi + krb5 + ident + peer + ldap + radius + cert + pam + ) + + case "$service" in + psql) _psql "$@" ;; + pg_dump) _pg_dump "$@" ;; + pg_restore) _pg_restore "$@" ;; + createdb) _createdb "$@" ;; + dropdb) _dropdb "$@" ;; + vacuumdb) _vacuumdb "$@" ;; + createuser) _createuser "$@" ;; + dropuser) _dropuser "$@" ;; + initdb) _initdb "$@" ;; + esac +} + +_pgsql_utils "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_phing b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_phing new file mode 100644 index 00000000..afdaf3ed --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_phing @@ -0,0 +1,94 @@ +#compdef phing +# ------------------------------------------------------------------------------ +# Copyright (c) Igor M. Timoshenko +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Phing (http://phing.info). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Igor Timoshenko +# +# ------------------------------------------------------------------------------ + +_phing() { + local context curcontext="$curcontext" state line ret=1 + integer NORMARG + typeset -A opt_args + + # Follow http://phing.info/docs/stable/webhelp/sec.commandlineargs.html for more information + _arguments \ + '(-h -help)'{-h,-help}'[display the help screen]' \ + '(-v -version)'{-v,-version}'[print version information and exit]' \ + '(-l -list)'{-l,-list}'[list all available targets in buildfile (excluding targets that have their hidden attribute set to true)]' \ + '(-q -quiet)'{-q,-quiet}'[quiet operation, no output at all]' \ + '-verbose[verbose, give some more output]' \ + '-debug[output debug information]' \ + '-logfile [use given file for log]:file:_files' \ + '-D[set the property to the specified value to be used in the buildfile]' \ + '-find []:file:_files' \ + '-buildfile [specify an alternate buildfile name. Default is build.xml]:file:_files' \ + '-logger [specify an alternate logger. Default is phing.listener.DefaultLogger. Other options include phing.listener.NoBannerLogger, phing.listener.AnsiColorLogger, phing.listener.XmlLogger, phing.listener.TargetLogger and phing.listener.HtmlColorLogger]' \ + '-propertyfile [load properties from the specified file]:file:_files' \ + '(-v --version)'{-v,--version}'[show version]' \ + '1: :->targets' \ + '*:: :->args' \ + && ret=0 + + case $state in + targets) + local buildfile; buildfile=build.xml + if [[ ! -f $buildfile ]] + then + ret=0 + else + local targets; targets=($(sed -nE "/xzfiles" \ + '(- 1 *)'-x"[Extract one file very fast]:filepath:->filepath" \ + '(- 1 *)'-d"[Decompress]:file:->xzfiles" \ + "-i[Input]:file:->files" \ + "-o[Output]:output:->outputxz" \ + "-p[Use a maximum of NUM CPU-intensive threads]:cpu:->cpus" \ + "-t[Don't assume input is in tar format]" \ + "-k[Keep original input (do not remove it)]" \ + "-e[Use "extreme" compression, which is much slower]" \ + "-f[Set the size of each compression block, relative to the LZMA dictionary size (default is 2.0)]:num" \ + "-q[Set the number of blocks to allocate for the compression queue (default is 1.3 * cores + 2)]:num" \ + '1:inputfile:->files' \ + '2:outputfile' \ + '*: : :->args' \ + + case "$state" in + (cmds) + _describe -t commands 'commands' commands + ;; + (xzfiles) + _pixz_compressed_files + _describe -t files 'files' files + ;; + (files) + _files + ;; + (cpus) + local num_cpus cores + num_cpus=$(nproc) + cores=() + for i in {1..$num_cpus}; do + cores+=($i) + done + _describe -t cores 'cores' cores + ;; + (filepath) + ;; + (*) + ;; + esac +} + +_pixz + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pkcon b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pkcon new file mode 100644 index 00000000..440a7fef --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pkcon @@ -0,0 +1,137 @@ +#compdef pkcon +# ------------------------------------------------------------------------------ +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for pkcon (http://www.packagekit.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# +# ------------------------------------------------------------------------------ + + +local -a options +options=( + '--version[Show the program version and exit]' + '--filter[Set the filter, e.g. installed]' + "--root[Set the install root, e.g. '/' or '/mnt/ltsp']" + '(-n --nowait)'{-n,--nowait}'[Exit without waiting for actions to complete]' + '(-y --noninteractive)'{-g,--noninteractive}'[Install the packages without asking for confirmation]' + '--background[Run the command using idle network bandwidth and also using less power]' + '(-p --plain)'{-p,--plain}'[Print to screen a machine readable output, rather than using animated widgets]' + '(-c --cache-age)'{-c,--cache-age}"[The maximum metadata cache age. Use -1 for 'never'.]" + '(-h --help)'{-h,--help}'[Show help options.]' + '(-v --verbose)'{-v,--verbose}'[Show debugging information for all files]' +) + +local -a actions +actions=( + 'accept-eula' + 'get-roles' + 'get-distro-upgrades' + 'get-categories' + 'get-actions' + 'get-groups' + 'get-filters' + 'get-transactions' + 'get-time' + 'search' + 'install' + 'install-local' + 'download' + 'remove' + 'update' + 'refresh' + 'resolve' + 'get-updates' + 'get-depends' + 'get-requires' + 'get-details' + 'get-files' + 'get-update-detail' + 'get-packages' + 'repo-list' + 'repo-enable' + 'repo-disable' + 'repo-set-data' + 'what-provides' + 'upgrade-system' +) + +local context state line expl cmd +local -A opt_args + +integer i=2 +while (( i < $#words )); do + case "$words[$i]" in + -*) + # skip option + (( i++ )) + continue + ;; + esac + + if [[ -z "$cmd" ]]; then + cmd="$words[$i]" + words[$i]=() + (( CURRENT-- )) + fi + (( i++ )) +done + +if [[ -z "$cmd" ]] +then + _arguments -s -w : $options \ + ":action:($actions)" + return +fi + +case "$cmd" in + search) + _arguments : $options \ + ':type:(name details group file)' \ + ':data: :' + ;; + refresh) + _arguments -s -w : $options \ + '--force' + ;; + *) + _arguments -s -w : $options + ;; +esac +return 1 + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_play b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_play new file mode 100644 index 00000000..c135328c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_play @@ -0,0 +1,190 @@ +#compdef play +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Play! framework 1.2.2 (http://www.playframework.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# * Mario Fernandez (https://github.com/sirech) +# +# ------------------------------------------------------------------------------ + + +_play() { + local context curcontext="$curcontext" state line + typeset -A opt_args + + local ret=1 + + _arguments -C \ + '1: :_play_cmds' \ + '*::arg:->args' \ + && ret=0 + + case $state in + (args) + curcontext="${curcontext%:*:*}:play-cmd-$words[1]:" + case $line[1] in + (build-module|list-modules|lm|check|id) + _message 'no more arguments' && ret=0 + ;; + (dependencies|deps) + _arguments \ + '1:: :_play_apps' \ + '(--debug)--debug[Debug mode (even more information logged than in verbose mode)]' \ + '(--jpda)--jpda[Listen for JPDA connection. The process will be suspended until a client is plugged to the JPDA port.]' \ + '(--sync)--sync[Keep lib/ and modules/ directory synced. Delete unknown dependencies.]' \ + '(--verbose)--verbose[Verbose Mode]' \ + && ret=0 + ;; + (clean|javadoc|jd|out|pid|secret|stop) + _arguments '1:: :_play_apps' && ret=0 + ;; + (help) + _arguments '1: :_play_cmds -F "(cp deps ec idea jd st lm nb nm help antify evolutions evolutions:apply evolutions:markApplied evolutions:resolve)"' && ret=0 + ;; + (status|st) + _arguments \ + '1:: :_play_apps' \ + '(--url)--url[If you want to monitor an application running on a remote server, specify the application URL using this option]:URL:_urls' \ + '(--secret)--secret[You can provide your own secret key using this option]:Secret key' \ + && ret=0 + ;; + (new) + _arguments \ + '1: :_play_apps' \ + '(--with)--with[Automatically enable this set of module for the newly created application]:Modules list:_play_modules_list' \ + && ret=0 + ;; + (install) + _arguments '1:Play! module:_play_modules_dash_versions' && ret=0 + ;; + (new-module) + _arguments '1:Module directory:_files -/' && ret=0 + ;; + (test|precompile|run|start|war|auto-test|classpath|cp|eclipsify|ec|idealize|idea|modules|netbeansify|nb) + local cmd_args; cmd_args=( + '1:: :_play_apps' + '(--deps)--deps[Resolve and install dependencies before running the command]' + ) + case $line[1] in + (precompile|run|start|restart|war) + local app_dir="$line[2]" + [[ -d "$app_dir" ]] || app_dir=. + [[ -f "$app_dir/conf/application.conf" ]] && cmd_args+=('--'${(u)${(M)$(<$app_dir/conf/application.conf):#%*}%%.*}'[Use this ID to run the application (override the default framework ID)]') + ;| + (test|run) + cmd_args+=('(-f)-f[Disable the JPDA port checking and force the jpda.port value]') + ;| + (war) + cmd_args+=( + '(-o --output)'{-o,--output}'[The path where the WAR directory will be created. The contents of this directory will first be deleted]:output directory:_files -/' + '(--zip)--zip[By default, the script creates an exploded WAR. If you want a zipped archive, specify the --zip option]' + '(--exclude)--exclude[Excludes a list of colon separated directories]:excluded directories list:_play_colon_dirs_list' + ) + ;| + (test|run|start|restart|war) + cmd_args+=('*:Java option') + ;; + esac + _arguments "$cmd_args[@]" && ret=0 + ;; + *) + _call_function ret _play_cmd_$words[1] && ret=0 + (( ret )) && _message 'no more arguments' + ;; + esac + ;; + esac +} + +# FIXME Completes only core commands, some modules add commands too (eg Maven). Where do we get them ? +# FIXME Parse 'play help' and 'play help ' (for aliases) instead of hard-coding. +(( $+functions[_play_cmds] )) || +_play_cmds() { + local commands; commands=( + 'antify:Create a build.xml file for this project' + 'auto-test:Automatically run all application tests' + 'build-module:Build and package a module' + 'check:Check for a release newer than the current one' + {classpath,cp}':Display the computed classpath' + 'clean:Delete temporary files (including the bytecode cache)' + {dependencies,deps}':Resolve and retrieve project dependencies' + {eclipsify,ec}':Create all Eclipse configuration files' + 'evolutions:Run the evolution check' + 'evolutions\:apply:Automatically apply pending evolutions' + 'evolutions\:mark:AppliedMark pending evolutions as manually applied' + 'evolutions\:resolve:Resolve partially applied evolution' + 'help:Display help on a specific command' + 'id:Define the framework ID' + {idealize,idea}':Create all IntelliJ Idea configuration files' + 'install:Install a module' + {javadoc,jd}':Generate your application Javadoc' + {list-modules,lm}':List modules available from the central modules repository' + 'modules:Display the computed modules list' + {netbeansify,nb}':Create all NetBeans configuration files' + 'new:Create a new application' + {new-module,nm}':Create a module' + 'out:Follow logs/system.out file' + 'pid:Show the PID of the running application' + 'precompile:Precompile all Java sources and templates to speed up application start-up' + 'restart:Restart the running application' + 'run:Run the application in the current shell' + 'secret:Generate a new secret key' + 'start:Start the application in the background' + {status,st}':Display the running application status' + 'stop:Stop the running application' + 'test:Run the application in test mode in the current shell' + 'war:Export the application as a standalone WAR archive' + ) + _describe -t commands 'Play! command' commands "$@" +} + +(( $+functions[_play_apps] )) || +_play_apps() { + _wanted application expl 'Play! application directory' _files -/ +} + +(( $+functions[_play_modules] )) || +_play_modules() { + local modules; modules=(${(ps:,:)${${${(S)${(f)$(_call_program modules $service list-modules)}//\]*\[/,}%%\]*}##*\[}}) + _describe -t modules 'Play! module' modules "$@" +} + +(( $+functions[_play_modules_dash_versions] )) || +_play_modules_dash_versions() { + local ret=1 + if compset -P '*-'; then + local versions; versions=(${(ps:,:)${${${${${(f)$(_call_program versions $service list-modules)}##*${IPREFIX%-}\]}#*Versions:}%%"~"*}//[[:space:]]/}}) + _describe -t module-versions "${IPREFIX%-} module versions" versions && ret=0 + else + _wanted modules expl 'Play! module' _play_modules -qS- && ret=0 + fi +} + +(( $+functions[_play_modules_list] )) || +_play_modules_list() { + compset -P '*,'; compset -S ',*' + _wanted module-list expl 'Play! modules list' _play_modules -qS, +} + +(( $+functions[_play_colon_dirs_list] )) || +_play_colon_dirs_list() { + compset -P '*:'; compset -S ':*' + _wanted directories-list expl 'Directories list' _files -/ -qS: +} + +_play "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pm2 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pm2 new file mode 100644 index 00000000..6b8c63a9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pm2 @@ -0,0 +1,179 @@ +#compdef pm2 +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for pm2 (http://pm2.keymetrics.io/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Myoungdo Park +# +# ------------------------------------------------------------------------------ + +local -a _1st_arguments + +_1st_arguments=( + "start:start and daemonize an app" + "trigger:trigger process action" + "deploy:deploy your json" + "startOrRestart:start or restart JSON file" + "startOrReload:start or gracefully reload JSON file" + "pid:return pid of [app_name] or all" + "stop:stop a process" + "restart:restart a process" + "scale:scale up/down a process in cluster mode depending on total_number param" + "profile\:mem:Sample PM2 heap memory" + "profile\:cpu:Profile PM2 cpu" + "reload:reload processes (note that its for app using HTTP/HTTPS)" + "id:get process id by name" + "inspect:inspect a process" + "delete:stop and delete a process from pm2 process list" + "sendSignal:send a system signal to the target process" + "ping:ping pm2 daemon - if not up it will launch it" + "updatePM2:update in-memory PM2 with local PM2" + "install:install or update a module and run it forever" + "module\:update:update a module and run it forever" + "module\:generate:Generate a sample module in current folder" + "uninstall:stop and uninstall a module" + "package:Check & Package TAR type module" + "publish:Publish the module you are currently on" + "set:sets the specified config " + "multiset:multiset eg \"key1 val1 key2 val2\"" + "get:get value for " + "config:get / set module config values" + "unset:clears the specified config " + "report:give a full pm2 report for https\://github.com/Unitech/pm2/issues" + "link:link with the pm2 monitoring dashboard" + "unlink:unlink with the pm2 monitoring dashboard" + "monitor:monitor target process" + "unmonitor:unmonitor target process" + "open:open the pm2 monitoring dashboard" + "plus:enable pm2 plus" + "login:Login to pm2 plus" + "logout:Logout from pm2 plus" + "web:launch a health API on 0.0.0.0\:9615" + "dump:dump all processes for resurrecting them later" + "cleardump:Create empty dump file" + "send:send stdin to " + "attach:attach stdin/stdout to application identified by " + "resurrect:resurrect previously dumped processes" + "unstartup:disable the pm2 startup hook" + "startup:enable the pm2 startup hook" + "logrotate:copy default logrotate configuration" + "ecosystem:generate a process conf file. (mode = null or simple)" + "reset:reset counters for process" + "describe:describe all parameters of a process id" + "list:list all processes" + "jlist:list all processes in JSON format" + "prettylist:print json in a prettified JSON" + "monit:launch termcaps monitoring" + "imonit:launch legacy termcaps monitoring" + "dashboard:launch dashboard with monitoring and logs" + "flush:flush logs" + "reloadLogs:reload all logs" + "logs:stream logs file. Default stream all logs" + "kill:kill daemon" + "pull:updates repository for a given app" + "forward:updates repository to the next commit for a given app" + "backward:downgrades repository to the previous commit for a given app" + "deepUpdate:performs a deep update of PM2" + "serve:serve a directory over http via port" + "examples:display pm2 usage examples" +) + +local -a id_names + +_id_names() { + local app_list + app_list=`pm2 list -m` + + local -a names ids + names=(`echo $app_list | grep '+---' | awk '{print $2}'`) + ids=(`echo $app_list | grep 'pm2 id' | awk '{print $4}'`) + + if (( ${#ids} > 0 )); then + for i in {1..${#ids}}; do + id_names+=( "${ids[i]}:${names[i]}" ) + done + fi +} + +_arguments \ + '(-v --version)'{-v,--version}'[output version]' \ + '(-h --help)'{-h,--help}'[output usage information]' \ + '*:: :->subcmds' && return 0 + +if (( CURRENT == 1 )); then + _describe "command" _1st_arguments + return +fi + +local -a id_comp id_all_comp id_all_files_comp start_options logs_options +id_comp=('1: :->id_comp') +id_all_comp=('1: :->id_all_comp') +id_all_files_comp=('1: :->id_all_files_comp') +start_options=( + '--watch[Watch folder for changes]' + '--fresh[Rebuild Dockerfile]' + '--daemon[Run container in Daemon mode (debug purposes)]' + '--container[Start application in container mode]' + '--dist[with --container; change local Dockerfile to containerize all files in current directory]' + '--image-name[with --dist; set the exported image name]' + '--node-version[with --container, set a specific major Node.js version]' + '--dockerdaemon[for debugging purpose]' + '(-h --help)'{-h,--help}'[output usage information]' + $id_all_files_comp +) +logs_options=( + '--json[json log output]' + '--format[formated log output]' + '--raw[raw output]' + '--err[only shows error output]' + '--out[only shows standard output]' + '--lines[output the last N lines, instead of the last 15 by default]' + '--timestamp[add timestamps (default format YYYY-MM-DD-HH:mm:ss)]' + '--nostream[print logs without launching the log stream]' + '(-h --help)'{-h,--help}'[output usage information]' + $id_all_comp +) + +case "$words[1]" in + start) + _arguments $start_options && return 0 + ;; + logs) + _arguments $logs_options && return 0 + ;; + stop|restart|delete|reload|reset) + _arguments $id_all_comp && return 0 + ;; + env|inspect|monitor|unmonitor|discribe) + _arguments $id_comp && return 0 + ;; + deploy|startOrRestart|startOrReload) + _files ;; +esac + +case "$state" in + id_comp) + _id_names + _alternative \ + 'args:app args:(($id_names))' + ;; + id_all_comp) + _id_names + id_names+=(all) + _alternative \ + 'args:app args:(($id_names))' + ;; + id_all_files_comp) + _id_names + id_names+=(all) + _alternative \ + 'args:app args:(($id_names))' \ + 'files:filename:_files' + ;; +esac diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_port b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_port new file mode 100644 index 00000000..260d37a9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_port @@ -0,0 +1,278 @@ +#compdef port +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for MacPorts (http://www.macports.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Matt Cable +# * Sorin Ionescu +# * Aljaž Srebrnič +# ----------------------------------------------------------------------------- +# License +# ------- +# +# Copyright (c) 2016, Matt Cable, Sorin Ionescu, Aljaž Srebrnič +# 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 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 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. +# +# ------------------------------------------------------------------------------ + +_port() { + local -a upgrade_options revupgrade_options select_options \ + actions pseudo_common pseudo_advanced port_prefix + + port_prefix=$(which port | sed 's|/bin/port||') + + actions=( + 'activate\:Activate\ the\ given\ ports' + 'archive\:Archive\ the\ given\ ports,\ i.e.\ install\ the\ port\ image\ but\ do\ not\ activate' + 'archivefetch\:Fetch\ archive\ for\ the\ given\ ports' + 'build\:Build\ the\ given\ ports' + 'bump\:Update\ the\ outdated\ checksums\ of\ a\ Portfile' + 'cat\:Writes\ the\ Portfiles\ of\ the\ given\ ports\ to\ stdout' + 'checksum\:Compares\ the\ checksums\ for\ the\ downloaded\ files\ of\ the\ given\ ports' + 'clean\:Removes\ files\ associated\ with\ the\ given\ ports' + 'configure\:Configure\ the\ given\ ports' + 'contents\:\Returns\ a\ list\ of\ files\ installed\ by\ given\ ports' + 'deactivate\:Deactivates\ the\ given\ ports' + 'dependents\:Returns\ a\ list\ of\ installed\ dependents\ for\ each\ of\ the\ given\ ports' + 'deps\:Display\ a\ dependency\ listing\ for\ the\ given\ ports' + 'destroot\:Destroot\ the\ given\ ports' + 'diagnose\:Detects\ common\ issues' + 'dir\:Returns\ the\ directories\ of\ the\ given\ ports' + 'distcheck\:Checks\ if\ the\ given\ ports\ can\ be\ fetched\ from\ all\ of\ its\ master_sites' + 'distfiles\:Returns\ a\ list\ of\ distfiles\ for\ the\ given\ port' + 'dmg\:Creates\ a\ dmg\ for\ each\ of\ the\ given\ ports' + 'dpkg\:Creates\ a\ dpkg\ for\ each\ of\ the\ given\ ports' + 'echo\:Returns\ the\ list\ of\ ports\ the\ argument\ expands\ to' + 'edit\:Edit\ given\ ports' + 'extract\:Extract\ the\ downloaded\ files\ of\ the\ given\ ports' + 'fetch\:Downloaded\ distfiles\ for\ the\ given\ ports' + 'file\:Returns\ the\ path\ to\ the\ Portfile\ for\ each\ of\ the\ given\ ports' + 'gohome\:Opens\ the\ homepages\ of\ the\ given\ ports\ in\ your\ browser' + 'help\:Displays\ short\ help\ texts\ for\ the\ given\ actions' + 'info\:Returns\ information\ about\ the\ given\ ports ' + 'install\:Installs\ the\ given\ ports' + 'installed\:List\ installed\ versions\ of\ the\ given\ port,\ or\ all\ installed\ ports\ if\ no\ port\ is\ given' + 'lint\:Checks\ if\ the\ Portfile\ is\ lint-free\ for\ each\ of\ the\ given\ ports' + 'list\:List\ the\ available\ version\ for\ each\ of\ the\ given\ ports' + 'livecheck\:Checks\ if\ a\ new\ version\ of\ the\ software\ is\ available' + 'load\:Interface\ to\ launchctl(1)\ for\ ports\ providing\ startup\ items' + 'location\:Returns\ the\ install\ location\ for\ each\ of\ the\ given\ ports' + 'log\:Shows\ main\ log\ for\ given\ ports' + 'logfile\:Returns\ the\ log\ file\ path\ for\ each\ of\ the\ given\ ports' + 'mdmg\:Creates\ a\ dmg\ containing\ an\ mpkg\ for\ each\ of\ the\ given\ ports\ and\ their\ dependencies' + 'mirror\:Fetches\ distfiles\ for\ the\ given\ ports' + 'mpkg\:Creates\ an\ mpkg\ for\ each\ of\ the\ given\ ports\ and\ their\ dependencies' + 'notes\:Displays\ informational\ notes\ for\ each\ of\ the\ given\ ports' + 'outdated\:Returns\ a\ list\ of\ outdated\ ports' + 'patch\:Applies\ patches\ to\ each\ of\ the\ given\ ports' + 'pkg\:Creates\ a\ pkg\ for\ each\ of\ the\ given\ ports' + 'platform\:Returns\ the\ current\ platform\ that\ port\ is\ running\ on' + 'provides\:Return\ which\ port\ provides\ each\ of\ the\ files\ given' + 'rdependents\:Recursive\ version\ of\ dependents' + 'rdeps\:Display\ a\ recursive\ dependency\ listing\ for\ the\ given\ ports' + 'reclaim\:Reclaims\ disk\ space' + 'rev-upgrade\:Scan\ for\ broken\ binaries\ in\ the\ installed\ ports\ and\ rebuild\ them\ as\ needed' + 'rpm\:Creates\ a\ rpm\ for\ each\ of\ the\ given\ ports' + 'search\:Search\ for\ a\ port' + 'select\:Select\ between\ multiple\ versions\ of\ a\ versioned\ port' + 'selfupdate\:Upgrade\ MacPorts\ itself\ and\ run\ the\ sync\ target' + 'setrequested\:Marks\ each\ of\ the\ given\ ports\ as\ requested' + 'space\:Show\ the\ disk\ space\ used\ by\ the\ given\ ports' + 'srpm\:Creates\ a\ srpm\ for\ each\ of\ the\ given\ ports' + 'sync\:Synchronize\ the\ set\ of\ Portfiles' + 'test\:Run\ tests\ on\ each\ of\ the\ given\ ports' + 'unarchive\:Unarchive\ the\ destroot\ of\ the\ given\ ports\ from\ installed\ images' + 'uninstall\:Uninstall\ the\ given\ ports' + 'unload\:Interface\ to\ launchctl(1)\ for\ ports\ providing\ startup\ items' + 'unsetrequested\:Marks\ each\ of\ the\ given\ ports\ as\ unrequested' + 'upgrade\:Upgrades\ the\ given\ ports\ to\ the\ latest\ version' + 'url\:Returns\ the\ URL\ for\ each\ of\ the\ given\ ports' + 'usage\:Returns\ basic\ usage\ of\ the\ port\ command' + 'variants\:Returns\ a\ list\ of\ variants\ provided\ by\ the\ given\ ports,\ with\ descriptions\ if\ present' + 'version\:Returns\ the\ version\ of\ MacPorts' + 'work\:Returns\ the\ path\ to\ the\ work\ directory\ for\ each\ of\ the\ given\ ports' + ) + + pseudo_common=(all current active inactive actinact installed uninstalled outdated + obsolete requested unrequested leaves rleaves) + + pseudo_advanced=('variants:' 'variant:' 'description:' 'depends:' + 'depends_lib:' 'depends_run:' 'depends_build:' 'depends_fetch:' 'depends_extract:' + 'portdir:' 'homepage:' 'epoch:' 'platforms:' 'platform:' 'name:' 'long_description:' + 'maintainers:' 'maintainer:' 'categories:' 'category:' 'version:' 'revision:' 'license:') + + select_options=( + '--summary:Display summary of selected options' + '--list:List available versions for the group' + '--set:Select the given version for the group' + '--show:Show which version is currently selected for the group (default if none given)' + ) + + revupgrade_options=('--id-loadcmd-check:Run more checks against a special loadcommand in Mach-O binaries') + + upgrade_options=( + '--force\:Ignore\ circumstances\ that\ would\ normally\ cause\ ports\ to\ be\ skipped\ \(e.g.\ not\ outdated\).' \ + '--enforce-variants\:If\ the\ installed\ variants\ do\ not\ match\ those\ requested,\ upgrade\ even\ if\ the\ port\ is\ not\ outdated.' \ + '--no-replace\:Do\ not\ replace\ one\ port\ with\ another\ according\ to\ the\ replaced_by\ field.' \ + ) + + _arguments -s -C \ + '-v[Verbose mode (generate verbose messages)]' \ + '-d[Debug mode (generate debugging messages, implies -v)]' \ + '-q[Quiet mode (suppress messages)]' \ + "-n[Don't upgrade dependencies (affects upgrade and install)]" \ + "-R[Also upgrade dependents (only affects upgrade) - note that this does not upgrade dependents' dependencies]" \ + '-u[Uninstall non-active ports when upgrading and uninstalling]' \ + '-f[Force mode (ignore state file)]' \ + '-o[Honor state files even if the Portfile has been modified since (called -o because it used to mean "older")]' \ + '-s[Source-only mode (build and install from source, do not attempt to fetch binary archives)]' \ + '-b[Binary-only mode (build and install from binary archives, ignore source, abort if no archive available)]' \ + '-c[Autoclean mode (execute clean after install)]' \ + "-k[Keep mode (don't autoclean after install)]" \ + '-D[Specify portdir]' \ + '-F[Read and process the file of commands specified by the argument.]' \ + '-p[Despite any errors encountered, proceed to process multiple ports and commands.]' \ + '-y[Perform a dry run.]' \ + '-t[Enable trace mode debug facilities on platforms that support it (macOS).]' \ + "1:Port actions:(($actions))" \ + '::Per-action arguments:_port_dispatch' \ + && return 0 +} + +_port_dispatch() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + zstyle ":completion:${curcontext}:" cache-policy ${cache_policy:-_port_caching_policy} + + case "$words[2]" in + provides) + _files + ;; + search) + _message 'pattern' + ;; + help) + _describe -t actions 'Port actions' actions + ;; + select) + _call_function - _port_select + ;; + contents|deactivate|setrequested|space|uninstall|unsetrequested) + # Cache the list of installed ports. + if ( [[ ${+_port_installed_packages} -eq 0 ]] || _cache_invalid PORT_INSTALLED_PACKAGES ) && + ! _retrieve_cache PORT_INSTALLED_PACKAGES; + then + _port_installed_packages=( $(_call_program path-all "port -q echo installed") ) + _store_cache PORT_INSTALLED_PACKAGES _port_installed_packages + fi + _alternative \ + "ports:Installed ports:($_port_installed_packages)" \ + "pseudo-common:Common Pseudo-portnames:($pseudo_common)" \ + "pseudo-advanced:Advanced Pseudo-portnames:($pseudo_advanced)" + ;; + upgrade) + # No good reason to actually cache outdated ports list + local outdated_packages + outdated_packages=( $(_call_program path-outdated "port -q echo outdated") ) + _alternative -- \ + "upgrade-options:Upgrade options:(($upgrade_options))" \ + "ports:Outdated ports:($outdated_packages)" \ + "pseudo-common:Common Pseudo-portnames:($pseudo_common)" \ + "pseudo-advanced:Advanced Pseudo-portnames:($pseudo_advanced)" + ;; + rev-upgrade) + if (( CURRENT == 3 )); then + _describe 'Rev-upgrade options' revupgrade_options + fi + ;; + outdated|sync) + # No need to complete anything more here. + return 0; + ;; + selfupdate) + _all_labels 'Selfupdate options' '--nosync' + ;; + *) + # Cache the list of all ports. + if ( [[ ${+_port_available_packages} -eq 0 ]] || _cache_invalid PORT_AVAILABLE_PACKAGES ) && + ! _retrieve_cache PORT_AVAILABLE_PACKAGES; + then + _port_available_packages=( $(_call_program path-all "port -q echo all") ) + _store_cache PORT_AVAILABLE_PACKAGES _port_available_packages + fi + _alternative \ + "ports:Available ports:($_port_available_packages)" \ + "pseudo-common:Common Pseudo-portnames:($pseudo_common)" \ + "pseudo-advanced:Advanced Pseudo-portnames:($pseudo_advanced)" + ;; + esac +} + +_port_select() { + if (( CURRENT == 3 )); then + _describe 'Port select options' select_options + elif (( CURRENT == 4 )); then + local select_group + select_group=() + for f in $port_prefix/etc/select/*; do + select_group+=$(basename $f) + done + _describe "Port select groups" select_group + elif [[ $CURRENT -eq 5 && $words[3] == '--set' ]]; then + local select_variants + select_variants=("${(f)$(port select --list $words[4] | sed -e '1 d' -e 's/^[ \t]*//' -e 's/ (active)$//')}") + _describe "Port select group $words[4] variants" select_variants + fi +} + +stat -f%m . > /dev/null 2>&1 +if [ "$?" = 0 ]; then + stat_cmd=(stat -f%Z) +else + stat_cmd=(stat --format=%Z) +fi + +_port_caching_policy() { + local reg_time comp_time check_file + case "${1##*/}" in + PORT_INSTALLED_PACKAGES) + check_file=$port_prefix/var/macports/registry/registry.db + ;; + PORT_AVAILABLE_PACKAGES) + check_file=${$(port dir MacPorts)%/*/*}/PortIndex + ;; + esac + reg_time=$($stat_cmd $check_file) + comp_time=$($stat_cmd $1) + return $(( reg_time < comp_time )) +} + +_port "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_protoc b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_protoc new file mode 100644 index 00000000..4570c6b3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_protoc @@ -0,0 +1,84 @@ +#compdef protoc +# ------------------------------------------------------------------------------ +# Copyright (c) 2020 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for protoc -- protocol buffer description file compiler +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Shohei YOSHIDA (https://github.com/syohex) +# +# ------------------------------------------------------------------------------ + +__protoc_files() { + if compset -P '@'; then + _files + else + _files -g '*.proto' + fi +} + +_protoc() { + _arguments -C \ + '(- : *)'{-h,--help}'[Show summary of options]' \ + '(- : *)--version[Show version of program]' \ + '*'{-I,--proto_path}'=[Specify the directory which to search for imports]:import_dir:_files -/' \ + '--encode=[Read a text-format message of given type from stdin and write it in binary to stdout]' \ + '--decode=[Read a text-format message of given type from stdin and write it in binary to stdout]' \ + '--decode_raw[Read an arbitrary protocol message from stdin and write the raw tag/value pairs in text format to stdout]' \ + '--descriptor_set_in=[Specifies a delimited list of FILES each containing a FileDescriptorSet]:desc_in:_files' \ + {-o,--descriptor_set_out}'=[Writes a FileDescriptorSet to FILE]:desc_out:_files' \ + '--include_imports[When using --descriptor_set_out, also include all dependencies of the input files in the set]' \ + '--include_source_info[When using --descriptor_set_out, do not strip SourceCodeInfo from the FileDescriptorProto]' \ + '--dependency_out=[Write a dependency output file in the format expected by make]:dep_out:_files' \ + '--error_format=[Set the format in which print errors]:error_format:(gcc msvc)' \ + '--print_free_field_numbers[Print the free field numbers of the messages]'\ + '--plugin=[Specifies a plugin executable to use]:plugin:_files' \ + '--cpp_out=[Generate C++ header and source]:out_dir:_files -/' \ + '--csharp_out=[Generate C# source file]:out_dir:_files -/' \ + '--java_out=[Generate Java source file]:out_dir:_files -/' \ + '--js_out=[Generate JavaScript source]:out_dir:_files -/' \ + '--objc_out=[Generate Objective C header and source]:out_dir:_files -/' \ + '--php_out=[Generate PHP source file]:out_dir:_files -/' \ + '--python_out=[Generate Python source file]:out_dir:_files -/' \ + '--ruby_out=[Generate Ruby source file]:out_dir:_files -/' \ + '*: :__protoc_files' +} + +_protoc "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pygmentize b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pygmentize new file mode 100644 index 00000000..bc623048 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_pygmentize @@ -0,0 +1,147 @@ +#compdef pygmentize +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for pygmentize. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hideo Hattori +# +# ------------------------------------------------------------------------------ + +_pygmentize() { + local context state line + + _arguments -s -S \ + '-h[prints help]:' \ + '-V[prints the package version]:' \ + '-L[lists lexers, formatters, styles or filters]:args:(lexers formatters styles filters):' \ + '-f[formatter]:FORMATTER:_get_formatters' \ + '-o[output file]:FILENAME:_gnu_generic' \ + '(-h -V -L -f -o -S -F -H -g -l)-N[guesses and prints out a lexer name based solely on given filename]:FILENAME:_files:' \ + '(-h -V -L -o -F -H -g -l -N)-S[style]:STYLE:_get_styles' \ + '-F[filter]:STYLE:_get_filters' \ + '-H[prints detailed help for the object of type ]:' \ + '(-g)-l[lexer]::LEXER:_get_lexers:' \ + '(-l)-g[attempt to guess the lexer from the file contents]' \ + '*:args:_gnu_generic' +} + + +_get_filters() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _pygmentize_caching_policy + fi + + if ( [[ ${+_pygmentize_filters} -eq 0 ]] || _cache_invalid pygmentize_filters ) \ + && ! _retrieve_cache pygmentize_filters; then + _pygmentize_filters=(${${(f)"$(pygmentize -L filters | grep '* ' | cut -c3- | sed -e 's/:$//')"}}) + _store_cache pygmentize_filters _pygmentize_filters + fi + + local expl + _wanted pygmentize_filters expl 'pygmentize filters' compadd -a _pygmentize_filters +} + + +(( $+functions[_pygmentize_get_formatters] )) || +_get_formatters() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _pygmentize_caching_policy + fi + + if ( [[ ${+_pygmentize_formatter} -eq 0 ]] || _cache_invalid pygmentize_formatter ) \ + && ! _retrieve_cache pygmentize_formatter; then + _pygmentize_formatter=(${${(f)"$(pygmentize -L formatters | grep '* ' | cut -c3- | sed -e 's/, /\n/g' -e 's/:$//')"}}) + _store_cache pygmentize_formatter _pygmentize_formatter + fi + + local expl + _wanted pygmentize_formatter expl 'pygmentize formatters' compadd -a _pygmentize_formatter +} + + +_get_lexers() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _pygmentize_caching_policy + fi + + if ( [[ ${+_pygmentize_lexer} -eq 0 ]] || _cache_invalid pygmentize_lexer ) \ + && ! _retrieve_cache pygmentize_lexer; then + _pygmentize_lexer=(${${(f)"$(pygmentize -L lexers | grep '* ' | cut -c3- | sed -e 's/, /\n/g' -e 's/:$//')"}}) + _store_cache pygmentize_lexer _pygmentize_lexer + fi + + local expl + _wanted pygmentize_lexer expl 'pygmentize lexers' compadd -a _pygmentize_lexer +} + + +_get_styles() { + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + if [[ -z "$cache_policy" ]]; then + zstyle ":completion:${curcontext}:" cache-policy _pygmentize_caching_policy + fi + + if ( [[ ${+_pygmentize_style} -eq 0 ]] || _cache_invalid pygmentize_style ) \ + && ! _retrieve_cache pygmentize_style; then + _pygmentize_style=(${${(f)"$(pygmentize -L styles | grep '* ' | cut -c3- | sed -e 's/:$//')"}}) + _store_cache pygmentize_style _pygmentize_style + fi + + local expl + _wanted pygmentize_style expl 'pygmentize styles' compadd -a _pygmentize_style +} + + +_pygmentize_caching_policy() { + local -a oldp + oldp=( "$1"(Nmh+24) ) # 24 hour + (( $#oldp )) +} + +_pygmentize "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rails b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rails new file mode 100644 index 00000000..6dc85d45 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rails @@ -0,0 +1,624 @@ +#compdef rails +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Ruby on Rails (http://rubyonrails.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Kazuya Takeshima (https://github.com/mitukiii) +# +# ------------------------------------------------------------------------------ + + +_rails() { + local context state line curcontext="$curcontext" + + if (( CURRENT > 2 )); then + (( CURRENT-- )) + shift words + _call_function - "_rails_${words[1]}" || _nothing + else + __rails_commands + fi +} + +__rails_commands() { + local context state line curcontext="$curcontext" + + local -a rails_options + __rails_setup_rails_options + + _arguments -C \ + $rails_options \ + ': :->command' + + case "$state" in + command) + local -a commands + local application_directory + __rails_setup_application_directory + + if [ -n "$application_directory" ]; then + commands=( + {generate,g}'[Generate new code]' + {console,c}'[Start the Rails console]' + {server,s}'[Start the Rails server]' + {dbconsole,db}'[Start a console for the database specified in config/database.yml]' + application'[Generate the Rails application code]' + {destroy,d}'[Undo code generated with "generate"]' + benchmarker'[See how fast a piece of code runs]' + profiler'[Get profile information from a piece of code]' + plugin'[Install a plugin]' + {runner,r}'[Run a piece of code in the application environment]' + {test,t}'[Run tests]' + ) + else + commands=( + new'[Create a new Rails application]' + ) + fi + + _values 'command' $commands + ;; + esac +} + +__rails_setup_application_directory() { + application_directory="$(pwd)" + + while [ -n "$application_directory" ]; do + if [ -f "${application_directory}/script/rails" -o -f "${application_directory}/bin/rails" ]; then + return + fi + application_directory="${application_directory%/*}" + done + + application_directory= +} + +__rails_setup_rails_options() { + rails_options=( + {-h,--help}'[Show this help message and quit]' + {-v,--version}'[Show Rails version number and quit]' + ) +} + +__rails_setup_runtime_options() { + runtime_options=( + '(-f --force)'{-f,--force}'[Overwrite files that already exist]' + '(-p --pretend)'{-p,--pretend}'[Run but do not make any changes]' + '(-q --quiet)'{-q,--quiet}'[Suppress status output]' + '(-s --skip)'{-s,--skip}'[Skip files that already exist]' + ) +} + +__rails_setup_generators_options() { + local -a runtime_options + __rails_setup_runtime_options + + generators_options=( + $runtime_options + --skip-namespace'[Skip namespace (affects only isolated applications)]' + --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]" + ) +} + +__rails_setup_model_generators_options() { + local -a generators_options + __rails_setup_generators_options + + model_generators_options=( + $generators_options + '(-o --orm)'{-o,--orm=}'[Orm to be invoked]:orm' + ) +} + +__rails_setup_resource_generators_options() { + local -a model_generators_options + __rails_setup_model_generators_options + + resource_generators_options=( + $model_generators_options + --force-plural'[Forces the use of a plural ModelName]' + --resource-route'[Indicates when to generate resource route]: :__rails_boolean' + ) +} + +__rails_boolean() { + _values 'boolean' 'true' 'false' +} + +__rails_migration_fields() { + if compset -P '*:*:'; then + _values 'index' 'index' 'uniq' + else + if compset -P '*:'; then + _values -s ':' 'type' 'string' 'text' 'integer' 'float' 'decimal' 'datetime' 'timestamp' 'time' 'date' 'binary' 'boolean' 'references' + else + _guard '[[:alnum:]_]#' 'field' + fi + fi +} + +_rails_generate() { + local context state line curcontext="$curcontext" + + if (( CURRENT > 2 )); then + (( CURRENT-- )) + shift words + _call_function - "_rails_generate_${words[1]}" || _rails_generate_default + else + __rails_generate_commands + fi +} + +_rails_g() { + _rails_generate +} + +__rails_generate_commands() { + local context curcontext="$curcontext" update_policy + + zstyle -s ":completion:${curcontext}:" cache-policy update_policy + if [ -z "$update_policy" ]; then + zstyle ":completion:${curcontext}:" cache-policy _rails_generate_commands_caching_policy + fi + + local application_directory + __rails_setup_application_directory + local cache_name + cache_name="rails/${application_directory##*/}/all_generators" + if ! _retrieve_cache ${cache_name}; then + local -a all_generators + all_generators=($(_call_program rails_generators rails generate 2> /dev/null | awk '/^ [a-zA-Z_]+/{ print $1 }')) + _store_cache ${cache_name} all_generators + fi + + local -a rails_generators + rails_generators=(${all_generators:#*:*}) + _describe -t rails_generators 'rails generator' rails_generators + + local -a -U namespaces + local namespace + local -a generators + namespaces=(${(R)${(M)all_generators:#*:*}%:*}) + for namespace in $namespaces; do + generators=(${${(M)all_generators:#${namespace}:*}/:/\\:}) + _describe -t ${namespace}_generators "${namespace/_/ } generator" generators + done +} + +_rails_generate_commands_caching_policy() { + local application_directory + __rails_setup_application_directory + + if [ "${application_directory}/Gemfile" -nt "$1" ]; then + return 0 + fi + + local -a oldp + oldp=( "$1"(Nmw+1) ) + (( $#oldp )) +} + +_rails_generate_default() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '*:argument' +} + +_rails_generate_assets() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '(-j --javascripts)'{-j,--javascripts}'[Generate JavaScripts]: :__rails_boolean' \ + '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \ + '(-je --javascript-engine)'{-je,--javascript-engine=}'[Engine for JavaScripts]:javascript engine' \ + '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \ + ': :_guard "^-*" "name"' +} + +_rails_generate_controller() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \ + '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \ + --helper'[Indicates when to generate helper]: :__rails_boolean' \ + --assets'[Indicates when to generate assets]: :__rails_boolean' \ + ': :_guard "^-*" "name"' \ + '*: :_guard "^-*" "action"' +} + +_rails_generate_generator() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + --namespace'[Namespace generator under lib/generators/name]: :__rails_boolean' \ + ': :_guard "^-*" "name"' +} + +_rails_generate_helper() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \ + ': :_guard "^-*" "name"' \ +} + +_rails_generate_integration_test() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + --integration-tool='[Integration tool to be invoke]:integration tool' \ + ': :_guard "^-*" "name"' \ +} + +_rails_generate_jbuilder() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + ': :_guard "^-*" "name"' \ + '*: :__rails_migration_fields' +} + +_rails_generate_mailer() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \ + '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \ + ': :_guard "^-*" "name"' \ + '*: :_guard "^-*" "method"' +} + +_rails_generate_migration() { + local -a modelgenerators_options + __rails_setup_model_generators_options + + _arguments \ + $model_generators_options \ + ': :_guard "^-*" "name"' \ + '*: :__rails_migration_fields' +} + +_rails_generate_model() { + _rails_generate_migration +} + +_rails_generate_observer() { + local -a model_generators_options + __rails_setup_model_generators_options + + _arguments \ + $model_generators_options \ + ': :_guard "^-*" "name"' +} + +_rails_generate_performance_test() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + --performance-tool='[Performance tool to be invoked]:performance tool' \ + ': :_guard "^-*" "name"' \ +} + +_rails_generate_resource() { + local context state line curcontext="$curcontext" + + local -a resource_generators_options + __rails_setup_resource_generators_options + + _arguments -C \ + $resource_generators_options \ + '(-c --resource-controller)'{-c,--resource-controller=}'[Resource controller to be invoked]:name' \ + '(-a --actions)'{-a,--actions=}'[Actions for the resource controller]: :->actions' \ + ': :->name' \ + '*: :->fields' + + if (( words[(I)(--actions=*|-a)] > 0 && words[(I)(--actions=*|-a)] == words[(I)-*] )); then + state=actions + fi + + case "$state" in + actions) + _guard "[[:alnum:]_]#" "actions" + ;; + name) + _guard "^-*" "name" + ;; + fields) + __rails_migration_fields + ;; + esac +} + +_rails_generate_scaffold() { + local -a resource_generators_options + __rails_setup_resource_generators_options + + _arguments \ + $resource_generators_options \ + '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \ + '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \ + '(-c --scaffold-controller)'{-c,--scaffold-controller=}'[Scaffold controller to be invoked]:name' \ + --assets'[Indicates when to generate assets]:boolean:(true false)' \ + ': :_guard "^-*" "name"' \ + '*: :__rails_migration_fields' +} + +_rails_generate_scaffold_controller() { + local -a model_generators_options + __rails_setup_model_generators_options + + _arguments \ + $model_generators_options \ + '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \ + '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \ + --helper'[Indicates when to generate helper]: :__rails_boolean' \ + ': :_guard "^-*" "name"' +} + +_rails_generate_session_migration() { + local -a model_generators_options + __rails_setup_model_generators_options + + _arguments \ + $model_generators_options \ + ': :_guard "^-*" "name"' +} + +_rails_generate_task() { + local -a generators_options + __rails_setup_generators_options + + _arguments \ + $generators_options \ + ': :_guard "^-*" "name"' \ + '*: :_guard "^-*" "action"' +} + +_rails_console() { + _arguments \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-s --sandbox)'{-s,--sandbox}'[Rollback database modifications on exit]' \ + --debugger'[Enable ruby-debugging for the console]' +} + +_rails_c() { + _rails_console +} + +_rails_server() { + _arguments \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-p --port)'{-p,--port=}'[Runs Rails on the specified port]: :_guard "[[\:digit\:]]#" "port"' \ + '(-b --binding)'{-b,--binding=}'[Binds Rails to the specified ip]:ip:_hosts' \ + '(-c --config)'{-c,--config=}'[Use custom rackup configuration file]:file:_files -g "*.ru"' \ + '(-d --daemon)'{-d,--daemon}'[Make server run as a Daemon]' \ + '(-u --debugger)'{-u,--debugger}'[Enable ruby-debugging for the server]' \ + '(-e --environment)'{-e,--environment=}'[Specifies the environment to run this server under (test/development/production)]:name:(test development production)' \ + '(-P --pid)'{-P,--pid=}'[Specifies the PID file]:pid:_files -g "*.pid"' +} + +_rails_s() { + _rails_server +} + +_rails_dbconsole() { + _arguments \ + '(- *)'--help'[Show this help message]' \ + '(-p --include-password)'{-p,--include-password}'[Automatically provide the password from database.yml]' \ + --mode'[Automatically put the sqlite3 database in the specified mode (html, list, line, column)]:mode:(html list line column)' \ + --header +} + +_rails_new() { + local context state line curcontext="$curcontext" + + local _a rails_options runtime_options + __rails_setup_rails_options + __rails_setup_runtime_options + + _arguments -C \ + $rails_options \ + $runtime_options \ + '(-r --ruby)'{-r,--ruby=}'[Path to the Ruby binary of your choice]:path' \ + '(-b --builder)'{-b,--builder=}'[Path to a application builder (can be a filesystem path or URL)]: :->path_or_url' \ + '(-m --template)'{-m,--template=}'[Path to an application template (can be a filesystem path or URL)]: :->path_or_url' \ + --skip-gemfile"[Don't create a Gemfile]" \ + --skip-bundle"[Don't run bundle install]" \ + '(-G --skip-git)'{-G,--skip-git}'[Skip Git ignores and keeps]' \ + '(-O --skip-active-record)'{-O,--skip-active-record}'[Skip Active Record files]' \ + '(-S --skip-sprockets)'{-S,--skip-sprockets}'[Skip Sprockets files]' \ + '(-d --database)'{-d,--database=}'[Preconfigure for selected database]:database:(mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc)' \ + '(-j --javascript)'{-j,--javascript=}'[Preconfigure for selected JavaScript library]:javascript' \ + '(-J --skip-javascript)'{-J,--skip-javascript}'[Skip JavaScript files]' \ + --dev'[Setup the application with Gemfile pointing to your Rails checkout]' \ + --edge'[Setup the application with Gemfile pointing to Rails repository]' \ + '(-T --skip-test-unit)'{-T,--skip-test-unit}'[Skip Test::Unit files]' \ + --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]" \ + ':app path:_directories' + + case "$state" in + path_or_url) + _alternative \ + 'files:path:_files -g "*.rb"' \ + 'url:url:_urls' + ;; + esac +} + +_rails_application() { + _rails_new +} + +_rails_db() { + _rails_dbconsole +} + +_rails_destroy() { + _rails_generate +} + +_rails_d() { + _rails_destroy +} + +_rails_benchmarker() { + _arguments \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \ + '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \ + '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "wall_time" "memory" "objects" "gc_runs" "gc_time"' \ + '*: :_guard "^-*" "ruby code"' +} + +_rails_profiler() { + _arguments \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \ + '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \ + '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "process_time" "memory" "objects"' \ + '(-f --formats)'{-f,--formats}'[Formats to output to]: :_values -s "," "formats" "flat" "graph" "html" "call_tree" "call_stack"' \ + '*: :_guard "^-*" "ruby code"' +} + +_rails_plugin() { + local context state line curcontext="$curcontext" + + if (( CURRENT > 2 )); then + (( CURRENT-- )) + shift words + _call_function - "_rails_plugin_${words[1]}" || _nothing + else + __rails_plugin_commands + fi +} + +__rails_plugin_commands() { + _values 'plugin command' \ + install'[Install plugin(s) from known repositories or URLs]' \ + remove'[Uninstall plugins]' \ + new +} + +_rails_plugin_install() { + _arguments \ + '(-x --externals)'{-x,--externals}'[Use svn:externals to grab the plugin. Enables plugin updates and plugin versioning]' \ + '(-o --checkout)'{-o,--checkout}'[Use svn checkout to grab the plugin. Enables updating but does not add a svn:externals entry]' \ + '(-e --export)'{-e,--export}'[Use svn export to grab the plugin. Exports the plugin, allowing you to check it into your local repository. Does not enable updates or add an svn:externals entry]' \ + '(-q --quiet)'{-q,--quiet}'[Suppresses the output from installation. Ignored if -v is passed (rails plugin -v install ...)]' \ + '(-r --revision)'{-r,--revision=}'[Checks out the given revision from subversion or git. Ignored if subversion/git is not used]:revision' \ + '(-f --force)'{-f,--force}"[Reinstalls a plugin if it's already installed]" \ + '*:plugin:_urls' +} + +_rails_plugin_remove() { + local -a plugins + + plugins=($(_call_program rails_plugins ls -1 vendor/plugins)) + + _describe -t plugins 'plugin' plugins +} + +_rails_plugin_new() { + _rails_new +} + +_rails_runner() { + local context state line curcontext="$curcontext" + + _arguments -C \ + '(- *)'{-h,--help}'[Show this help message]' \ + '(-e --environment)'{-e,--environment=}'[Specifies the environment for the runner to operate under (test/development/production)]:name:(test development production)' \ + ': :->code_or_path' + + case "$state" in + code_or_path) + _alternative \ + 'files:filename:_files -g "*.rb"' \ + 'codes:ruby code:_guard "^-*" "ruby code"' + ;; + esac +} + +_rails_r() { + _rails_runner +} + +_rails_test() { + local context state line curcontext="$curcontext" + + _arguments -C \ + ': :->path' + + case "$state" in + path) + _alternative \ + 'files:filename:_files -g "*.rb"' + ;; + esac +} + +_rails_t() { + _rails_test +} + +_rails "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ralio b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ralio new file mode 100644 index 00000000..cedbb023 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ralio @@ -0,0 +1,146 @@ +#compdef ralio +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ralio (https://github.com/oesmith/ralio), a +# Rally client +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Peter Yates +# +# ------------------------------------------------------------------------------ + +_ralio () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' \ + + case $state in + (command) + + local -a subcommands + subcommands=( + "backlog:Show the product backlog" + "sprint:Show the current team iteration" + "show:Show related information for an individual story, defect or task" + "open:Open a story, defect or task in a web browser" + "start:Set a task, defect or story state to in-progress and assign it to you" + "finish:Set a task, defect or story state to completed and assign it to you" + "abandon:Set a task, defect or story state to defined and clear the owner" + "block:Set a task, defect or story state to blocked" + "unblock:Set a task, defect or story state to unblocked" + "current:Show your current tasks and stories" + "point:Set the points for a story or defect" + "task:Allow you to create and delete story tasks." + "configure:Set your Rally configurations." + ) + _describe -t commands 'ralio commands' subcommands + + _arguments -C \ + {-V,--version}"[display version information]" \ + {-h,--help}"[output usage information]" + ;; + + (options) + case $line[1] in + + + (sprint) + _arguments \ + "-t[Show tasks]" \ + "-p[Project name]" \ + "-f[Filter results]" + ;; + + (start | finish) + _arguments \ + '--pair[Pair programming partner]' \ + "--resolution[Resolution status]" \ + "--rootcause[Root cause]" + ;; + + (task) + __ralio-task + ;; + + esac + ;; + esac +} + +__ralio-task () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + + local -a subcommands + subcommands=( + "create:Create a new task" + "delete:Delete a task" + ) + _describe -t commands 'ralio task' subcommands + ;; + + (options) + case $line[1] in + + (create|delete) + _arguments \ + -n"[Name of the new task]" \ + -t"[Name of the parent task]" + ;; + + esac + ;; + esac +} + +_ralio "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_redis-cli b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_redis-cli new file mode 100644 index 00000000..d11c06f7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_redis-cli @@ -0,0 +1,184 @@ +#compdef redis-cli rec +# ------------------------------------------------------------------------------ +# Copyright (c) 2009-2015 Robby Russell and contributors (see +# https://github.com/robbyrussell/oh-my-zsh/contributors) +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Redis (http://redis.io). +# +# Source: https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/redis-cli +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Alexandru Totolici (https://github.com/totolici) +# +# ------------------------------------------------------------------------------ + + +local -a _1st_arguments +_1st_arguments=( + 'append:append a value to a key' + 'auth:authenticate to the server' + 'bgrewriteeaof:asynchronously rewrite the append-only file' + 'bgsave:asynchornously save the dataset to disk' + 'blpop:remove and get the first element in a list, or block until one is available' + 'brpop:remove and get the last element in a list, or block until one is available' + 'brpoplpush:pop a value from a list, push it to another list and return it; or block until one is available' + # 'config get:get the value of a configuration parameter' + # 'config set:set a configuration parameter to the given value' + # 'config resetstat: reset the stats returned by INFO' + 'dbsize:return the number of keys in the selected database' + # 'debug object:get debugging information about a key' + # 'debug setgfault:make the server crash' + 'decr:decrement the integer value of a key by one' + 'decrby:decrement the integer value of a key by the given number' + 'del:delete a key' + 'discard:discard all commands issued after MULTI' + 'echo:echo the given string' + 'exec:execute all commands issued after a MULTI' + 'exists:determine if a key exists' + 'expire:set the time to live for a key, in seconds' + 'expireat:set the expiration for a key as a UNIX timestamp' + 'flushall:remove all keys from all databases' + 'flushdb:remove all keys from the current database' + 'get:get the value of a key' + 'getbit:returns the bit value at offset in the string value stored at key' + 'getrange:get a substring of the string stored at a key' + 'getset:set the string value of a key and return its old value' + 'hdel:delete a hash field' + 'hexists:determine if a hash field exists' + 'hget:get the value of a hash field' + 'hgetall:get all the fields and values in a hash' + 'hincrby:increment the integer value of a hash field by the given number' + 'hkeys:get all the fields in a hash' + 'hlen:get the number of fields in a hash' + 'hmget:get the values of all the given hash fields' + 'hmset:set multiple hash fields to multiple values' + 'hset:set the string value of a hash field' + 'hsetnx:set the value of a hash field, only if the field does not exist' + 'hvals:get all the values in a hash' + 'incr:increment the integer value of a key by one' + 'incrby:increment the integer value of a key by the given number' + 'info:get information and statistics about the server' + 'keys:find all keys matching the given pattern' + 'lastsave:get the UNIX timestamp of the last successful save to disk' + 'lindex:get an element from a list by its index' + 'linsert:insert an element before or after another element in a list' + 'llen:get the length of a list' + 'lpop:remove and get the first element in a list' + 'lpush:prepend a value to a list' + 'lpushx:prepend a value to a list, only if the list exists' + 'lrange:get a range of elements from a list' + 'lrem:remove elements from a list' + 'lset:set the value of an element in a list by its index' + 'ltrim:trim a list to the specified range' + 'mget:get the values of all the given keys' + 'monitor:listen for all requests received by the server in real time' + 'move:move a key to another database' + 'mset:set multiple keys to multiple values' + 'msetnx:set multiple keys to multiple values, only if none of the keys exist' + 'multi:mark the start of a transaction block' + 'object:inspect the internals of Redis objects' + 'persist:remove the expiration from a key' + 'ping:ping the server' + 'psubscribe:listen for messages published to channels matching the given patterns' + 'publish:post a message to a channel' + 'punsubscribe:stop listening for messages posted to channels matching the given patterns' + 'quit:close the connection' + 'randomkey:return a random key from the keyspace' + 'rename:rename a key' + 'renamenx:rename a key, only if the new key does not exist' + 'rpop:remove and get the last element in a list' + 'rpoplpush:remove the last element in a list, append it to another list and return it' + 'rpush:append a value to a list' + 'rpushx:append a value to a list, only if the list exists' + 'sadd:add a member to a set' + 'save:synchronously save the dataset to disk' + 'scard:get the number of members in a set' + 'sdiff:subtract multiple sets' + 'sdiffstore:subtract multiple sets and store the resulting set in a key' + 'select:change the selected database for the current connection' + 'set:set the string value of a key' + 'setbit:sets or clears the bit at offset in the string value stored at key' + 'setex:set the value and expiration of a key' + 'setnx:set the value of a key, only if the key does not exist' + 'setrange:overwrite part of a string at key starting at the specified offset' + 'shutdown:synchronously save the dataset to disk and then shut down the server' + 'sinter:intersect multiple sets' + 'sinterstore:intersect multiple sets and store the resulting set in a key' + 'sismember:determine if a given value is a member of a set' + 'slaveof:make the server a slave of another instance, or promote it as master' + 'smembers:get all the members in a set' + 'smove:move a member from one set to another' + 'sort:sort the elements in a list, set or sorted set' + 'spop:remove and return a random member from a set' + 'srandmember:get a random member from a set' + 'srem:remove a member from a set' + 'strlen:get the length of the value stored in a key' + 'subscribe:listen for messages published to the given channels' + 'sunion:add multiple sets' + 'sunionstore:add multiple sets and store the resulting set in a key' + 'ttl:get the time to live for a key' + 'type:determine the type stored at key' + 'unsubscribe:stop listening for messages posted to the given channels' + 'unwatch:forget about all watched keys' + 'watch:watch the given keys to determine execution of the MULTI/EXEC block' + 'zadd:add a member to a sorted set, or update its score if it already exists' + 'zcard:get the number of members in a sorted set' + 'zcount:count the members in a sorted set with scores within the given values' + 'zincrby:increment the score of a member in a sorted set' + 'zinterstore:intersect multiple sorted sets and store the resulting sorted set in a new key' + 'zrange:return a range of members in a sorted set, by index' + 'zrangebyscore:return a range of members in a sorted set, by score' + 'zrank:determine the index of a member in a sorted set' + 'zrem:remove a member from a sorted set' + 'zremrangebyrank:remove all members in a sorted set within the given indexes' + 'zremrangebyscore:remove all members in a sorted set within the given scores' + 'zrevrange:return a range of members in a sorted set, by index, with scores ordered from high to low' + 'zrevrangebyscore:return a range of members in a sorted set, by score, with scores ordered from high to low' + 'zrevrank:determine the index of a member in a sorted set, with scores ordered from high to low' + 'zscore:get the score associated with the given member in a sorted set' + 'zunionstore:add multiple sorted sets and store the resulting sorted set in a new key' +) + +local expl + +_arguments \ + '(-v --version)'{-v,--version}'[show version]' \ + '(-h --help)'{-h,--help}'[show help]' \ + '*:: :->subcmds' && return 0 + +if (( CURRENT == 1 )); then + _describe -t commands "redis-cli subcommand" _1st_arguments + return +fi + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rfkill b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rfkill new file mode 100644 index 00000000..1c881334 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rfkill @@ -0,0 +1,102 @@ +#compdef rfkill +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Vincent Bernat +# Copyright (c) 2014 Github zsh-users - http://github.com/zsh-users +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for rfkill (http://wireless.kernel.org/en/users/Documentation/rfkill) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Vincent Bernat +# +# ------------------------------------------------------------------------------ + +_rfkill_types() { + declare -a devicetypes + devicetypes=(all + "wifi:Wireless LAN" "wlan:Wireless LAN" + "bluetooth:Bluetooth" + "uwb:Ultrawide Band" + "ultrawideband:Ultrawide Band" + "wimax:Wimax" + "wwan:3G" + "gps:GPS" + "fm:FM Radio" + "nfc:NFC") + _describe -t device-types "device types" devicetypes +} + +_rfkill_devices() { + declare -a devices + devices=(${(M)${(f)"$(rfkill list)"}:#[0-9]*}) + _rfkill_types + _describe -t devices "devices" devices +} + +_rfkill_commands () { + declare -a subcommands + subcommands=(help event list block unblock) + _describe -t rfkill-commands "rfkill command" subcommands +} + +_rfkill_subcommand () { + case "$words[1]" in + (help|event) + ;; + (list) + _arguments ':types:_rfkill_types' + ;; + (block|unblock) + _arguments ':device:_rfkill_devices' + ;; + (*) + _message 'Unknown subcommand' + esac +} + +_rfkill () { + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + '--version[get version]:' \ + '(-): :->command' \ + '(-)*:: :->arguments' + + case $state in + (command) + _rfkill_commands + ;; + (arguments) + curcontext=${curcontext%:*:*}:rfkill-$words[1]: + _rfkill_subcommand + ;; + esac +} + +_rfkill "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rkt b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rkt new file mode 100644 index 00000000..d4ce0216 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rkt @@ -0,0 +1,369 @@ +#compdef rkt +# ------------------------------------------------------------------------------ +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for rkt (https://coreos.com/rkt/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# +# ------------------------------------------------------------------------------ + +typeset -A opt_args +autoload -U regexp-replace + +_rkt() { + _arguments \ + '--debug[print out more debug information to stderr]' \ + '--dir=[rkt data directory]:data directory:_files -/' \ + '--insecure-options=[comma-separated list of security features to disable]:option:{_values -s , none image tls ondisk http all}' \ + '--local-config=[local configuration directory]:configuration directory:_files -/' \ + '--system-config=[system configuration directory]:configuration directory:_files -/' \ + '--trust-keys-from-https[automatically trust gpg keys fetched from https]' \ + '--user-config=[user configuration directory]:configuration directory:_files -/' \ + '--help' \ + '1: :_rkt_cmds' \ + '*:: :->rkt_cmd_args' + + case $state in + rkt_cmd_args) + case $words[1] in + help) + _arguments \ + '1: :_rkt_cmds' \ + '*:: :->rkt_help_args' \ + ;; + + api-service) + _arguments \ + '--listen=[address to listen for client API requests]:address' \ + ;; + + cat-manifest) + _arguments \ + '--pretty-print[apply indent to format the output]' \ + '--uuid-file=[read pod UUID from file instead of argument]:uuid file:_files' \ + '1:POD:_rkt_pods' \ + ;; + + config) + _arguments \ + '--pretty-print[apply indent to format the output]' \ + ;; + + enter) + _arguments \ + '--app=:appname' \ + '1:POD:_rkt_pods' \ + ;; + + export) + _arguments \ + '--app=:appname' \ + '--overwrite[overwrite output ACI]' \ + '1:POD:_rkt_pods' \ + '2:OUTPUT_ACI_FILE:_files' \ + ;; + + fetch) + _arguments \ + '--full[print the full image hash after fetching]' \ + '--no-store[fetch images ignoring the local store]' \ + '--signature=[local signature file to use in validating the preceding image]:signature:_files' \ + '--store-only[use only available images in the store]' \ + ;; + + gc) + _arguments \ + '--grace-period=[duration to wait before discarding inactive pods from garbage]:duration' \ + '--expire-prepared=[duration to wait before expiring prepared pods]:duration' \ + '--mark-only[move to the garbage directories without actually deleting]' \ + ;; + + image) + _arguments \ + '1: :_rkt_image_cmds' \ + '*:: :->rkt_image_args' + ;; + + list) + _arguments \ + '--full[use long output format]' \ + '--no-legend[suppress a legend with the list]' \ + ;; + + metadata-service) + _arguments \ + '--listen-port=[listen port]:port' \ + ;; + + prepare) + # TODO: autocomplete stage1 images + _arguments \ + '--caps-remove=[capability to remove]:capability' \ + '--caps-retain=[capability to retain]:capability' \ + '--cpu=[cpu limit for the preceding image]:cpu limit' \ + '--cpu-shares=[assign the specified CPU time share weight]:weight' \ + "--environment=[set the app's environment variables]:variable key=value" \ + '--exec=[override the exec command for the preceding image]:command' \ + '--group=[group override for the preceding image]:group' \ + '--inherit-env[inherit all environment variables not set by apps]' \ + '--memory=[memory limit for the preceding image]:memory' \ + '--mount=[mount point binding a volume to a path within an app]:mount point' \ + '--name=[set the name of the app]:name' \ + '--no-overlay[disable overlay filesystem]' \ + '--oom-score-adj=[oom-score-adj isolator override]:oom-score-adj' \ + '--pod-manifest=[the path to the pod manifest]:manifest:_files' \ + '--port=[ports to expose on the host]:NAME\:HOSTPORT' \ + '--private-users[run within user namespaces]' \ + '--quiet[suppress superfluous output on stdout, print only the UUID on success]' \ + '--readonly-rootfs=[mount rootfs read-only]:fs' \ + '--set-env=[an environment variable to set for apps]:NAME=VALUE' \ + '--set-env-file=[the path to an environment variables file]:file:_files' \ + '--signature=[local signature file to use in validating the preceding image]:signature:_files' \ + '--stage1-from-dir=[a filename of an image in stage1 images directory to use as stage1]:image' \ + '--stage1-hash=[a hash of an image to use as stage1]:image hash' \ + '--stage1-name=[a name of an image to use as stage1]:image name' \ + '--stage1-path=[a path to an image to use as stage1]:image path:_files' \ + '--stage1-url=[a URL to an image to use as stage1]:image url' \ + '--supplementary-gids=[supplementary group IDs override for the preceding image]:group IDs' \ + '--user=[user override for the preceding image]:user' \ + "--user-annotation=[set the app's annotations]:annotation key=value" \ + "--user-label=[set the app's labels]:label key=value" \ + '--volume=[volumes to make available in the pod]:volume' \ + '--working-dir=[override the working directory of the preceding image]:working directory:_files -/' \ + '1:IMAGE:_rkt_images' \ + ;; + + rm) + _arguments \ + '--uuid-file=[read pod UUID from file instead of argument]:uuid file:_files' \ + '1:POD:_rkt_pods' \ + ;; + + run) + _arguments \ + '--caps-remove=[capability to remove]:capability' \ + '--caps-retain=[capability to retain]:capability' \ + '--cpu=[cpu limit for the preceding image]:cpu limit' \ + '--cpu-shares=[assign the specified CPU time share weight]:weight' \ + '--dns=[name servers to write in /etc/resolv.conf]:name servers' \ + '--dns-domain=[DNS domain to write in]:domain' \ + '--dns-opt=[DNS options to write in /etc/resolv.conf]:dns options' \ + '--dns-search=[DNS search domains to write in /etc/resolv.conf]:search domains' \ + "--environment=[set the app's environment variables]:variable key=value" \ + '--exec=[override the exec command for the preceding image]:command' \ + '--group=[group override for the preceding image]:group' \ + "--hostname=[pod's hostname]:hostname" \ + "--hosts-entry=[entries to add to the pod-wide /etc/hosts. Pass 'host' to use the host's /etc/hosts]:hosts entry" \ + '--inherit-env[inherit all environment variables not set by apps]' \ + '--interactive[run pod interactively]' \ + '--mds-register[register pod with metadata service]' \ + '--memory=[memory limit for the preceding image]:memory limit' \ + '--mount=[mount point binding a volume to a path within an app]:mount point' \ + '--name=[set the name of the app]:name' \ + "--net=[configure the pod's networking]:networks" \ + '--no-overlay[disable overlay filesystem]' \ + '--pod-manifest=[the path to the pod manifest]:manifest:_files' \ + '--port=[ports to expose on the host]:NAME\:HOSTPORT' \ + '--private-users[run within user namespaces]' \ + '--set-env=[an environment variable to set for apps]:NAME=VALUE' \ + '--set-env-file=[the path to an environment variables file]:file:_files' \ + '--signature=[local signature file to use in validating the preceding image]:signature:_files' \ + '--stage1-from-dir=[a filename of an image in stage1 images directory to use as stage1]:image' \ + '--stage1-hash=[a hash of an image to use as stage1]:image hash' \ + '--stage1-name=[a name of an image to use as stage1]:image name' \ + '--stage1-path=[a path to an image to use as stage1]:image path:_files' \ + '--stage1-url=[a URL to an image to use as stage1]:image url' \ + '--supplementary-gids=[supplementary group IDs override for the preceding image]:group IDs' \ + '--user=[user override for the preceding image]:user' \ + "--user-annotation=[set the app's annotations]:annotation key=value" \ + "--user-label=[set the app's labels]:label key=value" \ + '--uuid-file-save=[write out pod UUID to specified file]:uuid file:_files' \ + '--volume=[volumes to make available in the pod]:volume' \ + '--working-dir=[override the working directory of the preceding image]:working directory:_files -/' \ + '1:IMAGE:_rkt_images' \ + ;; + + run-prepared) + _arguments \ + '--dns=[name servers to write in /etc/resolv.conf]:name servers' \ + '--dns-domain=[DNS domain to write in]:domain' \ + '--dns-opt=[DNS options to write in /etc/resolv.conf]:dns options' \ + '--dns-search=[DNS search domains to write in /etc/resolv.conf]:search domains' \ + "--hostname=[pod's hostname]:hostname" \ + "--hosts-entry=[entries to add to the pod-wide /etc/hosts. Pass 'host' to use the host's /etc/hosts]:hosts entry" \ + '--interactive[run pod interactively]' \ + '--mds-register[register pod with metadata service]' \ + "--net=[configure the pod's networking]:networks" \ + '1:POD:_rkt_pods' \ + ;; + + status) + _arguments \ + '--format=[choose the output format]:format:(json json-pretty)' \ + '--wait[toggles waiting for the pod to exit]' \ + '--wait-ready[toggles waiting until the pod is ready]' \ + '1:POD:_rkt_pods' \ + ;; + + stop) + _arguments \ + '--force[forced stopping]' \ + '--uuid-file=[read pod UUID from file instead of argument]:uuid file:_files' \ + '1:POD:_rkt_pods' \ + ;; + + trust) + _arguments \ + '--insecure-allow-http[allow HTTP use for key discovery and/or retrieval]' \ + '--prefix=[prefix to limit trust to]:prefix' \ + '--root[add root key from filesystem without a prefix]' \ + '--skip-fingerprint-review[accept key without fingerprint confirmation]' \ + ;; + esac + ;; + esac + + case $state in + rkt_help_args) + case $words[1] in + image) + _arguments \ + '1: :_rkt_image_cmds' + ;; + esac + ;; + + rkt_image_args) + case $words[1] in + cat-manifest) + _arguments \ + '--pretty-print[apply indent to format the output]' \ + '1:IMAGE:_rkt_images' \ + ;; + + export) + _arguments \ + '--overwrite[overwrite output ACI]' \ + '1:IMAGE:_rkt_images' \ + '2:OUTPUT_ACI_FILE:_files' \ + ;; + + extract|render) + _arguments \ + '--overwrite[overwrite output ACI]' \ + '--rootfs-only[extract rootfs only]' \ + '1:IMAGE:_rkt_images' \ + '2:OUTPUT_DIR:_files -/' \ + ;; + + gc) + _arguments \ + '--grace-period=[duration to wait before discarding inactive pods from garbage]:duration' \ + ;; + + list) + _arguments \ + '--fields=[comma-separated list of fields to display]:fields:{_values -s , id name importtime lastused size latest}' \ + '--full[use long output format]' \ + '--no-legend[suppress a legend with the list]' \ + ;; + + rm) + _arguments \ + '*:IMAGE:_rkt_images' \ + ;; + esac + ;; + esac +} + +_rkt_cmds() { + local -a commands + commands=( + 'api-service:Run API service' + 'cat-manifest:Inspect and print the pod manifest' + 'config:Print configuration for each stage in JSON format' + 'enter:Enter the namespaces of an app within a rkt pod' + 'export:Export an app from an exited pod to an ACI file' + 'fetch:Fetch image(s) and store them in the local store' + 'gc:Garbage collect rkt pods no longer in use' + 'image:Operate on image(s) in the local store' + 'list:List pods' + 'metadata-service:Run metadata service' + 'prepare:Prepare to run image(s) in a pod in rkt' + 'rm:Remove all files and resources associated with an exited pod' + 'run:Run image(s) in a pod in rkt' + 'run-prepared:Run a prepared application pod in rkt' + 'status:Check the status of a rkt pod' + 'stop:Stop a pod' + 'trust:Trust a key for image verification' + 'version:Print the version and exit' + 'help:Help about any command' + ) + _describe 'command' commands +} + +_rkt_image_cmds() { + local -a commands + commands=( + 'cat-manifest:Inspect and print the image manifest' + 'export:Export a stored image to an ACI file' + 'extract:Extract a stored image to a directory' + 'gc:Garbage collect local store' + 'list:List images in the local store' + 'render:Render a stored image to a directory with all its dependencies' + 'rm:Remove image(s) with the given ID(s) or name(s) from the local store' + ) + _describe 'command' commands +} + +_rkt_images() { + local -a images + images=($(rkt image list --fields id,name --no-legend | sed 's/\t/\n/;s/:/\\:/g' | sort | uniq)) + _describe 'IMAGE' images +} + +_rkt_pods() { + local -a pods + IFS=$'\n' + pods=($(rkt list --full --no-legend | sed 's/:/\\:/g;s/\t/:/;s/\t/ /g')) + _describe 'POD' pods +} + +_rkt "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rslsync b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rslsync new file mode 100644 index 00000000..d1cd5bc1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rslsync @@ -0,0 +1,61 @@ +#compdef rslsync +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for resilio sync (https://getsync.com/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Fabian Klötzl (https://github.com/kloetzl) +# +# ------------------------------------------------------------------------------ + +_rslsync(){ + integer ret=1 + local -a args + args+=( + '(-)--help[Print help]' + '(--help)--config[Use a configuration file]:file:_files' + '(--help)--dump-sample-config[Print a sample configuration file]' + '(--help)--generate-secret[Generate a read/write key]::version:(2)' + '(--help)--get-ro-secret[Get the read-only key associated to a read/write key]:key:' + '(--help)--identity[Creates user identity]:name:' + '(--help)--license[Apply owner license]:file:_files' + '(--help)--log[Set log file]:file:_files' + '(--help)--nodaemon[Do not daemonize]' + '(--help)--storage[Storage path for identity and license]:path:_files -/' + '(--help)--webui.listen[Set the webui listening interface]:ip\:port:' + ) + _arguments $args[@] && ret=0 + return ret +} + +_rslsync diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rspec b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rspec new file mode 100644 index 00000000..0ca0e99a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rspec @@ -0,0 +1,108 @@ +#compdef rspec +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for RSpec (http://rspec.info/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Kazuya Takeshima (https://github.com/mitukiii) +# +# ------------------------------------------------------------------------------ + + +_rspec() { + local context state line curcontext="$curcontext" + + _arguments -C \ + -I'[Specify PATH to add to $LOAD_PATH (may be used more than once)]:PATH:_files' \ + '*'{-r,--require}'[Require a file]:PATH:_files' \ + '*'{-O,--options}'[Specify the path to a custom options file]:PATH:_files' \ + --order'[Run examples by the specified order type]: :->order' \ + --seed'[Equivalent of --order rand:SEED]: :_guard "[[\:digit\:]]#" "SEED"' \ + --bisect'[Repeatedly runs the suite in order to isolate the failures to the smallest reproducible case]' \ + --only-failures'[Filter to just the examples that failed the last time they ran]' \ + '(-n --next-failure)'{-n,--next-failure}'[Apply `--only-failures` and abort after one failure (equivalent to `--only-failures --fail-fast --order defined`)]' \ + --fail-fast'[Abort the run on first failure]' \ + --no-fail-fast'[Do not abort the run on first failure]' \ + --failure-exit-code'[Override the exit code used when there are failing specs]: :_guard "[[\:digit\:]]#" "CODE"' \ + --dry-run'[Print the formatter output of your suite without running any examples or hooks]' \ + '(-X --drb)'{-X,--drb}'[Run examples via DRb]' \ + --drb-port'[Port to connect to the DRb server]: :_guard "[[\:digit\:]]#" "PORT"' \ + '(-f --format)'{-f,--format}'[Choose a formatter]:FORMATTER:(progress documentation html json failures)' \ + '(-o --out)'{-o,--out}'[Write output to a file instead of $stdout]:FILE:_files' \ + --deprecation-out'[Write deprecation warnings to a file instead of $stderr]:FILE:_files' \ + '(-b --backtrace)'{-b,--backtrace}'[Enable full backtrace]' \ + --force-color'[Force the output to be in color, even if the output is not a TTY]' \ + --no-color'[Force the output to not be in color, even if the output is a TTY]' \ + '(-p --profile)'{-p,--profile}'[Enable profiling of examples and list the slowest examples (default: 10)]: :_guard "[[\:digit\:]]#" "COUNT"' \ + --no-profile'[Disable profiling of examples]' \ + '(-w --warnings)'{-w,--warnings}'[Enable ruby warnings]' \ + '(-P --pattern)'{-P,--pattern}'[Load files matching pattern (default: "spec/**/*_spec.rb")]:PATTERN:' \ + --exclude-pattern'[Load files except those matching pattern]:PATTERN:' \ + '(-e --example)'{-e,--example}'[Run examples whose full nested names include STRING (may be used more than once)]:STRING:' \ + '(-t --tag)'{-t,--tag}'[Run examples with the specified tag, or exclude examples by adding ~ before the tag]: :->tag' \ + --default-path'[Set the default path where RSpec looks for examples (can be a path to a file or a directory)]:PATH:_files' \ + '(- *)'--init'[Initialize your project with RSpec]' \ + '(- *)'{-h,--help}"[You're looking at it]" \ + '(- *)'{-v,--version}'[Display the version]' \ + '*:files or directories:_files' + + case "$state" in + order) + if compset -P '*:'; then + _guard '[[:digit:]]#' 'SEED' + else + _values 'TYPE[:SEED]' \ + defined'[examples and groups are run in the order they are defined]' \ + rand'[randomize the order of groups and examples]' \ + random'[alias for rand]' + fi + ;; + tag) + if compset -P '*:'; then + _message 'VALUE' + else + _message 'TAG[:VALUE]' + fi + ;; + esac +} + +_rspec "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rsvm b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rsvm new file mode 100644 index 00000000..d6de50ca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rsvm @@ -0,0 +1,88 @@ +#compdef rsvm +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for rsvm (https://github.com/sdepold/rsvm). +# Adapted from Docker Machine completion by hhatto (https://github.com/ilkka) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * michaelmior (https://github.com/michaelmior) +# +# ------------------------------------------------------------------------------ + +# helper function for completing available rusts +__rusts() { + declare -a rusts_cmd + rusts_cmd=($(ls "$HOME/.rsvm/versions")) + _describe 'rusts' rusts_cmd +} + +# subcommands +local -a _rsvm_cmds + +_rsvm_cmds=( + 'help:Show a help message' \ + 'install:Download and install a version' \ + 'uninstall:Uninstall a version' \ + 'use:Activate a version for now and the future' \ + 'ls:List all installed versions of rust' \ + 'ls-remote:List remote versions available for install' \ + 'ls-channel:Print a channel version available for install' \ +) + +# subcommand completion functions +__uninstall() { + __rusts +} + +__use() { + __rusts +} + +# common args +_arguments \ + '--help[show help]' \ + '--version[print the version]' \ + '*:: :->command' + +# start rusts! +if (( CURRENT == 1 )); then + _describe -t commands 'rsvm command' _rsvm_cmds +fi + +local -a _command_args +case "$words[1]" in + uninstall) + __uninstall ;; + use) + __use ;; +esac diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rubocop b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rubocop new file mode 100644 index 00000000..8be7be52 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_rubocop @@ -0,0 +1,83 @@ +#compdef rubocop +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for rubocop (https://github.com/bbatsov/rubocop) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state line ret=1 +typeset -A opt_args + +_rubocop_format_params() { + _values \ + 'FORMATTER' \ + 'progress' \ + 'simple' \ + 'clang' \ + 'disabled' \ + 'fuubar' \ + 'emacs' \ + 'json' \ + 'files' \ + 'offenses' +} + +_arguments -C \ + '(--only)--only[Run only the given cop(s)]' \ + '(-c --config)'{-c,--config}'[Specify configuration file]' \ + '(--auto-gen-config)--auto-gen-config[Generate a configuration file acting as a TODO list]' \ + '(--force-exclusion)--force-exclusion[Force excluding files specified in the configuration `Exclude` even if they are explicitly passed as arguments]' \ + '(-f --format)'{-f,--format}'[Choose an output formatter.]:FORMATTER:_rubocop_format_params' \ + '(-o --out)'{-o,--out}'[Write output to a file instead of STDOUT]' \ + '(-r --require)'{-r,--require}'[Require Ruby file.]' \ + '(--fail-level)--fail-level[Minimum severity for exit with error code.]' \ + '(--show-cops)--show-cops[Shows the given cops, or all cops by default, and their configurations for the current directory.]' \ + '(-F --fail-fast)'{-f,--fail-fast}'[Inspect files in order of modification time ant stop after the first file containing offenses]' \ + '(-d --debug)'{-d,--debug}'[Display debug info]' \ + '(-D --display-cop-names)'{-D,--display-cop-names}'[Display cop names in offense messages.]' \ + '(-R --rails)'{-R,--rails}'[Run extra Rails cops.]' \ + '(-l --lint)'{-l,--lint}'[Run only lint cops.]' \ + '(-a --auto-correct)'{-a,--auto-correct}'[Auto-correct offenses.]' \ + '(-n --no-color)'{-n,--no-color}'[Disable color output.]' \ + '(-v --version)'{-v,--version}'[Disable version.]' \ + '(-V --verbose-version)'{-V,--verbose-version}'[Disable verbose version.]' \ + '(-h --help)'{-h,--help}'[Show help.]' \ + '*: :_files' && ret=0 + +return ret diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sbt b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sbt new file mode 100644 index 00000000..f2de6e9f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sbt @@ -0,0 +1,93 @@ +#compdef sbt +# ------------------------------------------------------------------------------ +# Copyright (c) 2013 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for sbt 0.12+ (http://scala-sbt.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Tony Sloane +# * Mirko Caserta +# +# ------------------------------------------------------------------------------ + +local -a _sbt_commands +_sbt_commands=( + 'clean:delete files produced by the build' + 'compile:compile sources' + 'console:start the Scala REPL with project classes on the classpath' + 'console-quick:start the Scala REPL with project deps on the classpath' + 'console-project:start the Scala REPL w/sbt+build-def on the classpath' + 'dist:generate distribution artifacts' + 'dist\:clean:clean distribution artifacts' + 'doc:generate API documentation' + 'gen-idea:generate Intellij Idea project files' + 'package:produce the main artifact, such as a binary jar' + 'package-doc:produce a doc artifact, such as a jar containing API docs' + 'package-src:produce a source artifact, such as a jar containing sources' + 'publish:publish artifacts to a repository' + 'publish-local:publish artifacts to the local repository' + 'run:run a main class' + 'run-main:run the main class selected by the first argument' + 'test:execute all tests' + 'test-only:execute the tests provided as arguments' + 'test-quick:execute previously failed tests' + 'update:resolve and optionally retrieve dependencies' +) + +local expl + +_arguments \ + '(-help)-h[prints an help message]' \ + '(-h)-help[prints an help message]' \ + '(-verbose)-v[this runner is chattier]' \ + '(-v)-verbose[this runner is chattier]' \ + '(-debug)-d[set sbt log level to debug]' \ + '(-d)-debug[set sbt log level to debug]' \ + '-no-colors[disable ANSI color codes]' \ + '-sbt-create[start even if current dir contains no sbt project]' \ + '-sbt-dir[path to global settings/plugins dir (default: ~/.sbt)]' \ + '-sbt-boot[path to shared boot dir (default: ~/.sbt/boot)]' \ + '-ivy[path to local Ivy repository (default: ~/.ivy2)]' \ + '-mem[set memory options]' \ + '-no-share[use all local caches; no sharing]' \ + '-no-global[use global caches, but do not use global ~/.sbt dir]' \ + '-jvm-debug[turn on JVM debugging, open at the given port]' \ + '-batch[disable interactive mode]' \ + '-sbt-version[use the specified version of sbt]' \ + '-sbt-jar[use the specified jar as the sbt launcher]' \ + '(-sbt-snapshot)-sbt-rc[use an RC version of sbt]' \ + '(-sbt-rc)-sbt-snapshot[use a snapshot version of sbt]' \ + '-java-home[alternate JAVA_HOME]' \ + '*:: :->subcmds' && return 0 + +_describe -t commands "sbt subcommand" _sbt_commands +return 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_scala b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_scala new file mode 100644 index 00000000..baa3c82a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_scala @@ -0,0 +1,249 @@ +#compdef scala scalac +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for scala and scalac (http://www.scala-lang.org/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Tony Sloane +# +# ------------------------------------------------------------------------------ + +typeset -A opt_args +local context state line + +_scala_features () { + compadd "postfixOps" "reflectiveCalls" "implicitConversions" "higherKinds" \ + "existentials" "experimental.macros" "_" +} + +_scala_phases () { + compadd "parser" "namer" "packageobjects" "typer" "patmat" "superaccessors" \ + "extmethods" "pickler" "refchecks" "selectiveanf" "selectivecps" "uncurry" \ + "tailcalls" "specialize" "explicitouter" "erasure" "posterasure" "lazyvals" \ + "lambdalift" "constructors" "flatten" "mixin" "cleanup" "icode" "inliner" \ + "inlineExceptionHandlers" "closelim" "dce" "jvm" "terminal" +} + +local -a shared_opts +shared_opts=( + "-bootclasspath+[Override location of bootstrap class files]:bootstrap class directory:_files -/" + "-classpath+[Specify where to find user class files]:directory:_files -/" + "-D-[Pass -Dproperty=value directly to the runtime system]" + "-d+[Destination for generated classfiles]: directory or jar file:_files" + "-dependencyfile+[Set dependency tracking file]:dependency tracking file:_files" + "-deprecation[Emit warning and location for usages of deprecated APIs]" + "-encoding+[Specify character encoding used by source files]:encoding:" + "-explaintypes[Explain type errors in more detail]" + "-extdirs+[Override location of installed extensions]:extensions directory:_files -/" + "-g\:-[Set level of generated debugging info (default\: vars)]:debugging info level:(none source line vars notailcalls)" + "-help[Print a synopsis of standard options]" + "-J-[pass argument directly to Java runtime system]:JVM argument:" + "-javabootclasspath+[Override java boot classpath]:Java boot class path directory]:_files -/" + "-javaextdirs+[Override java extdirs classpath]:Java extdirs directory:_files -/" + "-language\:-[Enable one or more language features]:feature:_scala_features" + "-no-specialization[Ignore @specialize annotations]" + "-nobootcp[Do not use the boot classpath for the scala jars]" + "-nowarn[Generate no warnings]" + "-optimise[Generate faster bytecode by applying optimisations to the program]" + "-P\:-[Pass an option to a plugin (written plugin\:opt)]:plugin option:" + "-print[Print program with Scala-specific features removed]" + "-sourcepath+[Specify location(s) of source files]:source file directory:_files -/" + "-target\:-[Target platform for object files (default\: jvm-1.5)]:platform name:(jvm-1.5 msil)" + "-toolcp+[Add to the runner classpath]:directory:_files -/" + "-unchecked[Enable detailed unchecked (erasure) warnings]" + "-uniqid[Uniquely tag all identifiers in debugging output]" + "-usejavacp[Utilize the java.class.path in classpath resolution]" + "-verbose[Output messages about what the compiler is doing]" + "-version[Print product version and exit]" + "-X[Print a synopsis of advanced options]" + "-Y[Print a synopsis of private options]" +) + +local -a X_opts +X_opts=( + "-Xcheck-null[Warn upon selection of nullable reference]" + "-Xcheckinit[Wrap field accessors to throw an exception on uninitialized access]" + "-Xdisable-assertions[Generate no assertions or assumptions]" + "-Xelide-below+[Calls to @elidable methods are omitted if method priority is lower than integer argument]" + "-Xexperimental[Enable experimental extensions]" + "-Xfatal-warnings[Fail the compilation if there are any warnings]" + "-Xfull-lubs[Retains pre 2.10 behavior of less aggressive truncation of least upper bounds]" + "-Xfuture[Turn on future language features]" + "-Xgenerate-phase-graph+[Generate the phase graphs (outputs .dot files) to fileX.dot]:output file:_files" + "-Xlint[Enable recommended additional warnings]" + "-Xlog-free-terms[Print a message when reification creates a free term]" + "-Xlog-free-types[Print a message when reification resorts to generating a free type]" + "-Xlog-implicits[Show more detail on why some implicits are not applicable]" + "-Xlog-implicit-conversions[Print a message whenever an implicit conversion is inserted]" + "-Xlog-reflective-calls[Print a message when a reflective method call is generated]" + "-Xmacro-settings\:-[Custom settings for macros]:option" + "-Xmain-class+[Class for manifest's Main-Class entry (only useful with -d jar)]:path:" + "-Xmax-classfile-name+[Maximum filename length for generated classes]" + "-Xmigration[Warn about constructs whose behavior may have changed]" + "-Xno-forwarders[Do not generate static forwarders in mirror classes]" + "-Xno-patmat-analysis[Don't perform exhaustivity/unreachability analysis. Also, ignore @switch annotation]" + "-Xno-uescape[Disable handling of \u unicode escapes]" + "-Xnojline[Do not use JLine for editing]" + "-Xoldpatmat[Use the pre-2.10 pattern matcher. Otherwise, the 'virtualizing' pattern matcher is used in 2.10]" + "-Xprint\:-[Print out program after ]:phase name:_scala_phases" + "-Xprint-icode\:-[Log internal icode to *.icode files after phase (default\: icode)]:phase name:_scala_phases" + "-Xprint-pos[Print tree positions, as offsets]" + "-Xprint-types[Print tree types (debugging option)]" + "-Xprompt[Display a prompt after each error (debugging option)]" + "-Xresident[Compiler stays resident: read source filenames from standard input]" + "-Xscript+[Treat the source file as a script and wrap it in a main method]:main object name" + "-Xshow-class+[Show internal representation of class]:class name" + "-Xshow-object+[Show internal representation of object]:object name" + "-Xshow-phases[Print a synopsis of compiler phases]" + "-Xsource-reader+[Specify a class name for a custom method of reading source files]:class name" + "-Xverify[Verify generic signatures in generated bytecode]" + + "-Xassem-extdirs+[List of directories containing assemblies (requires -target:msil) (default\: lib)]:assembly directory:_files -/" + "-Xassem-name+[Name of the output assembly (requires -target:msil)]:assembly name:_files" + "-Xassem-path+[List of assemblies referenced by the program (requires -target:msil)]:assembly path:_files" + "-Xsourcedir+[Mirror source folder structure in output directory (requires -target:msil)]:source directory:_files -/" + + "-Xplugin\:-[Load one or more plugins from file]:plugin file:_files" + "-Xpluginsdir+[Path to search compiler plugins]:plugin directory:_files -/" + "-Xplugin-list[Print a synopsis of loaded plugins]" + "-Xplugin-disable\:-[Disable the given plugin(s)]" + "-Xplugin-require\:-[Abort unless the given plugin(s) are available]" +) + +local -a Y_opts +Y_opts=( + "-Y[Print a synopsis of private options]" + "-Ybuild-manager-debug[Generate debug information for the Refined Build Manager compiler]" + "-Ybuilder-debug\:-[Compile using the specified build manager (default\: none)]:build manager:(none refined simple)" + "-Yclosure-elim[Perform closure elimination]" + "-Ycompact-trees[Use compact tree printer when displaying trees]" + "-Ydead-code[Perform dead code elimination]" + "-Ydependent-method-types[Allow dependent method types]" + "-Ydump-classes+[Dump the generated bytecode to .class files (useful for reflective compilation that utilizes in-memory classloaders)]:output directory:_files -/" + "-Yeta-expand-keeps-star[Eta-expand varargs methods to T* rather than Seq[T]. This is a temporary option to ease transition.]" + "-Ygen-javap+[Generate a parallel output directory of .javap files]:output directory:_files -/" + "-Yinfer-argument-types[Infer types for arguments of overridden methods]" + "-Yinline[Perform inlining when possible]" + "-Yinline-handlers[Perform exception handler inlining when possible]" + "-Yinline-warnings[Emit inlining warnings (normally surpressed due to high volume)]" + "-Yinvalidate+[Invalidate classpath entry before run]:classpath entry" + "-Ylinearizer\:-[Linearizer to use (default\: rpo)]:linearizer:(normal dfs rpo dump)" + "-Ylog-classpath[Output information about what classpath is being applied]" + "-Yno-adapted-args[Do not adapt an argument list (either by inserting unit or creating a tuple) to match the receiver]" + "-Ymacro-debug-lite[Trace essential macro-related activities]" + "-Ymacro-debug-verbose[Trace all macro-related activities: compilation, generation of synthetics, classloading, expansion, exceptions]" + "-Yno-completion[Disable tab-completion in the REPL]" + "-Yno-generic-signatures[Suppress generation of generic signatures for Java]" + "-Yno-imports[Compile without any implicit imports]" + "-Yno-predef[Compile without importing Predef]" + "-Yno-self-type-checks[Suppress check for self-type conformance among inherited members]" + "-Yno-squeeze[Disable creation of compact code in matching]" + "-Ynotnull[Enable (experimental and incomplete) scala.NotNull]" + "-Yoverride-objects[Allow member objects to be overridden]" + "-Yoverride-vars[Allow vars to be overridden]" + "-Ypmat-naive[Desugar matches as naively as possible]" + "-Ypresentation-delay+[Wait number of ms after typing before starting typechecking]" + "-Ypresentation-log+[Log presentation compiler events into file]:log file:_files" + "-Ypresentation-replay+[Replay presentation compiler events from file]:log file:_files" + "-Ypresentation-strict[Do not report type errors in sources with syntax errors]" + "-Ypresentation-verbose[Print information about presentation compiler tasks]" + "-Yprofile-class+[Specify name of profiler class]:profiler class name" + "-Yprofile-memory[Heap snapshot after compiler run (requires jgpagent on JVM -agentpath)]" + "-Yrangepos[Use range positions for syntax trees]" + "-Yrecursion+[Set recursion depth used when locking symbols]" + "-Yreify-copypaste[Dump the reified trees in copypasteable representation]" + "-Yrepl-sync[Do not use asynchronous code for REPL startup]" + "-Yresolve-term-conflict\:-[Resolve term conflicts (default\: error)]:resolution strategy:(package object error)" + "-Yself-in-annots[Include a \"self\" identifier inside of annotations]" + "-Yshow\:-[Show after (requires -Xshow-class or -Xshow-object)]:phase name:_scala_phases" + "-Yshow-syms[Print the AST symbol hierarchy after each phase]" + "-Yshow-symkinds[Print abbreviated symbol kinds next to symbol names]" + "-Yshow-trees[Print detailed ASTs (requires -Xprint\:phase)]" + "-Yshow-trees-compact[Print detailed ASTs in compact form (requires -Xprint\:)]" + "-Yshow-trees-stringified[Print stringifications along with detailed ASTs (requires -Xprint\:)]" + "-Ystatistics[Print compiler statistics]" + "-Ystruct-dispatch\:-[Structural method dispatch policy (default\: poly-cache)]:policy name:(no-cache mono-cache poly-cache invoke-dynamic)" + + "-Ybrowse\:-[Browse the abstract syntax tree after ]:phase name:_scala_phases" + "-Ycheck\:-[Check the tree at the end of ]:phase name:_scala_phases" + "-Ylog\:-[Log operations during ]:phase name:_scala_phases" + "-Yprofile\:-[Profile CPU usage of given phases (requires jgpagent on JVM -agentpath)]:phase name:_scala_phases" + "-Yskip\:-[Skip ]:phase name:_scala_phases" + "-Ystop-after\:-[Stop after given phase ]:phase name:_scala_phases" + "-Ystop-before\:-[Stop before given phase ]:phase name:_scala_phases" + + "-Ywarn-adapted-args[Warn if an argument list is modified to match the receiver]" + "-Ywarn-all[Enable all -Y warnings]" + "-Ywarn-dead-code[Warn when dead code is identified]" + "-Ywarn-inaccessible[Warn about inaccessible types in method signatures]" + "-Ywarn-nullary-override[Warn when non-nullary overrides nullary, e.g. def foo() over def foo]" + "-Ywarn-nullary-unit[Warn when nullary methods return Unit]" + "-Ywarn-numeric-widen[Warn when numerics are widened]" + "-Ywarn-value-discard[Warn when non-Unit expression results are unused]" + + "-Ybuild-manager-debug[Generate debug information for the Refined Build Manager compiler]" + "-Ybuilder-debug\:-[Compile using the specified build manager (default\: none)]:manager:(none refined simple)" + "-Ycompletion-debug[Trace all tab completion activity]" + "-Ydebug[Increase the quantity of debugging output]" + "-Ydoc-debug[Trace all scaladoc activity]" + "-Yide-debug[Generate, validate and output trees using the interactive compiler]" + "-Yinfer-debug[Trace type inference and implicit search]" + "-Yissue-debug[Print stack traces when a context issues an error]" + "-Ypatmat-debug[Trace pattern matching translation]" + "-Ypmat-debug[Trace all pattern matcher activity]" + "-Ypos-debug[Trace position validation]" + "-Ypresentation-debug[Enable debugging output for the presentation compiler]" + "-Yreify-debug[Trace reification]" + "-Yrepl-debug[Trace all REPL activity]" + "-Ytyper-debug[Trace all type assignments]" +) + +local -a scala_opts +scala_opts=( + "-e+[execute as if entered in the repl]:string" \ + "-howtorun+[what to run (default\: guess)]:execution mode:(script object jar guess)" \ + "-i+[preload before starting the repl]:file to preload:_files" \ + "-nc[no compilation daemon\: do not use the fsc offline compiler]" \ + "-save[save the compiled script in a jar for future use]" +) + +case $words[$CURRENT] in + -X*) _arguments $X_opts;; + -Y*) _arguments $Y_opts;; + *) case $service in + scala) _arguments $scala_opts $shared_opts "*::filename:_files";; + scalac) _arguments $shared_opts "*::filename:_files";; + esac +esac + +return 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_scrub b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_scrub new file mode 100644 index 00000000..d6a7b2a2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_scrub @@ -0,0 +1,66 @@ +#compdef scrub +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for scrub. A utility which iteratively writes patterns on files or disk devices to make retrieving the data more difficult. (http://linux.die.net/man/1/scrub). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + + +_scrub() { + +local patterns +patterns="nnsa dod bsi gutmann schneier pfitzner7 pfitzner33 usarmy fillzero fillff random random2 old fastold" + +_arguments -C \ + "(- 1 *)"{-v,--version}"[Print scrub version and exit.]" \ + {-r,--remove}"[Remove the file after scrubbing.]" \ + {-p,--pattern}"[Select the patterns to write.]:pattern:($patterns)" \ + {-b,--blocksize}"[Perform read and write calls using the specified blocksize (in bytes).]:block size:" \ + {-f,--force}"[Scrub even if target contains signature indicating it has already been scrubbed.]" \ + {-S,--no-signature}"[Do not write scrub signature.]" \ + {-X,--freespace}"[Create specified directory and fill it with files until write returns ENOSPC (file sys‐tem full), then scrub the files as usual.]:directory name:" \ + {-D,--dirent}"[After scrubbing the file, scrub its name in the directory entry, then rename it to the new name.]:new name:" \ + {-s,--device-size}"[Override the device size (in bytes).]:size:" \ + {-L,--no-link}"[If file is a symbolic link, do not scrub the link target.]" \ + {-R,--no-hwrand}"[Don't use a hardware random number generator even if one is available.]" \ + {-t,--no-threads}"[Don't generate random data in parallel with I/O.]" \ + {-n,--dry-run}"[Do everything but write to targets.]" \ + {-h,--help}"[Print a summary of command line options on stderr.]" \ + '*:files:_files' \ +} + +_scrub + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sdd b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sdd new file mode 100644 index 00000000..c722095d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sdd @@ -0,0 +1,66 @@ +#compdef sdd +# ------------------------------------------------------------------------------ +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for sdd (http://freshmeat.net/projects/sdd/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# +# ------------------------------------------------------------------------------ + +_values -w 'option' \ + 'if[specify input file]:input file:_tilde_files' \ + 'of[specify output file]:output file:_tilde_files' \ + '(bs)ibs[input block size]:block size (bytes)' \ + '(bs)obs[output block size]:block size (bytes)' \ + '(ibs obs)bs[block size]:block size (bytes)' \ + 'cbs[conversion buffer size]:buffer size (bytes)' \ + 'skip[input/output initially skipped]:bytes' \ + 'seek[input/output initially skipped]:bytes' \ + 'count[number of input blocks to copy]:blocks' \ + '-notrunc[do not truncate existing output file]' \ + '-pg[print a dot on each write to indicate progress]' \ + '-noerror[do not stop on error]' \ + '-noerrwrite[do not write blocks not read correctly]' \ + "-noseek[don't seek]" \ + 'try[error retry count]:number' \ + '-debug[print debugging messages]' \ + '-fill[fill each record with zeros up to obs]' \ + '-swab' '-block' '-unblock' '-lcase' '-ucase' '-ascii' '-ebcdic' '-ibm' \ + '-help[show help]' \ + '-version[show version]' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_setcap b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_setcap new file mode 100644 index 00000000..6f34a0e0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_setcap @@ -0,0 +1,108 @@ +#compdef setcap +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# +# ------------------------------------------------------------------------------ +# Description +# ------------------------------------------------------------------------------ +# Completion script for libcap's setcap: +# - https://people.redhat.com/sgrubb/libcap-ng/ +# +# ZSH provides the `zsh/cap` module that does not work on most modern systems, +# in lieu of this I have written this zsh-completion modules. +# +# Written by +# - Zephyr Pellerin (https://github.com/zv) +# ------------------------------------------------------------------------------ + +local curcontext=$curcontext state line expl ret=1 +local -a args privs operators + +args=( '*:file:->files' + '1:capability:->capability' + '-v[verify]' '-q[quiet]' ) + +_arguments -C -s "$args[@]" && ret=0 + +operators=("e:effective" "i:inheritable" "p:permitted") + +case "$state" in + capability) + if compset -P '*?[=+-]'; then + _describe -t operators "operator" operators && ret=0 + else + _values -s , capability \ + 'cap_audit_control[Enable and disable kernel auditing]' \ + 'cap_audit_read[Allow reading the audit log]' \ + 'cap_audit_write[Write records to kernel auditing log.]' \ + 'cap_block_suspend[Employ features that can block system suspend]' \ + 'cap_chown[Make arbitrary changes to file UIDs and GIDs]' \ + 'cap_dac_override[Bypass file read, write, and execute permission checks.]' \ + 'cap_dac_read_search[Bypass file read permission checks]' \ + 'cap_fowner[Bypass filesystem UID checks, set extended attrs.]' \ + "cap_fsetid[Don't clear set-user-ID and set-group-ID permission bits when a file is modified]" \ + 'cap_ipc_lock[Lock memory]' \ + 'cap_ipc_owner[Bypass checks on SySV IPC object operations.]' \ + 'cap_kill[Bypass permission checks for sending signals]' \ + 'cap_lease[Establish leases on arbitrary files]' \ + 'cap_linux_immutable[Set immutability or append only]' \ + 'cap_mac_admin[Override Mandatory Access Control]' \ + 'cap_mac_override[Allow MAC configuration or state changes.]' \ + 'cap_mknod[Create special files using mknod(2)]' \ + 'cap_net_admin[Perform various network-related operations]' \ + 'cap_net_bind_service[Bind a socket to a privileged ports.]' \ + 'cap_net_broadcast[Make socket broadcasts and listen to multicast.]' \ + 'cap_net_raw[Use raw sockets.]' \ + 'cap_setgid[Manipulate process GIDs.]' \ + 'cap_setfcap[Set file capabilities.]' \ + "cap_setpcap[Grant or remove any capability in the caller's permitted capability set to or from any other process.]" \ + 'cap_setuid[Manipulate or forge process UIDs]' \ + 'cap_sys_admin[Perform numerous administrative tasks.]' \ + 'cap_sys_boot[Reboot]' \ + 'cap_sys_chroot[Use chroot]' \ + 'cap_sys_module[Load kernel module.]' \ + 'cap_sys_nice[Nice or renice processes.]' \ + 'cap_sys_pacct[Use acct(2).]' \ + 'cap_sys_ptrace[Inspect processes with ptrace or use process_vm_writev.]' \ + 'cap_sys_rawio[Numerous device IO functions, including performing raw IO and access x86 MSRs]' \ + 'cap_sys_resource[Set numerous resource limits]' \ + 'cap_sys_time[Set system clock]' \ + 'cap_sys_tty_config[Use vhangup(2)]' \ + 'cap_syslog[Perform privileged syslog(2) operations.]' \ + 'cap_wake_alarm[Trigger something that will wake up the system]' && ret=0 + fi ;; + files) _files && ret=0 ;; +esac + +return ret + +# Local variables: +# mode: shell-script +# sh-basic-offset: 2 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: sw=2 ts=2 et filetype=sh diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_setup.py b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_setup.py new file mode 100644 index 00000000..242af251 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_setup.py @@ -0,0 +1,715 @@ +#compdef setup.py +# ------------------------------------------------------------------------------ +# Copyright (C) 2015 by Hideo Hattori +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for setup.py (http://docs.python.org/distutils/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hideo Hattori (https://github.com/hhatto) +# +# ------------------------------------------------------------------------------ + +_setup.py() { + typeset -A opt_args + local context state line + + _arguments -s -S \ + "--verbose[run verbosely (default)]" \ + "-v[run verbosely (default)]" \ + "--quiet[run quietly (turns verbosity off)]" \ + "-q[run quietly (turns verbosity off)]" \ + "--dry-run[don't actually do anything]" \ + "-n[don't actually do anything]" \ + "--help[show detailed help message]" \ + "-h[show detailed help message]" \ + "--no-user-cfg[ignore pydistutils.cfg in your home directory]" \ + "--command-packages=[list of packages that provide distutils commands]" \ + "--help-commands[list all available commands]" \ + "--name[print package name]" \ + "--version[print package version]" \ + "-V[print package version]" \ + "--fullname[print -]" \ + "--author[print the author's name]" \ + "--author-email[print the author's email address]" \ + "--maintainer[print the maintainer's name]" \ + "--maintainer-email[print the maintainer's email address]" \ + "--contact[print the maintainer's name if known, else the author's]" \ + "--contact-email[print the maintainer's email address if known, else the author's]" \ + "--url[print the URL for this package]" \ + "--license[print the license of the package]" \ + "--licence[alias for --license]" \ + "--description[print the package description]" \ + "--long-description[print the long package description]" \ + "--platforms[print the list of platforms]" \ + "--classifiers[print the list of classifiers]" \ + "--keywords[print the list of keywords]" \ + "--provides[print the list of packages/modules provided]" \ + "--requires[print the list of packages/modules required]" \ + "--obsoletes[print the list of packages/modules made obsolete]" \ + "*::setup.py commands:_setuppy_command" +} + +(( $+functions[_setuppy_command] )) || +_setuppy_command() { + local cmd ret=1 + + (( $+setuppy_cmds )) || _setuppy_cmds=( + "build:build everything needed to install" \ + "build_py:\"build\" pure Python modules (copy to build directory)" \ + "build_ext:build C/C++ extensions (compile/link to build directory)" \ + "build_clib:build C/C++ libraries used by Python extensions" \ + "build_scripts:\"build\" scripts (copy and fixup #! line)" \ + "clean:clean up temporary files from 'build' command" \ + "install:install everything from build directory" \ + "install_lib:install all Python modules (extensions and pure Python)" \ + "install_headers:install C/C++ header files" \ + "install_scripts:install scripts (Python or otherwise)" \ + "install_data:install data files" \ + "sdist:create a source distribution (tarball, zip file, etc.)" \ + "register:register the distribution with the Python package index" \ + "bdist:create a built (binary) distribution" \ + "bdist_dumb:create a \"dumb\" built distribution" \ + "bdist_rpm:create an RPM distribution" \ + "bdist_wininst:create an executable installer for MS Windows" \ + "upload:upload binary package to PyPI" \ + "check:perform some checks on the package" \ + "alias:define a shortcut to invoke one or more commands" \ + "bdist_egg:create an \"egg\" distribution" \ + "develop:install package in 'development mode'" \ + "easy_install:Find/get/install Python packages" \ + "egg_info:create a distribution's .egg-info directory" \ + "rotate:delete older distributions, keeping N newest files" \ + "saveopts:save supplied options to setup.cfg or other config file" \ + "setopt:set an option in setup.cfg or another config file" \ + "test:run unit tests after in-place build" \ + "install_egg_info:Install an .egg-info directory for the package" \ + "upload_docs:Upload documentation to PyPI" \ + ) + + if (( CURRENT == 1 )); then + _describe -t commands 'setup.py subcommand' _setuppy_cmds || compadd "$@" - ${(s.:.)${(j.:.)_setuppy_syns}} + else + local curcontext="$curcontext" + + cmd="${${_setuppy_cmds[(r)$words[1]:*]%%:*}:-${(k)_setuppy_syns[(r)(*:|)$words[1](:*|)]}}" + if (( $#cmd )); then + curcontext="${curcontext%:*:*}:setuppy-${cmd}:" + _call_function ret _setuppy_$cmd || _message 'no more arguments' + else + _message "unknown setup.py command: $words[1]" + fi + return ret + fi +} + +(( $+functions[_setuppy_build] )) || +_setuppy_build() { + _arguments -s \ + "--build-base=[base directory for build library]" \ + "-b[base directory for build library]" \ + "--build-purelib=[build directory for platform-neutral distributions]" \ + "--build-platlib=[build directory for platform-specific distributions]" \ + "--build-lib=[build directory for all distribution (defaults to either build-purelib or build-platlib]" \ + "--build-scripts=[build directory for scripts]" \ + "--build-temp=[temporary build directory]" \ + "-t[temporary build directory]" \ + "--plat-name=[platform name to build for, if supported (default: linux-i686)]" \ + "-p[platform name to build for, if supported (default: linux-i686)]" \ + "--compiler=[specify the compiler type]" \ + "-c[specify the compiler type]" \ + "--debug[compile extensions and libraries with debugging information]" \ + "-g[compile extensions and libraries with debugging information]" \ + "--force[forcibly build everything (ignore file timestamps)]" \ + "-f[forcibly build everything (ignore file timestamps)]" \ + "--executable=[specify final destination interpreter path (build.py)]" \ + "-e[specify final destination interpreter path (build.py)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_build_py] )) || +_setuppy_build_py() { + _arguments -s \ + "--build-lib=[directory to \"build\" (copy) to]" \ + "-d[directory to \"build\" (copy) to]" \ + "--compile[compile .py to .pyc]" \ + "-c[compile .py to .pyc]" \ + "--no-compile[don't compile .py files \[default\]]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--force[forcibly build everything (ignore file timestamps)]" \ + "-f[forcibly build everything (ignore file timestamps)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_build_ext] )) || +_setuppy_build_ext() { + _arguments -s \ + "--build-lib=[directory for compiled extension modules]" \ + "-b[directory for compiled extension modules]" \ + "--build-temp=[directory for temporary files (build by-products)]" \ + "-t[directory for temporary files (build by-products)]" \ + "--plat-name=[platform name to cross-compile for, if supported (default: linux-i686)]" \ + "-p[platform name to cross-compile for, if supported (default: linux-i686)]" \ + "--inplace[ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules]" \ + "-i[ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules]" \ + "--include-dirs=[list of directories to search for header files (separated by ':')]" \ + "-I[list of directories to search for header files (separated by ':')]" \ + "--define=[C preprocessor macros to define]" \ + "-D[C preprocessor macros to define]" \ + "--undef=[C preprocessor macros to undefine]" \ + "-U[C preprocessor macros to undefine]" \ + "--libraries=[external C libraries to link with]" \ + "-l[external C libraries to link with]" \ + "--library-dirs=[directories to search for external C libraries (separated by ':')]" \ + "-L[directories to search for external C libraries (separated by ':')]" \ + "--rpath=[directories to search for shared C libraries at runtime]" \ + "-R[directories to search for shared C libraries at runtime]" \ + "--link-objects=[extra explicit link objects to include in the link]" \ + "-O[extra explicit link objects to include in the link]" \ + "--debug[compile/link with debugging information]" \ + "-g[compile/link with debugging information]" \ + "--force[forcibly build everything (ignore file timestamps)]" \ + "-f[forcibly build everything (ignore file timestamps)]" \ + "--compiler=[specify the compiler type]" \ + "-c[specify the compiler type]" \ + "--swig-cpp[make SWIG create C++ files (default is C)]" \ + "--swig-opts=[list of SWIG command line options]" \ + "--swig=[path to the SWIG executable]" \ + "--user[add user include, library and rpath]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_build_clib] )) || +_setuppy_build_clib() { + _arguments -s \ + "--build-clib=[directory to build C/C++ libraries to]" \ + "-b[directory to build C/C++ libraries to]" \ + "--build-temp=[directory to put temporary build by-products]" \ + "-t[directory to put temporary build by-products]" \ + "--debug[compile with debugging information]" \ + "-g[compile with debugging information]" \ + "--force[forcibly build everything (ignore file timestamps)]" \ + "-f[forcibly build everything (ignore file timestamps)]" \ + "--compiler=[specify the compiler type]" \ + "-c[specify the compiler type]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_build_scripts] )) || +_setuppy_build_scripts() { + _arguments -s \ + "--build-dir=[directory to \"build\" (copy) to]" \ + "-d[directory to \"build\" (copy) to]" \ + "--force[forcibly build everything (ignore file timestamps]" \ + "-f[forcibly build everything (ignore file timestamps]" \ + "--executable=[specify final destination interpreter path]" \ + "-e[specify final destination interpreter path]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_clean] )) || +_setuppy_clean() { + _arguments -s \ + "--build-base=[base build directory (default: 'build.build-base')]" \ + "-b[base build directory (default: 'build.build-base')]" \ + "--build-lib=[build directory for all modules (default: 'build.build-lib')]" \ + "--build-temp=[temporary build directory (default: 'build.build-temp')]" \ + "-t[temporary build directory (default: 'build.build-temp')]" \ + "--build-scripts=[build directory for scripts (default: 'build.build-scripts')]" \ + "--bdist-base=[temporary directory for built distributions]" \ + "--all[remove all build output, not just temporary by-products]" \ + "-a[remove all build output, not just temporary by-products]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install] )) || +_setuppy_install() { + _arguments -s \ + "--prefix=[installation prefix]" \ + "--exec-prefix=[(Unix only) prefix for platform-specific files]" \ + "--home=[(Unix only) home directory to install under]" \ + "--user[install in user site-package]" \ + "--install-base=[base installation directory (instead of --prefix or --home)]" \ + "--install-platbase=[base installation directory for platform-specific files (instead of --exec-prefix or --home)]" \ + "--root=[install everything relative to this alternate root directory]" \ + "--install-purelib=[installation directory for pure Python module distributions]" \ + "--install-platlib=[installation directory for non-pure module distributions]" \ + "--install-lib=[installation directory for all module distributions (overrides --install-purelib and --install-platlib)]" \ + "--install-headers=[installation directory for C/C++ headers]" \ + "--install-scripts=[installation directory for Python scripts]" \ + "--install-data=[installation directory for data files]" \ + "--compile[compile .py to .pyc \[default\]]" \ + "-c[compile .py to .pyc \[default\]]" \ + "--no-compile[don't compile .py files]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--force[force installation (overwrite any existing files)]" \ + "-f[force installation (overwrite any existing files)]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "--record=[filename in which to record list of installed files]" \ + "--old-and-unmanageable[Try not to use this!]" \ + "--single-version-externally-managed[used by system package builders to create 'flat' eggs]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_lib] )) || +_setuppy_install_lib() { + _arguments -s \ + "--install-dir=[directory to install to]" \ + "-d[directory to install to]" \ + "--build-dir=[build directory (where to install from)]" \ + "-b[build directory (where to install from)]" \ + "--force[force installation (overwrite existing files)]" \ + "-f[force installation (overwrite existing files)]" \ + "--compile[compile .py to .pyc \[default\]]" \ + "-c[compile .py to .pyc \[default\]]" \ + "--no-compile[don't compile .py files]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--skip-build[skip the build steps]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_headers] )) || +_setuppy_install_headers() { + _arguments -s \ + "--install-dir=[directory to install header files to]" \ + "-d[directory to install header files to]" \ + "--force[force installation (overwrite existing files)]" \ + "-f[force installation (overwrite existing files)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_scripts] )) || +_setuppy_install_scripts() { + _arguments -s \ + "--install-dir=[directory to install scripts to]" \ + "-d[directory to install scripts to]" \ + "--build-dir=[build directory (where to install from)]" \ + "-b[build directory (where to install from)]" \ + "--force[force installation (overwrite existing files)]" \ + "-f[force installation (overwrite existing files)]" \ + "--skip-build[skip the build steps]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_data] )) || +_setuppy_install_data() { + _arguments -s \ + "--install-dir=[base directory for installing data files (default: installation base dir)]" \ + "-d[base directory for installing data files (default: installation base dir)]" \ + "--root=[install everything relative to this alternate root directory]" \ + "--force[force installation (overwrite existing files)]" \ + "-f[force installation (overwrite existing files)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_sdist] )) || +_setuppy_sdist() { + _arguments -s \ + "--formats=[formats for source distribution (comma-separated list)]" \ + "--keep-temp[keep the distribution tree around after creating archive file(s)]" \ + "-k[keep the distribution tree around after creating archive file(s)]" \ + "--dist-dir=[directory to put the source distribution archive(s) in \[default: dist\]]" \ + "-d[directory to put the source distribution archive(s) in \[default: dist\]]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_register] )) || +_setuppy_register() { + _arguments -s \ + "--repository=[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "-r[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "--show-response[display full response text from server]" \ + "--list-classifiers[list the valid Trove classifiers]" \ + "--strict[Will stop the registering if the meta-data are not fully compliant]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist] )) || +_setuppy_bdist() { + _arguments -s \ + "--bdist-base=[temporary directory for creating built distributions]" \ + "-b[temporary directory for creating built distributions]" \ + "--plat-name=[platform name to embed in generated filenames (default: linux-i686)]" \ + "-p[platform name to embed in generated filenames (default: linux-i686)]" \ + "--formats=[formats for distribution (comma-separated list)]" \ + "--dist-dir=[directory to put final built distributions in \[default: dist\]]" \ + "-d[directory to put final built distributions in \[default: dist\]]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "--owner=[Owner name used when creating a tar file \[default: current user\]]" \ + "-u[Owner name used when creating a tar file \[default: current user\]]" \ + "--group=[Group name used when creating a tar file \[default: current group\]]" \ + "-g[Group name used when creating a tar file \[default: current group\]]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist_dumb] )) || +_setuppy_bdist_dumb() { + _arguments -s \ + "--bdist-dir=[temporary directory for creating the distribution]" \ + "-d[temporary directory for creating the distribution]" \ + "--plat-name=[platform name to embed in generated filenames (default: linux-i686)]" \ + "-p[platform name to embed in generated filenames (default: linux-i686)]" \ + "--format=[archive format to create (tar, ztar, gztar, zip)]" \ + "-f[archive format to create (tar, ztar, gztar, zip)]" \ + "--keep-temp[keep the pseudo-installation tree around after creating the distribution archive]" \ + "-k[keep the pseudo-installation tree around after creating the distribution archive]" \ + "--dist-dir=[directory to put final built distributions in]" \ + "-d[directory to put final built distributions in]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "--relative[build the archive using relative paths(default: false)]" \ + "--owner=[Owner name used when creating a tar file \[default: current user\]]" \ + "-u[Owner name used when creating a tar file \[default: current user\]]" \ + "--group=[Group name used when creating a tar file \[default: current group\]]" \ + "-g[Group name used when creating a tar file \[default: current group\]]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist_rpm] )) || +_setuppy_bdist_rpm() { + _arguments -s \ + "--bdist-base=[base directory for creating built distributions]" \ + "--rpm-base=[base directory for creating RPMs (defaults to \"rpm\" under --bdist-base; must be specified for RPM 2)]" \ + "--dist-dir=[directory to put final RPM files in (and .spec files if --spec-only)]" \ + "-d[directory to put final RPM files in (and .spec files if --spec-only)]" \ + "--python=[path to Python interpreter to hard-code in the .spec file (default: \"python\")]" \ + "--fix-python[hard-code the exact path to the current Python interpreter in the .spec file]" \ + "--spec-only[only regenerate spec file]" \ + "--source-only[only generate source RPM]" \ + "--binary-only[only generate binary RPM]" \ + "--use-bzip2[use bzip2 instead of gzip to create source distribution]" \ + "--distribution-name=[name of the (Linux) distribution to which this RPM applies (*not* the name of the module distribution!)]" \ + "--group=[package classification \[default: \"Development/Libraries\"\]]" \ + "--release=[RPM release number]" \ + "--serial=[RPM serial number]" \ + "--vendor=[RPM \"vendor\" (eg. \"Joe Blow \") \[default: maintainer or author from setup script\]]" \ + "--packager=[RPM packager (eg. \"Jane Doe \")\[default: vendor\]]" \ + "--doc-files=[list of documentation files (space or comma-separated)]" \ + "--changelog=[RPM changelog]" \ + "--icon=[name of icon file]" \ + "--provides=[capabilities provided by this package]" \ + "--requires=[capabilities required by this package]" \ + "--conflicts=[capabilities which conflict with this package]" \ + "--build-requires=[capabilities required to build this package]" \ + "--obsoletes=[capabilities made obsolete by this package]" \ + "--no-autoreq[do not automatically calculate dependencies]" \ + "--keep-temp[don't clean up RPM build directory]" \ + "-k[don't clean up RPM build directory]" \ + "--no-keep-temp[clean up RPM build directory \[default\]]" \ + "--use-rpm-opt-flags[compile with RPM_OPT_FLAGS when building from source RPM]" \ + "--no-rpm-opt-flags[do not pass any RPM CFLAGS to compiler]" \ + "--rpm3-mode[RPM 3 compatibility mode (default)]" \ + "--rpm2-mode[RPM 2 compatibility mode]" \ + "--prep-script=[Specify a script for the PREP phase of RPM building]" \ + "--build-script=[Specify a script for the BUILD phase of RPM building]" \ + "--pre-install=[Specify a script for the pre-INSTALL phase of RPM building]" \ + "--install-script=[Specify a script for the INSTALL phase of RPM building]" \ + "--post-install=[Specify a script for the post-INSTALL phase of RPM building]" \ + "--pre-uninstall=[Specify a script for the pre-UNINSTALL phase of RPM building]" \ + "--post-uninstall=[Specify a script for the post-UNINSTALL phase of RPM building]" \ + "--clean-script=[Specify a script for the CLEAN phase of RPM building]" \ + "--verify-script=[Specify a script for the VERIFY phase of the RPM build]" \ + "--force-arch=[Force an architecture onto the RPM build process]" \ + "--quiet[Run the INSTALL phase of RPM building in quiet mode]" \ + "-q[Run the INSTALL phase of RPM building in quiet mode]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist_wininst] )) || +_setuppy_bdist_wininst() { + _arguments -s \ + "--bdist-dir=[temporary directory for creating the distribution]" \ + "--plat-name=[platform name to embed in generated filenames (default: linux-i686)]" \ + "-p[platform name to embed in generated filenames (default: linux-i686)]" \ + "--keep-temp[keep the pseudo-installation tree around after creating the distribution archive]" \ + "-k[keep the pseudo-installation tree around after creating the distribution archive]" \ + "--target-version=[require a specific python version on the target system]" \ + "--no-target-compile[do not compile .py to .pyc on the target system]" \ + "-c[do not compile .py to .pyc on the target system]" \ + "--no-target-optimize[do not compile .py to .pyo (optimized)on the target system]" \ + "-o[do not compile .py to .pyo (optimized)on the target system]" \ + "--dist-dir=[directory to put final built distributions in]" \ + "-d[directory to put final built distributions in]" \ + "--bitmap=[bitmap to use for the installer instead of python-powered logo]" \ + "-b[bitmap to use for the installer instead of python-powered logo]" \ + "--title=[title to display on the installer background instead of default]" \ + "-t[title to display on the installer background instead of default]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "--install-script=[basename of installation script to be run after installation or before uninstallation]" \ + "--pre-install-script=[Fully qualified filename of a script to be run before any files are installed. This script need not be in the distribution]" \ + "--user-access-control=[specify Vista's UAC handling - 'none'/default=no handling, 'auto'=use UAC if target Python installed for all users, 'force'=always use UAC]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_upload] )) || +_setuppy_upload() { + _arguments -s \ + "--repository=[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "-r[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "--show-response[display full response text from server]" \ + "--sign[sign files to upload using gpg]" \ + "-s[sign files to upload using gpg]" \ + "--identity=[GPG identity used to sign files]" \ + "-i[GPG identity used to sign files]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_check] )) || +_setuppy_check() { + _arguments -s \ + "--metadata[Verify meta-data]" \ + "-m[Verify meta-data]" \ + "--restructuredtext[Checks if long string meta-data syntax are reStructuredText-compliant]" \ + "-r[Checks if long string meta-data syntax are reStructuredText-compliant]" \ + "--strict[Will exit with an error if a check fails]" \ + "-s[Will exit with an error if a check fails]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_alias] )) || +_setuppy_alias() { + _arguments -s \ + "--remove[remove (unset) the alias]" \ + "-r[remove (unset) the alias]" \ + "--global-config[save options to the site-wide distutils.cfg file]" \ + "-g[save options to the site-wide distutils.cfg file]" \ + "--user-config[save options to the current user's pydistutils.cfg file]" \ + "-u[save options to the current user's pydistutils.cfg file]" \ + "--filename=[configuration file to use (default=setup.cfg)]" \ + "-f[configuration file to use (default=setup.cfg)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_bdist_egg] )) || +_setuppy_bdist_egg() { + _arguments -s \ + "--bdist-dir=[temporary directory for creating the distribution]" \ + "-b[temporary directory for creating the distribution]" \ + "--plat-name=[platform name to embed in generated filenames (default: linux-i686)]" \ + "-p[platform name to embed in generated filenames (default: linux-i686)]" \ + "--exclude-source-files[remove all .py files from the generated egg]" \ + "--keep-temp[keep the pseudo-installation tree around after creating the distribution archive]" \ + "-k[keep the pseudo-installation tree around after creating the distribution archive]" \ + "--dist-dir=[directory to put final built distributions in]" \ + "-d[directory to put final built distributions in]" \ + "--skip-build[skip rebuilding everything (for testing/debugging)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_develop] )) || +_setuppy_develop() { + _arguments -s \ + "--prefix=[installation prefix]" \ + "--zip-ok[install package as a zipfile]" \ + "-z[install package as a zipfile]" \ + "--multi-version[make apps have to require() a version]" \ + "-m[make apps have to require() a version]" \ + "--upgrade[force upgrade (searches PyPI for latest versions)]" \ + "-U[force upgrade (searches PyPI for latest versions)]" \ + "--install-dir=[install package to DIR]" \ + "-d[install package to DIR]" \ + "--script-dir=[install scripts to DIR]" \ + "-s[install scripts to DIR]" \ + "--exclude-scripts[Don't install scripts]" \ + "-x[Don't install scripts]" \ + "--always-copy[Copy all needed packages to install dir]" \ + "-a[Copy all needed packages to install dir]" \ + "--index-url=[base URL of Python Package Index]" \ + "-i[base URL of Python Package Index]" \ + "--find-links=[additional URL(s) to search for packages]" \ + "-f[additional URL(s) to search for packages]" \ + "--build-directory=[download/extract/build in DIR; keep the results]" \ + "-b[download/extract/build in DIR; keep the results]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--record=[filename in which to record list of installed files]" \ + "--always-unzip[don't install as a zipfile, no matter what]" \ + "-Z[don't install as a zipfile, no matter what]" \ + "--site-dirs=[list of directories where .pth files work]" \ + "-S[list of directories where .pth files work]" \ + "--editable[Install specified packages in editable form]" \ + "-e[Install specified packages in editable form]" \ + "--no-deps[don't install dependencies]" \ + "-N[don't install dependencies]" \ + "--allow-hosts=[pattern(s) that hostnames must match]" \ + "-H[pattern(s) that hostnames must match]" \ + "--local-snapshots-ok[allow building eggs from local checkouts]" \ + "-l[allow building eggs from local checkouts]" \ + "--version[print version information and exit]" \ + "--no-find-links[Don't load find-links defined in packages being installed]" \ + "--user[install in user site-package]" \ + "--uninstall[Uninstall this source package]" \ + "-u[Uninstall this source package]" \ + "--egg-path=[Set the path to be used in the .egg-link file]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_easy_install] )) || +_setuppy_easy_install() { + _arguments -s \ + "--prefix=[installation prefix]" \ + "--zip-ok[install package as a zipfile]" \ + "-z[install package as a zipfile]" \ + "--multi-version[make apps have to require() a version]" \ + "-m[make apps have to require() a version]" \ + "--upgrade[force upgrade (searches PyPI for latest versions)]" \ + "-U[force upgrade (searches PyPI for latest versions)]" \ + "--install-dir=[install package to DIR]" \ + "-d[install package to DIR]" \ + "--script-dir=[install scripts to DIR]" \ + "-s[install scripts to DIR]" \ + "--exclude-scripts[Don't install scripts]" \ + "-x[Don't install scripts]" \ + "--always-copy[Copy all needed packages to install dir]" \ + "-a[Copy all needed packages to install dir]" \ + "--index-url=[base URL of Python Package Index]" \ + "-i[base URL of Python Package Index]" \ + "--find-links=[additional URL(s) to search for packages]" \ + "-f[additional URL(s) to search for packages]" \ + "--build-directory=[download/extract/build in DIR; keep the results]" \ + "-b[download/extract/build in DIR; keep the results]" \ + "--optimize=[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "-O[also compile with optimization: -O1 for \"python -O\", -O2 for \"python -OO\", and -O0 to disable \[default: -O0\]]" \ + "--record=[filename in which to record list of installed files]" \ + "--always-unzip[don't install as a zipfile, no matter what]" \ + "-Z[don't install as a zipfile, no matter what]" \ + "--site-dirs=[list of directories where .pth files work]" \ + "-S[list of directories where .pth files work]" \ + "--editable[Install specified packages in editable form]" \ + "-e[Install specified packages in editable form]" \ + "--no-deps[don't install dependencies]" \ + "-N[don't install dependencies]" \ + "--allow-hosts=[pattern(s) that hostnames must match]" \ + "-H[pattern(s) that hostnames must match]" \ + "--local-snapshots-ok[allow building eggs from local checkouts]" \ + "-l[allow building eggs from local checkouts]" \ + "--version[print version information and exit]" \ + "--no-find-links[Don't load find-links defined in packages being installed]" \ + "--user[install in user site-package]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_egg_info] )) || +_setuppy_egg_info() { + _arguments -s \ + "--egg-base=[directory containing .egg-info directories (default: top of the source tree)]" \ + "-e[directory containing .egg-info directories (default: top of the source tree)]" \ + "--tag-svn-revision[Add subversion revision ID to version number]" \ + "-r[Add subversion revision ID to version number]" \ + "--tag-date[Add date stamp (e.g. 20050528) to version number]" \ + "-d[Add date stamp (e.g. 20050528) to version number]" \ + "--tag-build=[Specify explicit tag to add to version number]" \ + "-b[Specify explicit tag to add to version number]" \ + "--no-svn-revision[Don't add subversion revision ID \[default\]]" \ + "-R[Don't add subversion revision ID \[default\]]" \ + "--no-date[Don't include date stamp \[default\]]" \ + "-D[Don't include date stamp \[default\]]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_rotate] )) || +_setuppy_rotate() { + _arguments -s \ + "--match=[patterns to match (required)]" \ + "-m[patterns to match (required)]" \ + "--dist-dir=[directory where the distributions are]" \ + "-d[directory where the distributions are]" \ + "--keep=[number of matching distributions to keep]" \ + "-k[number of matching distributions to keep]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_saveopts] )) || +_setuppy_saveopts() { + _arguments -s \ + "--global-config[save options to the site-wide distutils.cfg file]" \ + "-g[save options to the site-wide distutils.cfg file]" \ + "--user-config[save options to the current user's pydistutils.cfg file]" \ + "-u[save options to the current user's pydistutils.cfg file]" \ + "--filename=[configuration file to use (default=setup.cfg)]" \ + "-f[configuration file to use (default=setup.cfg)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_setopt] )) || +_setuppy_setopt() { + _arguments -s \ + "--command=[command to set an option for]" \ + "-c[command to set an option for]" \ + "--option=[option to set]" \ + "-o[option to set]" \ + "--set-value=[value of the option]" \ + "-s[value of the option]" \ + "--remove[remove (unset) the value]" \ + "-r[remove (unset) the value]" \ + "--global-config[save options to the site-wide distutils.cfg file]" \ + "-g[save options to the site-wide distutils.cfg file]" \ + "--user-config[save options to the current user's pydistutils.cfg file]" \ + "-u[save options to the current user's pydistutils.cfg file]" \ + "--filename=[configuration file to use (default=setup.cfg)]" \ + "-f[configuration file to use (default=setup.cfg)]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_test] )) || +_setuppy_test() { + _arguments -s \ + "--test-module=[Run 'test_suite' in specified module]" \ + "-m[Run 'test_suite' in specified module]" \ + "--test-suite=[Test suite to run (e.g. 'some_module.test_suite')]" \ + "-s[Test suite to run (e.g. 'some_module.test_suite')]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_install_egg_info] )) || +_setuppy_install_egg_info() { + _arguments -s \ + "--install-dir=[directory to install to]" \ + "-d[directory to install to]" \ + "*::setup.py commands:_setup.py" +} + +(( $+functions[_setuppy_upload_docs] )) || +_setuppy_upload_docs() { + _arguments -s \ + "--repository=[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "-r[url of repository \[default: http://pypi.python.org/pypi\]]" \ + "--show-response[display full response text from server]" \ + "--upload-dir=[directory to upload]" \ + "*::setup.py commands:_setup.py" +} + +_setup.py "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sfdx b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sfdx new file mode 100644 index 00000000..8332fc05 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_sfdx @@ -0,0 +1,935 @@ +#compdef sfdx + +# DESCRIPTION: Zsh completion script for the Salesforce CLI +# AUTHOR: Wade Wegner (@WadeWegner) +# REPO: https://github.com/wadewegner/salesforce-cli-zsh-completion +# LICENSE: https://github.com/wadewegner/salesforce-cli-zsh-completion/blob/master/LICENSE + +local -a _1st_arguments + +_1st_arguments=( + "force\:alias\:list":"list username aliases for the Salesforce CLI" + "force\:alias\:set":"set username aliases for the Salesforce CLI" + "force\:apex\:class\:create":"create an Apex class" + "force\:apex\:execute":"execute anonymous Apex code" + "force\:apex\:log\:get":"fetch a debug log" + "force\:apex\:log\:list":"list debug logs" + "force\:apex\:test\:report":"display test results" + "force\:apex\:test\:run":"invoke Apex tests" + "force\:apex\:trigger\:create":"create an Apex trigger" + "force\:auth\:jwt\:grant":"authorize an org using the JWT flow" + "force\:auth\:sfdxurl\:store":"authorize an org using an SFDX auth URL" + "force\:auth\:web\:login":"authorize an org using the web login flow" + "force\:config\:get":"get config var values for given names" + "force\:config\:list":"list config vars for the Salesforce CLI" + "force\:config\:set":"set config vars for the Salesforce CLI" + "force\:data\:bulk\:delete":"bulk delete records from a csv file" + "force\:data\:bulk\:status":"view the status of a bulk data load job or batch" + "force\:data\:bulk\:upsert":"bulk upsert records from a CSV file" + "force\:data\:record\:create":"create a record" + "force\:data\:record\:delete":"delete a record" + "force\:data\:record\:get":"view a record" + "force\:data\:record\:update":"update a record" + "force\:data\:soql\:query":"execute a SOQL query" + "force\:data\:tree\:export":"export data from an org into sObject tree format for force:data:tree:import consumption" + "force\:data\:tree\:import":"import data into an org using SObject Tree Save API" + "force\:doc\:commands\:display":"display help for force commands" + "force\:doc\:commands\:list":"list the force commands" + "force\:lightning\:app\:create":"create a Lightning app" + "force\:lightning\:component\:create":"create a Lightning component" + "force\:lightning\:event\:create":"create a Lightning event" + "force\:lightning\:interface\:create":"create a Lightning interface" + "force\:lightning\:lint":"analyse (lint) Lightning component code" + "force\:lightning\:test\:create":"create a Lightning test" + "force\:lightning\:test\:install":"install Lightning Testing Service unmanaged package in your org" + "force\:lightning\:test\:run":"invoke Lightning component tests" + "force\:limits\:api\:display":"display current org’s limits" + "force\:mdapi\:convert":"convert Metadata API source into the Salesforce DX source format" + "force\:mdapi\:deploy":"deploy metadata to an org using Metadata API" + "force\:mdapi\:deploy\:report":"check the status of a metadata deployment" + "force\:mdapi\:retrieve":"retrieve metadata from an org using Metadata API" + "force\:mdapi\:retrieve\:report":"check the status of a metadata retrieval" + "force\:org\:create":"create a scratch org" + "force\:org\:delete":"mark a scratch org for deletion" + "force\:org\:display":"get org description" + "force\:org\:list":"list all orgs you’ve created or authenticated to" + "force\:org\:open":"open an org in your browser" + "force\:org\:shape\:create":"create a snapshot of org edition, features, and licenses" + "force\:org\:shape\:delete":"delete all org shapes for a target org" + "force\:org\:shape\:list":"list all org shapes you’ve created" + "force\:package1\:version\:create":"create a first-generation package version in the release org" + "force\:package1\:version\:create\:get":"retrieve the status of a package version creation request" + "force\:package1\:version\:display":"display details about a first-generation package version" + "force\:package1\:version\:list":"list package versions for the specified first-generation package or for the org" + "force\:package2\:create":"create a second-generation package" + "force\:package2\:list":"list all second-generation packages in the Dev Hub org" + "force\:package2\:update":"update a second-generation package" + "force\:package2\:version\:create":"create a second-generation package version" + "force\:package2\:version\:create\:get":"retrieve a package version creation request" + "force\:package2\:version\:create\:list":"list package version creation requests" + "force\:package2\:version\:get":"retrieve a package version in the Dev Hub org" + "force\:package2\:version\:list":"list all package versions in the Dev Hub org" + "force\:package2\:version\:update":"update a second-generation package version" + "force\:package\:install":"install a package in the target org" + "force\:package\:install\:get":"retrieve the status of a package installation request" + "force\:package\:installed\:list":"list the org’s installed packages" + "force\:package\:uninstall":"uninstall a second-generation package from the target org" + "force\:package\:uninstall\:get":"retrieve status of package uninstall request" + "force\:project\:create":"create a new SFDX project" + "force\:project\:upgrade":"update project config files to the latest format" + "force\:schema\:sobject\:describe":"describe an object" + "force\:schema\:sobject\:list":"list all objects of a specified category" + "force\:source\:convert":"convert Salesforce DX source into the Metadata API source format" + "force\:source\:open":"edit a Lightning Page with Lightning App Builder" + "force\:source\:pull":"pull source from the scratch org to the project" + "force\:source\:push":"push source to an org from the project" + "force\:source\:status":"list local changes and/or changes in a scratch org" + "force\:user\:create":"create a user for a scratch org" + "force\:user\:display":"displays information about a user of a scratch org" + "force\:user\:list":"lists all users of a scratch org" + "force\:user\:password\:generate":"generate a password for scratch org users" + "force\:user\:permset\:assign":"assign a permission set to one or more users of an org" + "force\:visualforce\:component\:create":"create a Visualforce component" + "force\:visualforce\:page\:create":"create a Visualforce page" +) + +_arguments '*:: :->command' + +if (( CURRENT == 1 )); then + _describe -t commands "sfdx command" _1st_arguments + return +fi + +local -a _command_args +case "$words[1]" in + force:limits:api:display) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:app:create) + _command_args=( + '(-n|--appname)'{-n,--appname}'[name of the generated Lightning app]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningApp*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:bulk:delete) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the sObject type of the records you’re deleting]' \ + '(-f|--csvfile)'{-f,--csvfile}'[the path to the CSV file containing the ids of the records to delete]:file:_files' \ + '(-w|--wait)'{-w,--wait}'[the number of minutes to wait for the command to complete before displaying the results]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:bulk:status) + _command_args=( + '(-i|--jobid)'{-i,--jobid}'[the ID of the job you want to view or of the job whose batch you want to view]' \ + '(-b|--batchid)'{-b,--batchid}'[the ID of the batch whose status you want to view]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:bulk:upsert) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the sObject type of the records you want to upsert]' \ + '(-f|--csvfile)'{-f,--csvfile}'[the path to the CSV file that defines the records to upsert]:file:_files' \ + '(-i|--externalid)'{-i,--externalid}'[the column name of the external ID; if not provided, an arbitrary ID is used]' \ + '(-w|--wait)'{-w,--wait}'[the number of minutes to wait for the command to complete before displaying the results]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:class:create) + _command_args=( + '(-n|--classname)'{-n,--classname}'[name of the generated Apex class]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultApexClass*,ApexException,ApexUnitTest,InboundEmailService)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:doc:commands:display) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:doc:commands:list) + _command_args=( + '(-u|--usage)'{-u,--usage}'[list only docopts usage strings]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:visualforce:component:create) + _command_args=( + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultVFComponent*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-n|--componentname)'{-n,--componentname}'[name of the generated Visualforce component]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(-l|--label)'{-l,--label}'[Visualforce component label]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:component:create) + _command_args=( + '(-n|--componentname)'{-n,--componentname}'[name of the generated Lightning component]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningCmp*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:mdapi:convert) + _command_args=( + '(-r|--rootdir)'{-r,--rootdir}'[the root directory containing the Metadata API source]:file:_files' \ + '(-d|--outputdir)'{-d,--outputdir}'[the output directory to store the sfdx source]:file:_files' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:convert) + _command_args=( + '(-r|--rootdir)'{-r,--rootdir}'[the source directory for the source to be converted]:file:_files' \ + '(-d|--outputdir)'{-d,--outputdir}'[the output directory to export the Metadata API source to]:file:_files' \ + '(-n|--packagename)'{-n,--packagename}'[the name of the package to associate with the Metadata API source]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:create) + _command_args=( + '(-f|--definitionfile)'{-f,--definitionfile}'[path to a scratch org definition file]:file:_files' \ + '(-j|--definitionjson)'{-j,--definitionjson}'[scratch org definition in json format ]' \ + '(-n|--nonamespace)'{-n,--nonamespace}'[creates the scratch org with no namespace]' \ + '(-c|--noancestors)'{-c,--noancestors}'[do not include second-generation package ancestors in the scratch org]' \ + '(-i|--clientid)'{-i,--clientid}'[connected app consumer key]' \ + '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the created org as the default username]' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the created scratch org]' \ + '(-e|--env)'{-e,--env}'[environment where the scratch org is created: \[sandbox*,virtual,prototype\] (sandbox*,virtual,prototype)]' \ + '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \ + '(-d|--durationdays)'{-d,--durationdays}'[duration of the scratch org (in days) (default:7, min:1, max:30)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:create) + _command_args=( + '(-n|--name)'{-n,--name}'[package name]' \ + '(-o|--containeroptions)'{-o,--containeroptions}'[\[*Managed | Unlocked | Locked\] container options for the package (Managed=DeveloperManagedSubscriberManaged, Unlocked=DeveloperControlledSubscriberEditable, Locked=DeveloperControlledSubscriberLocked)]' \ + '(-d|--description)'{-d,--description}'[package description]' \ + '(-e|--nonamespace)'{-e,--nonamespace}'[creates the package with no namespace; available only for developer-controlled packages.]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:user:create) + _command_args=( + '(-f|--definitionfile)'{-f,--definitionfile}'[file path to a user definition]:file:_files' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the created username to reference within the CLI]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:project:create) + _command_args=( + '(-n|--projectname)'{-n,--projectname}'[name of the generated project]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (Defaultsfdx-project.json*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-l|--loginurl)'{-l,--loginurl}'[Salesforce instance login URL (https://login.salesforce.com*)]' \ + '(-x|--sourceapiversion)'{-x,--sourceapiversion}'[source API version number (41.0*)]' \ + '(-s|--namespace)'{-s,--namespace}'[project associated namespace]' \ + '(-p|--defaultpackagedir)'{-p,--defaultpackagedir}'[default package directory name (force-app*)]:file:_files' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:delete) + _command_args=( + '(-p|--noprompt)'{-p,--noprompt}'[no prompt to confirm deletion]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:mdapi:deploy) + _command_args=( + '(-c|--checkonly)'{-c,--checkonly}'[validate deploy but don’t save to the org (default:false)]' \ + '(-d|--deploydir)'{-d,--deploydir}'[root of directory tree of files to deploy]:file:_files' \ + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 0)]' \ + '(-i|--jobid)'{-i,--jobid}'[WARNING: The flag "jobid" has been deprecated and will be removed in v41.01.0 or later. Instead, use "sfdx force:mdapi:deploy:report -i ".]' \ + '(-l|--testlevel)'{-l,--testlevel}'[deployment testing level (NoTestRun,RunSpecifiedTests,RunLocalTests,RunAllTestsInOrg)]' \ + '(-r|--runtests)'{-r,--runtests}'[tests to run if --testlevel RunSpecifiedTests]' \ + '(-e|--rollbackonerror)'{-e,--rollbackonerror}'[WARNING: The flag "rollbackonerror" has been deprecated and will be removed in v41.01.0 or later. Instead, use "ignoreerrors".]' \ + '(-o|--ignoreerrors)'{-o,--ignoreerrors}'[ignore any errors and do not roll back deployment (default:false)]' \ + '(-g|--ignorewarnings)'{-g,--ignorewarnings}'[whether a warning will allow a deployment to complete successfully (default:false)]' \ + '(-f|--zipfile)'{-f,--zipfile}'[path to .zip file of metadata to deploy]:file:_files' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[verbose output of deploy results]' \ + ) + ;; + force:mdapi:deploy:report) + _command_args=( + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 0)]' \ + '(-i|--jobid)'{-i,--jobid}'[job ID of the deployment you want to check]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[verbose output of deploy results]' \ + ) + ;; + force:org:display) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[emit additional command output to stdout]' \ + ) + ;; + force:user:display) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:event:create) + _command_args=( + '(-n|--eventname)'{-n,--eventname}'[name of the generated Lightning event]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningEvt*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:execute) + _command_args=( + '(-f|--apexcodefile)'{-f,--apexcodefile}'[path to a local file containing Apex code]:file:_files' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:config:get) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[emit additional command output to stdout]' \ + ) + ;; + force:package:install) + _command_args=( + '(-i|--id)'{-i,--id}'[ID of the package version to install (starts with 04t)]' \ + '(-w|--wait)'{-w,--wait}'[number of minutes to wait for installation status]' \ + '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \ + '(-p|--publishwait)'{-p,--publishwait}'[number of minutes to wait for subscriber package version ID to become available in the target org]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package:install:get) + _command_args=( + '(-i|--requestid)'{-i,--requestid}'[ID of the package install request you want to check]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package:installed:list) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:interface:create) + _command_args=( + '(-n|--interfacename)'{-n,--interfacename}'[name of the generated Lightning interface]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningIntf*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:auth:jwt:grant) + _command_args=( + '(-u|--username)'{-u,--username}'[authentication username]' \ + '(-f|--jwtkeyfile)'{-f,--jwtkeyfile}'[path to a file containing the private key]:file:_files' \ + '(-i|--clientid)'{-i,--clientid}'[OAuth client ID (sometimes called the consumer key)]' \ + '(-r|--instanceurl)'{-r,--instanceurl}'[the login URL of the instance the org lives on]' \ + '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \ + '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:lint) + _command_args=( + '(-i|--ignore)'{-i,--ignore}'[pattern used to ignore some folders]' \ + '(--files)--files[pattern used to include specific files]:file:_files' \ + '(-j|--json)'{-j,--json}'[format output as JSON]' \ + '(--config)--config[path to a custom ESLint configuration file]:file:_files' \ + '(--verbose)--verbose[report warnings in addition to errors]' \ + '(--exit)--exit[exit with error code 1 if there are lint issues]' \ + ) + ;; + force:alias:list) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:config:list) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:list) + _command_args=( + '(--all)--all[include expired, deleted, and unknown-status scratch orgs]' \ + '(--clean)--clean[remove all local org authorizations for non-active orgs]' \ + '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for confirmation]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[list more information about each org]' \ + ) + ;; + force:package2:list) + _command_args=( + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:user:list) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:log:get) + _command_args=( + '(-i|--logid)'{-i,--logid}'[ID of the log to display]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:log:list) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:open) + _command_args=( + '(-p|--path)'{-p,--path}'[navigation URL path]:file:_files' \ + '(-r|--urlonly)'{-r,--urlonly}'[display navigation URL, but don’t launch browser]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:open) + _command_args=( + '(-f|--sourcefile)'{-f,--sourcefile}'[file to edit]:file:_files' \ + '(-r|--urlonly)'{-r,--urlonly}'[generate a navigation URL; don’t launch the editor]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:visualforce:page:create) + _command_args=( + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultVFPage*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-n|--pagename)'{-n,--pagename}'[name of the generated Visualforce page]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(-l|--label)'{-l,--label}'[Visualforce page label]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:user:password:generate) + _command_args=( + '(-o|--onbehalfof)'{-o,--onbehalfof}'[comma-separated list of usernames for which to generate passwords]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:user:permset:assign) + _command_args=( + '(-n|--permsetname)'{-n,--permsetname}'[the name of the permission set to assign]' \ + '(-o|--onbehalfof)'{-o,--onbehalfof}'[comma-separated list of usernames or aliases to assign the permission set to]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:pull) + _command_args=( + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \ + '(-f|--forceoverwrite)'{-f,--forceoverwrite}'[ignore conflict warnings and overwrite changes to the project]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:push) + _command_args=( + '(-f|--forceoverwrite)'{-f,--forceoverwrite}'[ignore conflict warnings and overwrite changes to scratch org]' \ + '(-g|--ignorewarnings)'{-g,--ignorewarnings}'[deploy changes even if warnings are generated]' \ + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:record:create) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re creating]' \ + '(-v|--values)'{-v,--values}'[the = pairs you’re creating]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[create the record with tooling api]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:record:delete) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re deleting]' \ + '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re deleting]' \ + '(-w|--where)'{-w,--where}'[a list of = pairs to search for]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[delete the record with Tooling API]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:record:get) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re retrieving]' \ + '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re retrieving]' \ + '(-w|--where)'{-w,--where}'[a list of = pairs to search for]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[retrieve the record with Tooling API]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:record:update) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re updating]' \ + '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re updating]' \ + '(-w|--where)'{-w,--where}'[a list of = pairs to search for]' \ + '(-v|--values)'{-v,--values}'[the = pairs you’re updating]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[update the record with Tooling API]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:mdapi:retrieve) + _command_args=( + '(-a|--apiversion)'{-a,--apiversion}'[target API version for the retrieve (default 41.0)]' \ + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: -1 (no limit))]' \ + '(-r|--retrievetargetdir)'{-r,--retrievetargetdir}'[directory root for the retrieved files]:file:_files' \ + '(-k|--unpackaged)'{-k,--unpackaged}'[file path of manifest of components to retrieve]:file:_files' \ + '(-d|--sourcedir)'{-d,--sourcedir}'[source dir to use instead of default manifest sfdx-project.xml]' \ + '(-p|--packagenames)'{-p,--packagenames}'[a comma-separated list of packages to retrieve]' \ + '(-s|--singlepackage)'{-s,--singlepackage}'[a single-package retrieve (default: false)]' \ + '(-i|--jobid)'{-i,--jobid}'[WARNING: The flag "jobid" has been deprecated and will be removed in v41.01.0 or later. Instead, use "sfdx force:mdapi:retrieve:report -i -r ".]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[verbose output of retrieve result]' \ + ) + ;; + force:mdapi:retrieve:report) + _command_args=( + '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: -1 (no limit))]' \ + '(-r|--retrievetargetdir)'{-r,--retrievetargetdir}'[directory root for the retrieved files]:file:_files' \ + '(-i|--jobid)'{-i,--jobid}'[job ID of the retrieve you want to check]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[verbose output of retrieve result]' \ + ) + ;; + force:alias:set) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:config:set) + _command_args=( + '(-g|--global)'{-g,--global}'[set config var globally (to be used from any directory)]:file:_files' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:auth:sfdxurl:store) + _command_args=( + '(-f|--sfdxurlfile)'{-f,--sfdxurlfile}'[path to a file containing the sfdx url]:file:_files' \ + '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \ + '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:shape:create) + _command_args=( + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:shape:delete) + _command_args=( + '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for confirmation]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username for the target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:org:shape:list) + _command_args=( + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[list more information about each org shape]' \ + ) + ;; + force:schema:sobject:describe) + _command_args=( + '(-s|--sobjecttype)'{-s,--sobjecttype}'[the API name of the object to describe]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:schema:sobject:list) + _command_args=( + '(-c|--sobjecttypecategory)'{-c,--sobjecttypecategory}'[the type of objects to list (all|custom|standard)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:soql:query) + _command_args=( + '(-q|--query)'{-q,--query}'[SOQL query to execute]' \ + '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[execute query with Tooling API]' \ + '(-r|--resultformat)'{-r,--resultformat}'[query result format emitted to stdout; --json flag overrides this parameter (human*,csv,json)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:source:status) + _command_args=( + '(-a|--all)'{-a,--all}'[list all the changes that have been made]' \ + '(-l|--local)'{-l,--local}'[list the changes that have been made locally]' \ + '(-r|--remote)'{-r,--remote}'[list the changes that have been made in the scratch org]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:test:create) + _command_args=( + '(-n|--testname)'{-n,--testname}'[name of the generated Lightning test]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningTest*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:lightning:test:install) + _command_args=( + '(-w|--wait)'{-w,--wait}'[number of minutes to wait for installation status (default:2)]' \ + '(-r|--releaseversion)'{-r,--releaseversion}'[release version of Lightning Testing Service (default:latest)]' \ + '(-t|--packagetype)'{-t,--packagetype}'[type of unmanaged package. 'full' option contains both jasmine and mocha, plus examples (full*,jasmine,mocha)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:test:report) + _command_args=( + '(-i|--testrunid)'{-i,--testrunid}'[ID of test run]' \ + '(-c|--codecoverage)'{-c,--codecoverage}'[retrieve code coverage results]' \ + '(-d|--outputdir)'{-d,--outputdir}'[directory to store test run files]:file:_files' \ + '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \ + '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[display Apex test processing details]' \ + ) + ;; + force:apex:test:run) + _command_args=( + '(-n|--classnames)'{-n,--classnames}'[comma-separated list of Apex test class names to execute]' \ + '(-s|--suitenames)'{-s,--suitenames}'[comma-separated list of Apex test suite names to execute]' \ + '(-c|--codecoverage)'{-c,--codecoverage}'[retrieve code coverage results]' \ + '(-d|--outputdir)'{-d,--outputdir}'[directory to store test run files]:file:_files' \ + '(-l|--testlevel)'{-l,--testlevel}'[testlevel enum value (RunLocalTests,RunAllTestsInOrg,RunSpecifiedTests)]' \ + '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \ + '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \ + '(--precompilewait)--precompilewait[how long to wait (in minutes) for Apex pre-compilation (default:3, min:3)]' \ + '(-y|--synchronous)'{-y,--synchronous}'[run tests from a single class synchronously]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[display Apex test processing details]' \ + ) + ;; + force:lightning:test:run) + _command_args=( + '(-a|--appname)'{-a,--appname}'[name of your Lightning test application]' \ + '(-d|--outputdir)'{-d,--outputdir}'[directory path to store test run artifacts: for example, log files and test results]:file:_files' \ + '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \ + '(-f|--configfile)'{-f,--configfile}'[path to config file for the test]:file:_files' \ + '(-o|--leavebrowseropen)'{-o,--leavebrowseropen}'[leave browser open]' \ + '(-t|--timeout)'{-t,--timeout}'[time (ms) to wait for results element in dom (default:60000)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:tree:export) + _command_args=( + '(-q|--query)'{-q,--query}'[soql query, or filepath of file containing a soql query, to retrieve records]:file:_files' \ + '(-p|--plan)'{-p,--plan}'[generate multiple sObject tree files and a plan definition file for aggregated import]' \ + '(-x|--prefix)'{-x,--prefix}'[prefix of generated files]' \ + '(-d|--outputdir)'{-d,--outputdir}'[directory to store files]:file:_files' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:data:tree:import) + _command_args=( + '(-f|--sobjecttreefiles)'{-f,--sobjecttreefiles}'[comma-delimited, ordered paths of json files containing collection of record trees to insert]:file:_files' \ + '(-p|--plan)'{-p,--plan}'[path to plan to insert multiple data files that have master-detail relationships]:file:_files' \ + '(-c|--contenttype)'{-c,--contenttype}'[if data file extension is not .json, provide content type (applies to all files)]' \ + '(--confighelp)--confighelp[display schema information for the --plan configuration file to stdout; if you use this option, all other options except --json are ignored]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:apex:trigger:create) + _command_args=( + '(-n|--triggername)'{-n,--triggername}'[name of the generated Apex trigger]' \ + '(-t|--template)'{-t,--template}'[template to use for file creation (ApexTrigger*)]' \ + '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \ + '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \ + '(-a|--apiversion)'{-a,--apiversion}'[API version number (41.0*,40.0)]' \ + '(-s|--sobject)'{-s,--sobject}'[sObject to create a trigger on (SOBJECT*)]' \ + '(-e|--triggerevents)'{-e,--triggerevents}'[events that fire the trigger (before insert*,before upsert,before delete,after insert,after upsert,after delete,after undelete)]' \ + '(--json)--json[JSON output]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package:uninstall) + _command_args=( + '(-i|--id)'{-i,--id}'[ID of the package to uninstall (starts with 04t)]' \ + '(-w|--wait)'{-w,--wait}'[number of minutes to wait for uninstall status]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package:uninstall:get) + _command_args=( + '(-i|--requestid)'{-i,--requestid}'[ID of the package uninstall request you want to check]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:update) + _command_args=( + '(-i|--package2id)'{-i,--package2id}'[id of the package (starts with 0Ho)]' \ + '(-n|--name)'{-n,--name}'[package name]' \ + '(-d|--description)'{-d,--description}'[package description]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:project:upgrade) + _command_args=( + '(-f|--forceupgrade)'{-f,--forceupgrade}'[run all upgrades even if project has already been upgraded]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package1:version:create) + _command_args=( + '(-i|--packageid)'{-i,--packageid}'[ID of the metadata package (starts with 033) of which you’re creating a new version]' \ + '(-n|--name)'{-n,--name}'[package version name]' \ + '(-d|--description)'{-d,--description}'[package version description]' \ + '(-v|--version)'{-v,--version}'[package version in major.minor format, for example, 3.2]' \ + '(-m|--managedreleased)'{-m,--managedreleased}'[create a managed package version]' \ + '(-r|--releasenotesurl)'{-r,--releasenotesurl}'[release notes URL]' \ + '(-p|--postinstallurl)'{-p,--postinstallurl}'[post install URL]' \ + '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \ + '(-w|--wait)'{-w,--wait}'[minutes to wait for the package version to be created (default: 2 minutes)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:create) + _command_args=( + '(-i|--package2id)'{-i,--package2id}'[ID of the parent package (starts with 0Ho)]' \ + '(-d|--directory)'{-d,--directory}'[path to directory that contains the contents of the package version]:file:_files' \ + '(-b|--branch)'{-b,--branch}'[the package version’s branch]' \ + '(-t|--tag)'{-t,--tag}'[the package version’s tag]' \ + '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \ + '(-p|--preserve)'{-p,--preserve}'[temp files are preserved that would otherwise be deleted]' \ + '(-j|--validateschema)'{-j,--validateschema}'[sfdx-project.json is validated against JSON schema]' \ + '(-w|--wait)'{-w,--wait}'[minutes to wait for the package version to be created (default:0)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package1:version:create:get) + _command_args=( + '(-i|--requestid)'{-i,--requestid}'[PackageUploadRequest ID]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:create:get) + _command_args=( + '(-i|--package2createrequestid)'{-i,--package2createrequestid}'[package2 version creation request ID (starts with 08c)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:create:list) + _command_args=( + '(-c|--createdlastdays)'{-c,--createdlastdays}'[created in the last specified number of days (starting at 00:00:00 of first day to now; 0 for today)]' \ + '(-s|--status)'{-s,--status}'[filter the list by version creation request status (Queued,InProgress,Success,Error)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package1:version:display) + _command_args=( + '(-i|--packageversionid)'{-i,--packageversionid}'[metadata package version ID (starts with 04t)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:get) + _command_args=( + '(-i|--package2versionid)'{-i,--package2versionid}'[the package version ID (starts wtih 05i)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package1:version:list) + _command_args=( + '(-i|--packageid)'{-i,--packageid}'[metadata package ID (starts with 033)]' \ + '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:package2:version:list) + _command_args=( + '(-c|--createdlastdays)'{-c,--createdlastdays}'[created in the last specified number of days (starting at 00:00:00 of first day to now; 0 for today)]' \ + '(-m|--modifiedlastdays)'{-m,--modifiedlastdays}'[list items modified in the specified last number of days (starting at 00:00:00 of first day to now; 0 for today)]' \ + '(-i|--package2ids)'{-i,--package2ids}'[filter results on specified comma-delimited package2 ids (start with 0Ho)]' \ + '(-r|--released)'{-r,--released}'[display released versions only]' \ + '(-o|--orderby)'{-o,--orderby}'[order by the specified package2 version fields]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--concise)--concise[display limited package2 version details]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + '(--verbose)--verbose[display extended package2 versions detail]' \ + ) + ;; + force:package2:version:update) + _command_args=( + '(-i|--package2versionid)'{-i,--package2versionid}'[the package version ID (starts wtih 05i)]' \ + '(-n|--name)'{-n,--name}'[the package version name]' \ + '(-d|--description)'{-d,--description}'[the package version description]' \ + '(-b|--branch)'{-b,--branch}'[the package version branch]' \ + '(-t|--tag)'{-t,--tag}'[the package version tag]' \ + '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \ + '(-s|--setasreleased)'{-s,--setasreleased}'[set the package version as released (can’t be undone)]' \ + '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + force:auth:web:login) + _command_args=( + '(-i|--clientid)'{-i,--clientid}'[OAuth client ID (sometimes called the consumer key)]' \ + '(-r|--instanceurl)'{-r,--instanceurl}'[the login URL of the instance the org lives on]' \ + '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \ + '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \ + '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \ + '(--disablemasking)--disablemasking[disable masking of user input (for use with problematic terminals)]' \ + '(--json)--json[format output as json]' \ + '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \ + ) + ;; + esac + +_arguments \ + $_command_args \ + && return 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_showoff b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_showoff new file mode 100644 index 00000000..64b8e97e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_showoff @@ -0,0 +1,109 @@ +#compdef showoff +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Showoff (https://github.com/schacon/showoff). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bruno Michel (https://github.com/nono) +# +# ------------------------------------------------------------------------------ + + +local curcontext="$curcontext" state line cmds ret=1 + +_arguments -C \ + '1: :->cmds' \ + '*: :->args' && ret=0 + +case $state in + cmds) + cmds=( + 'add:Add a new slide at the end in a given dir' + 'new:Add a new slide at the end in a given dir' + 'create:Create new showoff presentation' + 'init:Create new showoff presentation' + 'help:Shows list of commands or help for one command' + 'heroku:Setup your presentation to serve on Heroku' + 'serve:Serves the showoff presentation in the current directory' + 'static:Generate static version of presentation' + ) + _describe -t commands 'showoff command' cmds && ret=0 + ;; + args) + case $line[1] in + (add|new) + _arguments \ + '(-d --dir)'{-d,--dir}'=[Slide dir (where to put a new slide file)]:directory:_files' \ + '(-n --name)'{-n,--name}'=[Slide name (name of the new slide file)]:basename' \ + {-s,--source}'=[Include code from the given file as the slide body]:file:_files' \ + '(-t --style --type)'{-t,--style,--type}'=[Slide Type/Style (default: title)]:style' \ + '(-u --no-number)'{-u,--no-number}'[Don'\''t number the slide, use the given name verbatim]' \ + '1:title' && ret=0 + ;; + (create|init) + _arguments \ + '(-d --slidedir)'{-d,--slidedir}'=[Sample slide directory name (default: one)]:arg' \ + '(-n --nosamples)'{-n,--nosamples}'=[Don'\''t create sample slides]' \ + '1:dir_name' && ret=0 + ;; + help) + _values 'commands' add new create init help heroku serve static && ret=0 + ;; + heroku) + _message 'please enter an heroku_name' && ret=0 + ;; + serve) + _arguments \ + '(-h --host)'{-h,--host}'=[Host or ip to run on (default: localhost)]:host' \ + '(-p --port)'{-p,--port}'=[Port on which to run (default: 9090)]:port' \ + '1:title' && ret=0 + ;; + static) + _message 'please enter a name' && ret=0 + ;; + *) + (( ret )) && _message 'no more arguments' + ;; + esac + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_srm b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_srm new file mode 100644 index 00000000..08d2a324 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_srm @@ -0,0 +1,84 @@ +#compdef srm +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for srm. +# +# It is based on the rm completion script from Zsh. +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Sorin Ionescu +# +# ------------------------------------------------------------------------------ + +local -a opts args +args=( + '(-f --force)'{-f,--force}'[ignore nonexistent files, never prompt]' + '(-r --interactive)'{-i,--interactive}'[prompt before any removal]' + '(-r -R --recursive)'{-r,-R,--recursive}'[remove the contents of directories recursively]' + '(-s --simple)'{-s,--simple}'[only overwrite with a single pass of random data]' + '(-v --verbose)'{-v,--verbose}'[explain what is being done]' + '(- *)--help[display help message and exit]' + '(- *)--version[output version information and exit]' + '*::files:->file' +) + +if _pick_variant gnu=gnu unix --help; then + args+=( + '(-x --one-file-system)'{-x,--one-file-system}'[stay within filesystems of files given as arguments]' + '(-P --openbsd)'{-P,--openbsd}'[overwrite the file 3 times (0xff, 0x00, 0xff)]' + '(-D --dod)'{-D,--dod}'[overwrite the file with 7 US DoD compliant passes (0xF6, 0x00, 0xFF, random, 0x00, 0xFF, random)]' + '(-E --doe)'{-E,--doe}'[overwrite the file with 3 US DoE compliant passes (random, random, DoE)]' + ) +else + args+=( + '(-m --medium)'{-m,--medium}'[overwrite the file with 7 US DoD compliant passes (0xF6, 0x00, 0xFF, random, 0x00, 0xFF, random)]' + '(-z --zero)'{-z,--zero}'[after overwriting, zero blocks used by file]' + '(-n --nounlink)'{-n,--nounlink}'[overwrite file, but do not rename or unlink it]' + ) +fi + +local curcontext=$curcontext state line ret=1 +local -A opt_args + +_arguments -s -S -C $opts \ + $args && ret=0 + +case $state in + (file) + local -a ignored + ignored=() + ((CURRENT > 1)) && + ignored+=(${line[1,CURRENT-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) + ((CURRENT < $#line)) && + ignored+=(${line[CURRENT+1,-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) + _files -F ignored && ret=0 + ;; +esac + +return $ret diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_stack b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_stack new file mode 100644 index 00000000..9230b4c7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_stack @@ -0,0 +1,134 @@ +#compdef stack +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ------------------------------------------------------------------------------ +# +# Completion script for stack (https://github.com/commercialhaskell/stack). +# +# ------------------------------------------------------------------------------ +# Authors +# ------------------------------------------------------------------------------ +# +# * Toshiki Teramura +# * Nikita Ursol +# +# ------------------------------------------------------------------------------ + +_stack () { + _arguments \ + --help'[show usage information]' \ + --version'[show version]' \ + --numeric-version'[show only version number]' \ + --hpack-numeric-version"[show only hpack's version number]" \ + '--docker[enable using a Docker container, run "stack --docker-help" for details]' \ + '--no-docker[disable using a Docker container, run "stack --docker-help" for details]' \ + '--nix[enable use of a Nix-shell, run "stack --nix-help" for details]' \ + '--no-nix[disable use of a Nix-shell, run "stack --nix-help" for details]' \ + --verbosity'[verbosity: silent, error, warn, info, debug]' \ + {-v,--verbose}'[enable verbose mode: verbosity level "debug"]' \ + --silent'[enable silent mode: verbosity level "silent"]' \ + --time-in-log'[enable inclusion of timings in logs, to use diff with logs]' \ + --no-time-in-log'[disable inclusion of timings in logs, to use diff with logs]' \ + --stack-root'[absolute path to the global stack root directory]' \ + --work-dir'[relative path of work directory]' \ + --system-ghc'[enable using the system installed GHC if available and a matching version]' \ + --no-system-ghc'[disable using the system installed GHC if available and a matching version]' \ + --install-ghc'[enable downloading and installing GHC if necessary]' \ + --no-install-ghc'[disable downloading and installing GHC if necessary]' \ + --arch'[system architecture, e.g. i386, x86_64]' \ + --ghc-variant'[specialized GHC variant, e.g. integersimple (incompatible with --system-ghc)]' \ + --ghc-build'[specialized GHC build, e.g. "gmp4" or "standard" (usually auto-detected)]' \ + {-j,--jobs}'[number of concurrent jobs to run]' \ + --extra-include-dirs'[extra directories to check for C header files]' \ + --extra-lib-dirs'[extra directories to check for libraries]' \ + --with-gcc'[use custom path to gcc executable]' \ + --with-hpack'[use custom path to hpack executable]' \ + --skip-ghc-check'[enable skipping the GHC version and architecture check]' \ + --no-skip-ghc-check'[disable skipping the GHC version and architecture check]' \ + --skip-msys'[enable skipping the local MSYS installation (Windows only)]' \ + --no-skip-msys'[disable skipping the local MSYS installation (Windows only)]' \ + --local-bin-path'[install binaries to specified location]' \ + --setup-info-yaml'[alternate URL or relative / absolute path for stack dependencies]' \ + --modify-code-page'[enable setting the codepage to support UTF-8 (Windows only)]' \ + --no-modify-code-page'[disable setting the codepage to support UTF-8 (Windows only)]' \ + --allow-different-user'[enable permission for non-owners to use a stack installation (POSIX only)]' \ + --no-allow-different-user'[disable permission for non-owners to use a stack installation (POSIX only)]' \ + --dump-logs'[enable dump the build output logs for local packages to the console]' \ + --no-dump-logs'[disable dump the build output logs for local packages to the console]' \ + {--color,--colour}'[specify when to use color in output; accepts "always", "never", "auto"]' \ + --resolver'[override resolver in project file]' \ + --terminal'[enable overriding terminal detection in the case of running in a false terminal]' \ + --no-terminal'[disable overriding terminal detection in the case of running in a false terminal]' \ + {--stack-colors,--stack-colours}"[specify stack's output styles]" \ + --terminal-width'[specify the width of the terminal, used for pretty-print messages]' \ + --stack-yaml'[override project stack.yaml file]' \ + --lock-file'[specify how to interact with lock files.]' \ + '*: :__stack_modes' +} + +__stack_modes () { + _values \ + 'subcommand' \ + 'build[build the project(s) in this directory/configuration]' \ + 'install[build executables and install to a user path]' \ + 'test[build and test the project(s) in this directory/configuration]' \ + 'bench[build and benchmark the project(s) in this directory/configuration]' \ + 'haddock[generate haddocks for the project(s) in this directory/configuration]' \ + 'new[create a brand new project]' \ + 'templates[show how to find templates available for "stack new".]' \ + 'init[create stack project config from cabal or hpack package specifications]' \ + 'setup[get the appropriate ghc for your project]' \ + 'path[print out handy path information]' \ + "ls[list command. (supports snapshots, dependencies and stack's styles)]" \ + 'unpack[unpack one or more packages locally]' \ + 'update[update the package index]' \ + 'upgrade[upgrade to the latest stack]' \ + 'upload[upload a package to Hackage]' \ + 'sdist[create source distribution tarballs]' \ + 'dot[visualize your projects dependency graph using Graphviz dot]' \ + 'ghc[run ghc]' \ + 'hoogle[run hoogle, the Haskell API search engine.]' \ + 'exec[execute a command]' \ + 'run[build and run an executable.]' \ + 'ghci[run ghci in the context of package(s) (experimental)]' \ + "repl[run ghci in the context of package(s) (experimental) (alias for 'ghci')]" \ + 'runghc[run runghc]' \ + "runhaskell[run runghc (alias for 'runghc')]" \ + 'script[run a Stack Script]' \ + 'eval[evaluate some haskell code inline.]' \ + 'clean[delete build artefacts for the project packages.]' \ + 'purge[delete the project stack working directories.]' \ + 'query[query general build information (experimental)]' \ + 'ide[ide-specific commands]' \ + 'docker[subcommands specific to Docker use]' \ + 'config[subcommands for accessing and modifying configuration values]' \ + 'hpc[subcommands specific to Haskell Program Coverage]' + +} + +_stack "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_subl b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_subl new file mode 100644 index 00000000..9cb3471b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_subl @@ -0,0 +1,55 @@ +#compdef subl +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Sublime Text (https://www.sublimetext.com/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Fabian Klötzl (https://github.com/kloetzl) +# +# ------------------------------------------------------------------------------ + + +local I="-h --help -v --version" +local -a args +args+=( + "(- *)"{-h,--help}'[display usage information]' + "(- *)"{-v,--version}'[display version information]' + "($I)--project[load the given project]:project" + "($I)--command[run the given command]:command" + "($I -n --new-window)"{-n,--new-window}'[open a new window]' + "($I -a --add)"{-a,--add}'[add folders to the current window]' + "($I -w --wait)"{-w,--wait}'[wait for the files to be closed before returning]' + "($I -b --background)"{-b,--background}"[don't activate the application]" +) +_arguments "$args[@]" '*:file:_files' + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_subliminal b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_subliminal new file mode 100644 index 00000000..9534de8c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_subliminal @@ -0,0 +1,38 @@ +#compdef subliminal +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Subliminal (https://github.com/Diaoul/subliminal). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '(- : *)'{-h,--help}'[show help message and exit]' \ + '(- : *)--version[show version number and exit]' \ + '*'{-l,--language}'[wanted language]: :_language_codes ISO-639-1' \ + '*'{-p,--plugin}'[plugin to use]:plugin name:((OpenSubtitles BierDopje TheSubDB SubsWiki Subtitulos))' \ + '(-m --multi)'{-m,--multi}'[download multiple subtitle languages]' \ + '(-f --force)'{-f,--force}'[replace existing subtitle file]' \ + '(-w --workers)'{-w,--workers}'[number of threads to use]:number' \ + '(-c --compatibility)'{-c,--compatibility}'[try not to use unicode]' \ + '(-q --quiet -v --verbose)'{-q,--quiet}'[disable output]' \ + '(-v --verbose -q --quiet)'{-v,--verbose}'[verbose output]' \ + '(--no-cache-dir)--cache-dir[cache directory to use]: :_files -/' \ + '(--cache-dir)--no-cache-dir[do not use cache directory]' \ + '*: :_files' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_supervisorctl b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_supervisorctl new file mode 100644 index 00000000..b48ce13a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_supervisorctl @@ -0,0 +1,174 @@ +#compdef supervisorctl +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for supervisorctl from Supervisord (http://supervisord.org) +# +# Sources: +# https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/supervisor +# https://github.com/zsh-users/zsh-completions/blob/master/src/_brew +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Matt Black (https://github.com/mafrosis) +# * dongweiming (https://github.com/dongweiming) +# +# ------------------------------------------------------------------------------ + + +_supervisorctl_list_procs() { + procs=(${(f)"$(_call_program supervisor_procs supervisorctl avail | awk '{print $1}')"}) +} +_supervisorctl_list_groups() { + groups=(${(f)"$(_call_program supervisor_procs supervisorctl avail | awk '$1 ~ /:/ { print substr($1,1,index($1,":")) }' | uniq)"}) +} + +_supervisorctl_list_procs_stopped() { + procs=(${(f)"$(_call_program supervisor_procs supervisorctl status | awk '/STOPPED/ {print $1}')"}) +} +_supervisorctl_list_groups_stopped() { + groups=(${(f)"$(_call_program supervisor_procs supervisorctl status | awk '$1$2 ~ /:(.*)STOPPED/ { print substr($1,1,index($1,":")) }' | uniq)"}) +} + +_supervisorctl_list_procs_running() { + procs=(${(f)"$(_call_program supervisor_procs supervisorctl status | awk '/RUNNING/ {print $1}')"}) +} +_supervisorctl_list_groups_running() { + groups=(${(f)"$(_call_program supervisor_procs supervisorctl status | awk '$1$2 ~ /:(.*)RUNNING/ { print substr($1,1,index($1,":")) }' | uniq)"}) +} + +local -a _1st_arguments +_1st_arguments=( + 'add:Activates any updates in config for process/group' + 'avail:Display all configured processes' + 'clear:Clear single/multiple/all process log files' + 'exit:Exit the supervisor shell' + 'fg:Connect to a process in foreground mode' + 'maintail:tail of supervisor main log file' + 'open:Connect to a remote supervisord process. (for UNIX domain socket, use unix:///socket/path)' + 'pid:Get the PID of process/supervisord' + 'quit:Exit the supervisor shell' + 'reload:Restart the remote supervisord' + 'remove:Removes process/group from active config' + "reread:Reload the daemon's configuration files" + 'restart:Restart process, group or all' + 'shutdown:Shut the remote supervisord down' + 'start:Start process, group or all' + 'status:Get process/group status info' + 'stop:Stop process, group or all' + 'tail:tail of process stdout' + 'update:Reload config and add/remove as necessary' + 'version:Show the version of the remote supervisord process' + 'help:Show help' +) + +local expl +local -a procs + +_arguments \ + {--configuration,-c}='[configuration file path (default /etc/supervisor.conf)]:filename:_files' \ + {--help,-h}'[print usage message and exit]:' \ + {--interactive,-i}'[start an interactive shell after executing commands]' \ + {--serverurl,-s}='[URL on which supervisord server is listening (default "http://localhost:9001")]' \ + {--username,-u}='[username to use for authentication with server]:username:_users' \ + {--password,-p}='[password to use for authentication with server]:password:' \ + {--history-file,-r}'[keep a readline history (if readline is available)]:filename:_files' \ + '*:: :->subcmds' && return 0 + +if (( CURRENT == 1 )); then + _describe -t commands 'supervisorctl subcommand' _1st_arguments + return +fi + +case "$words[1]" in + help) + tasks=(add avail clear exit fg maintail open pid quit reload remove \ + reread restart shutdown start status stop tail update version) + + _wanted tasks expl 'help' compadd $tasks ;; + + add|fg|remove) + # commands that only operate on processes + _supervisorctl_list_procs + _wanted procs expl 'process' compadd -a procs ;; + + clear|pid) + # commands that operate on processes and "all" + _supervisorctl_list_procs + procs+=('all') + _wanted procs expl 'process' compadd -a procs ;; + + status|update) + # commands that operate on processes, groups & "all" + _supervisorctl_list_procs + procs+=('all') + _wanted procs expl 'process' compadd -a procs + + _supervisorctl_list_groups + _wanted groups expl 'group' compadd -a groups ;; + + stop) + # commands that operate on RUNNING processes, groups & "all" + _supervisorctl_list_procs_running + procs+=('all') + _wanted procs expl 'process' compadd -a procs + + _supervisorctl_list_groups_running + _wanted groups expl 'group' compadd -a groups ;; + + restart|start) + # commands that operate on STOPPED processes, groups & "all" + _supervisorctl_list_procs_stopped + procs+=('all') + _wanted procs expl 'process' compadd -a procs + + _supervisorctl_list_groups_stopped + _wanted groups expl 'group' compadd -a groups ;; + + tail|maintail) + _arguments \ + '-f[Continuous tail of named process stdout]' \ + '-[last N *bytes* of process stdout]:number' \ + '1: :->forms' && return 0 + + if [[ $state == forms ]]; then + _supervisorctl_list_procs + _wanted procs expl 'processes' compadd -a procs + fi ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_svm b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_svm new file mode 100644 index 00000000..d778f34d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_svm @@ -0,0 +1,169 @@ +#compdef svm +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for svm (https://github.com/yuroyoro/svm) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Hideaki Miyake (https://github.com/mollifier) +# +# ------------------------------------------------------------------------------ + +local context curcontext="$curcontext" state line ret=1 +typeset -A opt_args + + +local -a _1st_arguments +_1st_arguments=( + 'help:show this usage information' + 'current:show the currently use scala version' + "list:show the scala version installed in svm_path(default is ${HOME}/.svm)" + "versions:show the available scala version not installed" + 'install:install specific scala version' + 'remove:uninstall specific scala version and remove their sources' + 'switch:setup to use a specific scala version' + 'update-latest:install or update nightly build scala version' + 'latest:setup to use nightly build scala version' + 'stable:setup to use stable(x.x.x.final) scala version' +) + +_arguments -C \ + '(-)-h[show this usage information]' \ + '-c[show the currently use scala version]' \ + "-l[show the scala version installed in svm_path(default is ${HOME}/.svm)]" \ + '-v[show the abalabe scala version not installed]' \ + '-i[install specific scala version]: :_svm_completion_not_installed_scala_versions' \ + '-r[uninstall specific scala version and remove their sources]: :_svm_completion_installed_scala_versions' \ + '(-s -u)'{-s,-u}'[setup to use a specific scala version]: :_svm_completion_not_selected_scala_versions' \ + '1: :->cmds' \ + '*:: :->args' && ret=0 + + +# installed scala versions +(( $+functions[_svm_completion_installed_scala_versions] )) || +_svm_completion_installed_scala_versions() { + local -a _installed_versions + _current_version="${$(_call_program installed svm current)#currently version is[[:space:]]*}" + + # collect lines starts with digit + _installed_versions=( ${(M)${(@f)"$(_call_program installed svm list)"}:#[[:digit:]]*} ) + + _describe -t installed "installed versions" _installed_versions +} + +# installed and not selected scala versions +(( $+functions[_svm_completion_not_selected_scala_versions] )) || +_svm_completion_not_selected_scala_versions() { + local _current_version + local -a _not_selected_versions + + _current_version="${$(_call_program installed svm current)#currently version is[[:space:]]*}" + + # collect lines starts with digit + _not_selected_versions=( ${(M)${(@f)"$(_call_program installed svm list)"}:#[[:digit:]]*} ) + + # remove current version + _not_selected_versions=( ${_not_selected_versions:#$_current_version}) + _describe -t installed "not selected versions" _not_selected_versions +} + +# not installed scala versions +(( $+functions[_svm_completion_not_installed_scala_versions] )) || +_svm_completion_not_installed_scala_versions() { + local -a _not_installed_versions + # collect lines starts with digit + _not_installed_versions=( ${(M)${(@f)"$(_call_program installed svm versions)"}:#[[:digit:]]*} ) + + _describe -t notinstalled "not installed versions" _not_installed_versions +} + + +case $state in + cmds) + # action + case $PREFIX in + u*) + # complete command synonyms + local -a _synonym_arguments + _synonym_arguments=( + 'uninstall:uninstall specific scala version and remove their sources' + 'use:setup to use a specific scala version' + 'update-latest:install or update nightly build scala version' + ) + _describe -t actions 'svm actions' _synonym_arguments && ret=0 + ;; + + *) + _describe -t actions 'svm actions' _1st_arguments + _svm_completion_not_selected_scala_versions && ret=0 + ;; + esac + ;; # end action + + args) + # scala version number + case $words[1] in + install) + # install not installed version + _arguments \ + '1: :_svm_completion_not_installed_scala_versions' \ + '--docs[with install, update-latest download scala-devel-docs.]' \ + '--sources[with install, update-latest download scala-sources.]' && ret=0 + ;; + + remove|uninstall) + # remove installed version + _arguments \ + '1: :_svm_completion_installed_scala_versions' && ret=0 + ;; + + switch|use) + # use installed version + _arguments \ + '1: :_svm_completion_not_selected_scala_versions' && ret=0 + ;; + + esac + + ;; # end args +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tarsnap b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tarsnap new file mode 100644 index 00000000..17f47f1e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tarsnap @@ -0,0 +1,64 @@ +#compdef tarsnap +# ------------------------------------------------------------------------------ +# Copyright (c) 2014-2017 Daniel Teunis - https://github.com/danteu +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for tarsnap 1.0.39 (http://tarsnap.com). +# +# ------------------------------------------------------------------------------ +# Author +# ------- +# +# * Daniel Teunis +# +# ------------------------------------------------------------------------------ + +_arguments \ + '(- 1 *)--help[prints tarsnap help]' \ + '(- 1 *)--version[prints tarsnap version number]' \ + '(- 1 *)--verify-config[checks configuration files for syntactic errors]' \ + '--fsck[performs integrity checks on the stored archives]' \ + '--fsck-prune[performs integrity checks and prunes broken data]' \ + '--list-archives[prints names of stored archives]' \ + '--nuke[deletes all stored archives]' \ + '--print-stats[prints archive statistics]' \ + '--recover[recovers partial archive]' \ + '-c[creates archive]' \ + '-d[deletes specified archive]' \ + '-r[prints content of specified archive]' \ + '-t[lists archive content]' \ + '-x[extracts specified archive]' \ + '--lowmem[reduces memory usage by not caching small files]' \ + '--quiet[silences some warnings]' \ + '--keyfile[specifies keyfile]:keyfile:->file' \ + '--cachedir[specifies cache directory]:cachedir:->directory' \ + '-f[specifies archive name]:archivename:->file' + +case "$state" in + file) + _files + ;; + directory) + _path_files -/ + ;; +esac diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_teamocil b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_teamocil new file mode 100644 index 00000000..30e1c2ae --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_teamocil @@ -0,0 +1,47 @@ +#compdef teamocil +# ------------------------------------------------------------------------------ +# Copyright (c) 2014 Github zsh-users - https://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Teamocil 0.4.5 (https://github.com/remiprev/teamocil). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Petr Zelenin +# +# ------------------------------------------------------------------------------ + +_arguments \ + '--here[set up the first window in the current window]' \ + '--edit[edit the YAML layout file instead of using it]' \ + '--layout [use a specific layout file, instead of \`~/.teamocil/.yml\`]' \ + '--list[list all available layouts in \`~/.teamocil/\`]' \ + '--show[show the content of the layout file instead of executing it]' \ + '*:teamocil layouts:_files -W ~/.teamocil -g "*.yml(:r)"' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_thor b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_thor new file mode 100644 index 00000000..081de1fb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_thor @@ -0,0 +1,49 @@ +#compdef thor +# ------------------------------------------------------------------------------ +# Copyright (c) 2009-2015 Robby Russell and contributors (see +# https://github.com/robbyrussell/oh-my-zsh/contributors) +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for thor (https://github.com/wycats/thor). +# +# Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/thor +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Andrew Hodges (https://github.com/betawaffle) +# +# ------------------------------------------------------------------------------ + + +# FIXME This should be rewritten using up-to-date ZSH completion API. +compadd `thor list | grep thor | cut -d " " -f 2` + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tmuxinator b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tmuxinator new file mode 100644 index 00000000..9fff48e9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tmuxinator @@ -0,0 +1,65 @@ +#compdef tmuxinator mux +# ------------------------------------------------------------------------------ +# Copyright (c) 2010-2016 Christopher Chow +# +# 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. +# ------------------------------------------------------------------------------ +# +# Description +# ----------- +# +# Completion script for tmuxinator (https://github.com/tmuxinator/tmuxinator) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Christopher Chow (https://github.com/Soliah) +# +# ------------------------------------------------------------------------------ + +_tmuxinator() { + local commands projects + commands=(${(f)"$(tmuxinator commands zsh)"}) + projects=(${(f)"$(tmuxinator completions start)"}) + + if (( CURRENT == 2 )); then + _describe -t commands "tmuxinator subcommands" commands + _describe -t projects "tmuxinator projects" projects + elif (( CURRENT == 3)); then + case $words[2] in + copy|debug|delete|open|start) + _arguments '*:projects:($projects)' + ;; + esac + fi + + return +} + +_tmuxinator + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tmuxp b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tmuxp new file mode 100644 index 00000000..66a3dda4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tmuxp @@ -0,0 +1,134 @@ +#compdef tmuxp + +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for tmuxp (https://tmuxp.git-pull.com/en/latest/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Bez Hermoso +# +# ------------------------------------------------------------------------------ + +_tmuxp() { + + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ":command:->command" \ + "*::options:->options" \ + "--log_level:log level:(DEBUG INFO WARNING ERROR CRITICAL)" \ + "--help[display usage information]" + + case $state in + (command) + local -a subcommands + subcommands=( + 'convert:Convert a tmuxp config between JSON and YAML.' + 'freeze:Snapshot a session into a config.' + 'import:Import a teamocil/tmuxinator config.' + 'load:Load tmuxp workspaces.' + ) + _describe -t commands 'commands' subcommands + ;; + (options) + case $line[1] in + (load) + __tmuxp_load + ;; + (import) + __tmuxp_import + ;; + (freeze) + local sessions="$(__tmux_sessions)" + _arguments -C \ + "1::session name:compadd $sessions" + ;; + (convert) + _arguments -C \ + '1:: :_files -g "*.(json|yaml|yml)"' + ;; + esac + esac + +} + +__tmuxp_load() { + local state line + typeset -A opt_args + _arguments -C \ + '*:sessions:->sessions' \ + '--yes:yes' \ + '-d[Load the session without attaching it]' \ + '-2[Force tmux to assume the terminal supports 256 colors]' \ + '-8[Like -2, but indicates that the terminal supports 88 colors]' + + # Cant get the options to be recognized when there are sessions that has + # a dash. + + case $state in + (sessions) + local s + _alternative \ + 'sessions-user:user session:compadd -F line - ~/.tmuxp/*.(json|yml|yaml)(:r:t)' \ + 'sessions-other:session in current directory:_path_files -/ -g "**/.tmuxp.(yml|yaml|json)"' \ + 'sessions-other:session in current directory:_path_files -g "*.(yml|yaml|json)"' + ;; + esac +} + +__tmuxp_import() { + local state line + typeset -A opt_args + _arguments -C \ + '1::program:(tmuxinator teamocil)' \ + '2::project:->project' + + case $state in + (project) + if [[ $line[1] == 'tmuxinator' ]] + then + _wanted tmuxinator-projects exp 'tmuxinator projects' compadd $(tmuxinator completions start) + fi + ;; + esac +} + +__tmux_sessions () { + local tmux_sessions + tmux_sessions=($(_call_program tmux_sessions 'tmux ls -F "#{session_name}"')) + echo $tmux_sessions +} + +_tmuxp "$@" + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tox b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tox new file mode 100644 index 00000000..efd05494 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_tox @@ -0,0 +1,61 @@ +#compdef tox +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for tox (https://tox.readthedocs.io). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +(( $+functions[_tox_envs_list] )) || +_tox_envs_list() { + local envs; envs=($(_call_program envs $service --listenvs-all)) + if [ ${#envs} -gt 0 ]; then + _values -s , 'tox environments' "${envs[@]}" + else + _message 'tox environments (none found)' + fi +} + +_arguments \ + '(- 1 *)--version[show version and exit]' \ + '(- 1 *)'{-h,--help}'[show help options]' \ + '(- 1 *)'{--hi,--help-ini}'[show help about ini-names]' \ + '*-v[increase verbosity of reporting output]' \ + '*-q[progressively silence reporting output]' \ + '(- 1 *)--showconfig[show configuration information for all environments]' \ + '(- 1 *)'{-l,--listenvs}'[show list of test environments]' \ + '(- 1 *)'{-a,--listenvs-all}'[show list of all defined environments]' \ + '-c[config file name or directory with "tox.ini" file]:config path:_files -g "*.ini"' \ + '-e[work against specified environments]: :_tox_envs_list' \ + '--notest[skip invoking test commands]' \ + '--sdistonly[only perform the sdist packaging activity]' \ + '--parallel--safe-build[ensure two tox builds can run in parallel]' \ + '--installpkg[ensure two tox builds can run in parallel]:package path:_files -/' \ + '--develop[install package in the venv using "setup.py develop"]' \ + '(-i --index-url)'{-i,--index-url}'[set indexserver url]:index server URL:_urls' \ + '--pre[install pre-releases and development versions of dependencies]' \ + '(-r --recreate)'{-r,--recreate}'[force recreation of virtual environments]' \ + '--result-json[write a json file with detailed information about all commands and results involved]:JSON file path:_files -g "*.json"' \ + '--hashseed[set PYTHONHASHSEED to SEED before running commands]:seed' \ + '*--force-dep[forces a certain version of one of the dependencies when configuring the virtual environment]:pip requirement' \ + '--sitepackages[override sitepackages setting to True in all envs]' \ + '--alwayscopy[override alwayscopy setting to True in all envs]' \ + '--skip-missing-interpreters[do not fail tests for missing interpreters]: :(config true false)' \ + '--workdir[tox working directory]: :_files -/' \ + '*: :_guard "^-*" command positional substitution arguments' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-empty b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-empty new file mode 100644 index 00000000..b25ce938 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-empty @@ -0,0 +1,59 @@ +#compdef trash-empty +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for trash-empty a tool from trash management package trash-cli (http://code.google.com/p/trash-cli). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + + +_trash-empty() { + + _arguments -C \ + '--version[Show programs version number and exit]' \ + {-h,--help}'[Show help message and exit]' \ + '*: :' \ + +} + +_trash-empty + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-list b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-list new file mode 100644 index 00000000..c1b10049 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-list @@ -0,0 +1,53 @@ +#compdef trash-list +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for trash-list a tool from trash management package trash-cli (http://code.google.com/p/trash-cli). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + + +_arguments \ + '--version[show programs version number and exit]' \ + {-h,--help}'[show help message and exit]' \ + '*: :' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-put b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-put new file mode 100644 index 00000000..7c12923e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-put @@ -0,0 +1,58 @@ +#compdef trash-put trash +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for trash-put a tool from trash management package trash-cli (http://code.google.com/p/trash-cli). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + + +_arguments -C \ + '--version[display version information]' \ + {-h,--help}'[display usage information]' \ + {-d,--directory}'[remove empty directories - ignored (for GNU rm compatibility)]' \ + {-f,--force}'[ignore nonexistent arguments and never prompt - ignored (for GNU rm compatibility)]' \ + {-i,--interactive}'[prompt before every removal - ignored (for GNU rm compatibility)]' \ + {-r,-R,--recursive}'[remove directories and their content recursively - ignored (for GNU rm compatibility)]' \ + {-v,--verbose}'[explain what is being done]' \ + '*: :_files' + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-restore b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-restore new file mode 100644 index 00000000..35e313a7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_trash-restore @@ -0,0 +1,58 @@ +#compdef trash-restore +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for trash-restore a tool from trash management package trash-cli (http://code.google.com/p/trash-cli). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + + +_trash-restore() { + + _arguments -C \ + '--version[Show programs version number and exit]' \ + '*: :' \ + +} + +_trash-restore + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_udisksctl b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_udisksctl new file mode 100644 index 00000000..3caf38ce --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_udisksctl @@ -0,0 +1,164 @@ +#compdef udisksctl +# +# ------------------------------------------------------------------------------ +# The MIT License +# +# Copyright 2014 Damir Jelić +# +# 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. +# +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for udisksctl +# (https://cgit.freedesktop.org/udisks/tree/tools) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Damir Jelić [1] +# * Ole Jørgen Brønner (minor additions) +# +# [1] https://lists.freedesktop.org/archives/devkit-devel/2014-February/001554.html +# +# ------------------------------------------------------------------------------ +# Notes +# ----- +# +# udisksctl actually provide built-in support for completion: It accepts an +# special command 'complete' that returns completions. That is what drives the +# upstream bash completion. In the future one might consider rewriting using +# that. (but not sure how straight forward it would be to provide descriptions?) +# + +_paths() { + local -a _path_list + + for _path in $(_call_program paths "udisksctl complete \"udisksctl $words\" $CURSOR"); do + _path_list+=$_path + done + + _describe 'path' _path_list +} + +_filesystems() { + _fs_types=( + 'adfs' 'affs' 'autofs' 'cifs' 'coda' 'coherent' 'cramfs' 'debugfs' 'devpts' + 'efs' 'ext' 'ext2' 'ext3' 'ext4' 'hfs' 'hfsplus' 'hpfs' 'iso9660' 'jfs' 'minix' + 'msdos' 'ncpfs' 'nfs' 'nfs4' 'ntfs' 'proc' 'qnx4' 'ramfs' 'reiserfs' 'romfs' + 'squashfs' 'smbfs' 'sysv' 'tmpfs' 'ubifs' 'udf' 'ufs' 'umsdos' 'usbfs' 'vfat' + 'xenix' 'xfs' 'xiafs' + ) + + _describe 'file system type' _fs_types +} + +_udisksctl() { + typeset -A opt_args + local curcontext="$curcontext" state line ret=1 + + _arguments -C \ + '1:udisksctl commands:->cmds' \ + '*:: :->cmd_args' && ret=0 + + case $state in + cmds) + local commands; commands=( + 'help:show help' + 'info:show info about an object' + 'dump:show info about all object' + 'status:shows high-level status' + 'monitor:monitor changes to objects' + 'mount:mount a filesystem' + 'unmount:unmount a filesystem' + 'unlock:unlock an encrypted device' + 'lock:lock an encrypted device' + 'loop-setup:set-up a loop device' + 'loop-delete:delete a loop device' + 'power-off:safely power off a drive' + 'smart-simulate:set SMART data for a drive' + ) + _describe -t commands 'udisksctl command' commands && ret=0 + ;; + + cmd_args) + case $words[1] in + info) + _arguments \ + {-p,--object-path}'[specify object to get information about]:object path:_paths' \ + {-b,--block-device}'[specify block device to get information about]:block device:_paths' \ + {-d,--drive}'[specify drive to get information about]:drive:_paths' && ret=0 + ;; + mount) + _arguments \ + {-p,--object-path}'[specify object to mount]:object path:_paths' \ + {-b,--block-device}'[specify block device to mount]:block device:_paths' \ + {-t,--filesystem-type}'[specify filesystem type to use]:fs type:_filesystems' \ + {-o,--options}'[mount options]' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 + ;; + unmount) + _arguments \ + {-p,--object-path}'[object to unmount]:object path:_paths' \ + {-b,--block-device}'[block device to unmount]:block device:_paths' \ + {-f,--force}'[force/lazy unmount]' \ + "(--no-user-interaction)--no-user-interaction[don't auhenticate the user if needed]" && ret=0 + ;; + unlock|lock) + _arguments \ + {-p,--object-path}'[object to lock/unlock]:object path:_paths' \ + {-b,--block-device}'[block device to lock/unlock]:block device:_paths' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 + ;; + loop-setup) + _arguments \ + {-f,--file}'[specify file to set-up a loop device for]:files:_files' \ + {-r,--read-only}'[setup read-only device]' \ + {-o,--offset}'[start at specified offset into file]:offset (bytes)' \ + {-s,--size}'[limit size]:limit (bytes)' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 + ;; + loop-delete) + _arguments \ + {-p,--object-path}'[object for loop device to delete]:object path:_paths' \ + {-b,--block-device}'[loop device to delete]:block device:_paths' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 + ;; + power-off) + _arguments \ + {-p,--object-path}'[object path for ATA device]:object path:_paths' \ + {-b,--block-device}'[device file for ATA devic]:block device:_paths' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 + ;; + smart-simulate) + _arguments \ + {-f,--file}'[file with libatasmart blob]:files:_files' \ + {-p,--object-path}'[object to get information about]:object path:_paths' \ + {-b,--block-device}'[block device to get information about]:block device:_paths' \ + "(--no-user-interaction)--no-user-interaction[don't authenticate the user if needed]" && ret=0 + ;; + esac + ;; + esac + return ret +} + +_udisksctl "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ufw b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ufw new file mode 100644 index 00000000..ffd04f8f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_ufw @@ -0,0 +1,145 @@ +#compdef ufw +# ------------------------------------------------------------------------------ +# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for The Uncomplicated Firewall (ufw). (https://launchpad.net/ufw). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jindřich Pilař (https://github.com/JindrichPilar) +# +# ------------------------------------------------------------------------------ + + +_ufw_logging() { + + local params additional second + second=$words[2] + + if [ ! -z $second ]; then + return + fi + + params=( + "on" + "off" + ) + + additional=( + "low" + "medium" + "high" + "full" + ) + + _describe -t params 'on/off' params + _describe -t additional 'level' additional +} + + +_ufw_delete() { + local rules complrules second + + second=$words[2] + + if [ ! -z $second ]; then + return + fi + + complrules=() + rules=("${(f)$(ufw status | tr -s ' ' | tail -n +5 | tr -s '\n')}") + + for ((i=1; i<=${#rules[@]}; i++)); do + complrules+=("$i:$rules[i]"); + done + + _describe -t complrules 'Rules' complrules +} + +_ufw() { + local curcontext="$curcontext" ret=1 + local -a state line commands + + commands=( + "enable:enable the firewall" + "disable:disable the firewall" + "default:set default policy" + "logging:set logging level" + "allow:add allow rule" + "deny:add deny rule" + "reject:add reject rule" + "limit:add limit rule" + "delete:delete rule" + "insert:insert rule at position" + "route:add route rule" + "reload:reload firewall" + "reset:reset firewall" + "status:show firewall status" + "show:show firewall report" + "version:display version information" + "prepend:add rule before all of the same type" + ) + + _arguments -C -s -S -n \ + '(- 1 *)'--version"[display version information]: :->full" \ + '(- 1 *)'{-h,--help}'[display usage information]: :->full' \ + '(- 1 *)'--dry-run"[don't modify anything, just show the changes]: :->cmds" \ + '1:cmd:->cmds' \ + '*:: :->args' && ret=0 + + case "$state" in + (cmds) + _describe -t commands 'commands' commands + ;; + (args) + local cmd + cmd=$words[1] + case "$cmd" in + (logging) + _ufw_logging && ret=0 + ;; + (delete) + _ufw_delete && ret=0 + ;; + (*) + _default && ret=0 + ;; + esac + ;; + (*) + ;; + esac + + return ret +} + +_ufw + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_vagrant b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_vagrant new file mode 100644 index 00000000..6048a179 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_vagrant @@ -0,0 +1,260 @@ +#compdef vagrant +# ------------------------------------------------------------------------------ +# Copyright (c) 2009-2015 Robby Russell and contributors (see +# https://github.com/robbyrussell/oh-my-zsh/contributors) +# +# 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for Vagrant (http://vagrantup.com). +# +# Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/vagrant +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nikita Fedyashev (https://github.com/nfedyashev) +# * Mark Cornick (https://github.com/markcornick) +# +# ------------------------------------------------------------------------------ + +# vagrant zsh completion + +local -a _1st_arguments +_1st_arguments=( + 'box:Box commands' + 'connect:Connects to a shared, remote Vagrant environment' + 'destroy:Destroys the vagrant environment' + 'docker-logs:Shows Docker logs' + 'docker-run:Run one-off commands against a Docker container' + 'global-status:Reports the status of all active Vagrant environments on the system' + 'halt:Halts the currently running vagrant environment' + 'help:[TASK] Describe available tasks or one specific task' + 'init:[box_name] [box_url] Initializes current folder for Vagrant usage' + 'list-commands:Outputs all available Vagrant subcommands' + 'login:Authenticates against a Vagrant Cloud server to access protected boxes' + 'package:Packages a vagrant environment for distribution' + 'plugin:Manage plugins' + 'provision:Run the provisioner' + 'push:Deploys code in this environment to a configured destination' + 'rdp:Connects to machine via RDP' + 'reload:Reload the vagrant environment' + 'resume:Resumes a suspend vagrant environment' + 'rsync:Syncs rsync synced folders to remote machine' + 'rsync-auto:Syncs rsync synced folders automatically when files change' + 'share:Shares the Vagrant environment and allows remote access' + 'ssh:SSH into the currently running environment' + 'ssh-config:Outputs .ssh/config valid syntax for connecting to this environment via ssh' + 'status:Shows the status of the current Vagrant environment' + 'suspend:Suspends the currently running vagrant environment' + 'up:Creates the vagrant environment' + 'version:Prints the currently installed Vagrant version and checks for new updates' + '--version:Prints the Vagrant version information' +) + +local -a _box_arguments +_box_arguments=( + 'add:NAME URI Add a box to the system' + 'help:COMMAND Describe subcommands or one specific subcommand' + 'list:Lists all installed boxes' + 'outdated:Checks if there is a new version available for the box' + 'remove:NAME Remove a box from the system' + 'repackage:NAME Repackage an installed box into a `.box` file.' + 'update:Updates the box, if there any updates available' +) + +local -a _plugin_arguments +_plugin_arguments=( + 'install:NAME Install a plugin to the system' + 'license:NAME LICENSE_FILE Add a license for an installed plugin' + 'list:Lists all installed plugins' + 'uninstall:NAME Uninstall a plugin from the system' + 'update:[NAMES...] Update all or specified plugins' +) + +__task_list () +{ + local expl + declare -a tasks + + tasks=(box destroy global-status halt init package plugin provision \ + reload resume ssh ssh_config status suspend up version) + + _wanted tasks expl 'help' compadd $tasks +} + +__box_list () +{ + _wanted application expl 'command' compadd $(command vagrant box list | \ + awk '{print $1}' | \ + sed -e 's/ /\\ /g') +} + +__plugin_list () +{ + _wanted application expl 'command' compadd $(command vagrant plugin list \ + 2>/dev/null| cut -d' ' -f1) +} + +_vagrant_caching_policy() +{ + local reg_time comp_time check_file + + case "${1##*/}" in + VAGRANT_VMS) + if [[ -z $VAGRANT_CWD ]]; then + check_file=./Vagrantfile + else + check_file=$VAGRANT_CWD/Vagrantfile + fi + ;; + *) + echo "unknown type: $1" + return -1 + ;; + esac + + case "$OSTYPE" in + darwin*) STATCMD="/usr/bin/stat -f '%c'" ;; + *) STATCMD="stat -c '%Z'" ;; + esac + reg_time=${$(${(z)STATCMD} $check_file):Q} + comp_time=${$(${(z)STATCMD} $1):Q} + + return $(( reg_time < comp_time )) +} + +__vm_list () +{ + local cache_policy + zstyle -s ":completion:${curcontext}:" cache-policy cache_policy + zstyle ":completion:${curcontext}:" cache-policy \ + ${cache_policy:-_vagrant_caching_policy} + + # Cache the list of VMs available + if ( [[ ${+_vagrant_vms} -eq 0 ]] || _cache_invalid VAGRANT_VMS ) && + ! _retrieve_cache VAGRANT_VMS; + then + _vagrant_vms=( $(_call_program path-all "vagrant status | \ + awk '{print \$1}' | \ + egrep -v '^$|^(Current|This|above|VM,)$'" ) ) + _store_cache VAGRANT_VMS _vagrant_vms + fi + + _wanted application expl 'command' compadd $_vagrant_vms +} + +__vagrant-box () +{ + local curcontext="$curcontext" state line + typeset -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + _describe -t commands "gem subcommand" _box_arguments + return + ;; + + (options) + case $line[1] in + (repackage|remove) + _arguments ':feature:__box_list' + ;; + esac + ;; + esac +} + +__vagrant-plugin () +{ + local curcontext="$curcontext" state line + local -A opt_args + + _arguments -C \ + ':command:->command' \ + '*::options:->options' + + case $state in + (command) + _describe -t commands "gem subcommand" _plugin_arguments + return + ;; + + (options) + case $line[1] in + (license) + _arguments ':feature:__plugin_list' '*:file:_files' + ;; + (uninstall) + _arguments ':feature:__plugin_list' + ;; + esac + ;; + esac +} + +local expl +local -a boxes installed_boxes + +local curcontext="$curcontext" state line +local -A opt_args + +_arguments -C \ + ':command:->command' \ + '*::options:->options' + +case $state in + (command) + _describe -t commands "gem subcommand" _1st_arguments + return + ;; + + (options) + case $line[1] in + (help) + _arguments ':feature:__task_list' + ;; + + (box) + __vagrant-box + ;; + + (plugin) + __vagrant-plugin + ;; + (up|provision|package|destroy|reload|ssh|halt|resume|status|suspend) + _arguments ':feature:__vm_list' + esac + ;; +esac + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_virtualbox b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_virtualbox new file mode 100644 index 00000000..833be617 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_virtualbox @@ -0,0 +1,305 @@ +#compdef VBoxManage=vboxmanage VBoxHeadless=vboxheadless +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for VirtualBox (http://www.virtualbox.org). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_vboxmachines() { + VBoxManage list vms | egrep -o '^"[^"]+"' 2>/dev/null | sed -e 's|"||g' | while read machine; do + _wanted 'machine' expl 'machine' compadd $machine + done +} + +# Roughly guess command options +_vboxcommandoptions() { + cmd="$1" + cmdoutput=$(VBoxManage "$cmd" 2>/dev/null | tail -n +2 | grep -v 'Syntax error:' | grep -v '|' | sed 's|<[^>]\+>||g' | sed 's|VBoxManage [^ ]\+ | |') + + optcount=0 + option="" + optlines=() + echo "$cmdoutput" | egrep -o ' [\[A-Za-z0-9\-\<].*' | while read line; do + option="${option}${line}" + if [[ $line[-1] != '|' ]]; then + optcount=$(($optcount+1)) + optlines[$optcount]="$option" + option="" + fi + done + + # optionals ([abc]) + for line in $optlines; do + echo "$line" | egrep -o '\[[^]]+\]' | while read option; do + option=$(echo $option | sed 's|[]\[]||g' | cut -d ' ' -f 1) + _options=(${(s:|:)option}) + for option in $_options; do + _wanted "${cmd}_option" expl "${cmd} option" compadd -- $option + done + done + done + + # mandatory + for line in $optlines; do + echo "$line" | sed 's|\[[^]]\+\]|\n|g' | while read option; do + if [[ "$option" != "" ]]; then + _option=$(echo $option | cut -d ' ' -f 1) + _options=(${(s:|:)option}) + for option in $_options; do + _wanted "${cmd}_option" expl "${cmd} option" compadd -- $option + done + fi + done + done +} + +# List possible mediums +_vboxmediums() { + _wanted "mediums" expl "mediums" compadd -- "none" + _wanted "mediums" expl "mediums" compadd -- "emptydrive" + _wanted "mediums" expl "mediums" compadd -- "iscsi" + + _files -g '*.{iso,vmdk,vdi}' + + for CD in /dev/cd/*; do + readlink -f $CD + done | uniq | while read CD; do + _wanted "host drives" expl "host drives" compadd -- "host:$CD" + done +} + +# List available os types +_vboxostypes() { + VBoxManage list ostypes | grep '^ID' | awk '{print $2}' | while read OSTYPE; do + _wanted 'ostype' expl 'os type' compadd -- $OSTYPE + done +} + +# Guess options for this commands +_vboxopts_controlvm() { _vboxcommandoptions controlvm } +_vboxopts_modifyvm() { _vboxcommandoptions modifyvm } +_vboxopts_export() { _vboxcommandoptions export } + +_vboxmanage() { + local -a _1st_arguments + _1st_arguments=( + "list:gives information about VirtualBox's current settings" + 'showvminfo:shows information about a particular virtual machine' + 'registervm:import a virtual machine definition in an XML file into VirtualBox' + 'unregistervm:unregisters a virtual machine' + 'createvm:creates a new XML virtual machine definition file' + 'modifyvm:changes the properties of a registered virtual machine which is not running' + 'import:imports a virtual appliance in OVF format by copying the virtual disk images and creating virtual machines in VirtualBox' + 'export:exports one or more virtual machines from VirtualBox into a virtual appliance in OVF format' + 'startvm:starts a virtual machine that is currently in the "Powered off" or "Saved" states' + 'controlvm:change the state of a virtual machine that is currently running' + 'discardstate:discards the saved state of a virtual machine which is not currently running' + 'adoptstate:adopt a saved state file (.sav)' + 'snapshot:control snapshots' + 'closemedium:removes a hard disk, DVD or floppy image from a VirtualBox media registry' + 'storageattach:attaches/modifies/removes a storage medium connected to a storage controller' + 'storagectl:attaches/modifies/removes a storage controller' + 'bandwidthctl:creates/deletes/modifies bandwidth groups' + 'showmediuminfo:shows information about a virtual hard disk image' + 'createmedium:creates a new virtual hard disk image' + 'modifymedium:change the characteristics of a disk image after it has been created' + 'clonemedium:duplicates a registered virtual hard disk image to a new image file with a new unique identifier' + 'convertfromraw:converts a raw disk image to a VirtualBox Disk Image (VDI) file' + 'getextradata:retrieve string data to a virtual machine or to a VirtualBox configuration' + 'setextradata:attach string data to a virtual machine or to a VirtualBox configuration' + 'setproperty:change global settings which affect the entire VirtualBox installation' + 'usbfilter:used for working with USB filters in virtual machines, or global filters' + 'sharedfolder:share folders on the host computer with guest operating systems' + 'guestproperty:get or set properties of a running virtual machine' + 'guestcontrol:control certain things inside a guest from the host' + 'debugvm:for experts who want to tinker with the exact details of virtual machine execution' + 'metrics:monitor the usage of system resources' + 'hostonlyif:change the IP configuration of a host-only network interface' + 'dhcpserver:control the DHCP server that is built into VirtualBox' + 'extpack:add or remove VirtualBox extension packs' + ) + + local context state line expl + local -A opt_args + + _arguments '*:: :->subcmds' && return 0 + + if (( CURRENT == 1 )); then + _describe -t commands "VBoxManage commands" _1st_arguments -V1 + return + fi + + case "$words[1]" in + list) + _arguments \ + '--long' \ + ':list option:(vms runningvms ostypes hostdvds hostfloppies bridgedifs hostonlyifs dhcpservers hostinfo hostcpuids hddbackends hdds dvds floppies usbhost usbfilters systemproperties extpacks)' + ;; + showvminfo) + _arguments \ + :machine:_vboxmachines \ + '--details' \ + '--machinereadable' \ + '--log: :' + ;; + unregistervm) + _arguments \ + :machine:_vboxmachines \ + '--delete' + ;; + createvm) + _arguments \ + '--name: :' \ + '--ostype:os type:_vboxostypes' \ + '--register' \ + '--basefolder:folder:_files -/' \ + '--settingsfile:file:_files' \ + '--uuid: :' + ;; + modifyvm) + _arguments \ + :machine:_vboxmachines \ + :modifyvm_option:_vboxopts_modifyvm + ;; + modifymedium|modifyhd) + _arguments \ + :filename:_files \ + '--type:hd type:(normal writethrough immutable shareable readonly multiattach)' \ + '--autoreset:on off:(on off)' \ + '--property: :' \ + '--compact' \ + '--resize:megabytes:' \ + '--resizebyte:bytes:' + ;; + import) + _arguments \ + ':ovf file:_files -g \*.{ovf,ova}' \ + '--dry-run' + ;; + export) + _arguments \ + :machine:_vboxmachines \ + :export_option:_vboxopts_export + ;; + startvm) + _arguments \ + :machine:_vboxmachines \ + '--type:running mode:(gui sdl headless)' + ;; + controlvm) + _arguments \ + :machine:_vboxmachines \ + :controlvm_option:_vboxopts_controlvm + ;; + adoptstate) + _arguments \ + :machine:_vboxmachines \ + ':sav file:_files -g \*.sav' + ;; + closemedium) + _arguments \ + ':type:(disk dvd floppy)' \ + ':file:_files' \ + '--delete' + ;; + discardstate|bandwidthctl|getextradata|setextradata|debugvm) + _arguments \ + :machine:_vboxmachines + ;; + storagectl) + _arguments \ + :machine:_vboxmachines \ + '--name: :' \ + '--add:type:(ide scsi floppy sas)' \ + '--controller:type:(LSILogic|LSILogicSAS|BusLogic|IntelAHCI|PIIX3|PIIX4|ICH6|I82078)' \ + --sataideemulation{1..4}":port:({1..30})" \ + "--sataportcount:num:({1..30})" \ + '--hostiocache:bool:(on off)' \ + '--bootable:bool:(on off)' \ + '--remove' #" + ;; + storageattach) + _arguments \ + :machine:_vboxmachines\ + '--storagectl:storage ctl:("IDE Controller" "SATA Controller")' \ + '--port: :' \ + '--device: :' \ + '--type:drive type:(dvddrive hdd fdd)' \ + '--medium:mediums:_vboxmediums' \ + '--mtype:behaviour:(normal writethrough immutable shareable)' \ + '--comment: :' \ + '--passthrough:enabled?:(on off)' \ + '--bandwidthgroup: :' \ + '--forceunmount' '--server: :' \ + '--target: :' \ + '--lun: :' \ + '--encodedlun: :' \ + '--username: :' \ + '--password: :' \ + '--intnet: :' + ;; + createmedium|createhd) + _arguments \ + '--filename:filename:_files -g \*.{vdi,vmdk,vhd}' \ + '--size:megabytes:' \ + '--sizebyte:bytes:' \ + '--format:type:(VDI VMDK VHD)' \ + '--variant:type:(Standard Fixed Split2G Stream ESX)' + ;; + sharedfolder) + _arguments \ + ':action:(add remove)' \ + :machine:_vboxmachines \ + '--name: :' \ + '--hostpath:path:_files -/' \ + '--transient' \ + '--readonly' \ + '--automount' + ;; + esac + return 1 +} + +_vboxheadless() { + local context state line expl + local -A opt_args + + _arguments \ + '(-s -startvm --startvm)'{-s,-startvm,--startvm}'[Start given VM]:machine:_vboxmachines' \ + '(-n --vnc)'{-n,--vnc}'[Enable the built in VNC server]' \ + '(-m --vncport)'{-m,--vncport}'[TCP port number to use for the VNC server]:port:' \ + '(-o --vncpass)'{-o,--vncpass}'[Set the VNC server password]:pw:' \ + '(-v -vrde --vrde)'{-v,-vrde,--vrde}"[Enable (default) or disable the VRDE server or don't change the setting]::(on off config)" \ + '(-e -vrdeproperty --vrdeproperty)'{-e,-vrdeproperty,--vrdeproperty}'[Set a VRDE property]: :' \ + '(-c -capture --capture)'{-c,-capture,--capture}'[Record the VM screen output to a file]' \ + '(-w --width)'{-w,--width}'[Frame width when recording]:width:' \ + '(-h --height)'{-h,--height}'[Frame height when recording]:height:' \ + '(-r --bitrate)'{-r,--bitrate}'[Recording bit rate when recording]:bitrate:' \ + '(-f --filename)'{-f,--filename}'[File name when recording. The codec used will be chosen based on the file extension]:filename:_files' +} + +_virtualbox() { + local ret=1 + _call_function ret _$service + return ret +} + +_virtualbox "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_vnstat b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_vnstat new file mode 100644 index 00000000..fec8ae0c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_vnstat @@ -0,0 +1,124 @@ +#compdef vnstat +# ------------------------------------------------------------------------------ +# Copyright (c) 2012 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for vnstat 2.6 +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Aaron Schrab +# +# ------------------------------------------------------------------------------ + +local curcontext="$curcontext" state state_descr line ret=1 +typeset -A opt_args + +local period="-d --days -h --hours -m --months -w --weeks" + +_arguments -C : \ + '--add[create database entry for interface specified]' \ + '(-b --begin)'{-b,--begin}'[begin the list output with a specific date]:date:' \ + '--config[specify alternate configuration file]:file:_files' \ + "($period)"{-d,--days}'[show traffic for days]' \ + "($period)"{-h,--hours}'[show traffic for last 24 hours]' \ + "($period)"{-m,--months}'[show traffic for months]' \ + "($period)"{-w,--weeks}'[show traffic for 7 days]' \ + "($period)"{-y,--years}'[show traffic statistics for the last year]' \ + "($period)"{-5,--fiveminutes}'[show traffic statistic with a 5 minute resolution for the last hours]' \ + '--dbdir[specify database directory]:directory:_files -/' \ + '(-D --debug)'{-D,--debug}'[show additional debug output]' \ + '(-e --end)'{-e,--end}'[end the list output with a specific date]:date:' \ + '--delete[delete database and stop monitoring selected interface]' \ + '--dumpdb[dump database in parseable format]' \ + '(--disable)--enable[enable updates for selected interface]' \ + '(--enable)--disable[disable updates for selected interface]' \ + '(-hg --hoursgraph)'{-hg,--hoursgraph}'[show traffic statistics using a bar graph]' \ + '(-i --iface)'{-i,--iface}'[specify interface for actions]:interface:->interface' \ + '--iflist[list available interfaces]' \ + '--limit[set the maximum number of shown entries]:limit:' \ + '(-l --live)'{-l,--live}'[display current transfer rate]:mode:->live' \ + '--json[show database content in json format]' \ + '--locale[specify locale]:locale:' \ + '--nick[set nickname for alias]:nickname:' \ + '--oneline[traffic summary in one-line, parseable format]' \ + '(-q --query)'{-q,--query}'[force database query mode]' \ + '--remove[delete the database entry for the interface specified]' \ + '--rename[rename the interface specified in the database with new name]' \ + '(-r --reset)'{-r,--reset}'[reset internal counters]' \ + '--setalias[set alias as an alias for the selected interface]:alias:' \ + '(-ru --rateunit)'{-ru,--rateunit}'[swap configured rate unit]' \ + '(-s --short)'{-s,--short}'[use short output mode]' \ + '--showconfig[show current configuration]' \ + '--style[modify content and style of output]:style:->style' \ + '--sync[synchronize internal counters]' \ + '--testkernel[test kernel boot time information]' \ + '(-t --top)'{-t,--top}'[show all time top traffic days]' \ + '(-tr --traffic)'{-tr,--traffic}'[calculate amount of traffic in given time]:seconds:' \ + '--xml[show database content in XML format]' \ + '(-)'{-v,--version}'[show current version]' \ + '(-)'{-\?,--help}'[show command summary]' \ + '(-)--longhelp[show complete options list]' \ + && ret=0 + +case "$state" in + + (live) + _values 'live mode' \ + '0[packets per second]' \ + '1[traffic counters]' && ret=0 + ;; + + (style) + _values 'output style' \ + '0[narrow output]' \ + '1[enable bar column]' \ + '2[bar column with average traffic rate]' \ + '3[enable average traffic rate]' \ + '4[disable use of terminal control characters]' && ret=0 + ;; + + (interface) + local interfaces="$(_call_program interfaces 'vnstat --iflist')" + interfaces="${interfaces#*:}" + _values -s + 'interface' ${(z)interfaces} && ret=0 + ;; + +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: filetype=zsh shiftwidth=2 tabstop=2 expandtab diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_wemux b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_wemux new file mode 100644 index 00000000..d38fc283 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_wemux @@ -0,0 +1,82 @@ +#compdef wemux +# ------------------------------------------------------------------------------ +# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for wemux (https://github.com/zolrath/wemux) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Akira Maeda +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + +_wemux() { + + local -a host_commands client_commands multi_host_commands + + host_commands=( + 'start:Start the wemux server/attach to an existing wemux server.' + 'attach:Attach to an existing wemux server.' + 'stop:Kill the wemux server '\''wemux'\'', delete its socket.' + 'users:List all users currently attached to '\''wemux'\''' + 'kick:Disconnect an SSH user, remove their wemux server.' + 'config:Open the wemux configuration file in your $EDITOR.' + 'help:Display this screen.' + 'version:shows wemux version number' + ) + + client_commands=( + 'mirror:Attach to Host in read-only mode.' + 'pair:Attach to Host in pair mode, which allows editing.' + 'rogue:Attach to Host in rogue mode, which allows editing and switching to windows independently from the host.' + 'logout:Log out of the wemux rogueing session.' + 'users:List the currently attached wemux users.' + ) + + multi_host_commands=( + 'join:Join wemux server with supplied name.' + 'reset:Join default wemux server: wemux' + 'list:List all currently active wemux servers.' + ) + + if (( CURRENT == 2 )); then + _describe -t host_commands 'HOST COMMANDS' host_commands + _describe -t client_commands 'CLIENT COMMANDS' client_commands + _describe -t multi_host_commands 'MULTI-HOST COMMANDS' multi_host_commands + fi + + return 0 +} + +_wemux diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_wg-quick b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_wg-quick new file mode 100644 index 00000000..8de17ce5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_wg-quick @@ -0,0 +1,25 @@ +#compdef wg-quick +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for wg-quick (a script for easy managemant of wireguard +# VPN tunnels) (https://www.wireguard.com/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Nicolas Lenz +# +# ------------------------------------------------------------------------------ + +# The possible modes +local modes=('up\:"bring a wireguard interface up"'\ + 'down\:"tear down and remove a wireguard interface"'\ + 'save\:"save configuration of a running wireguard interface"') + +# 1: Complete mode +# 2: Complete interface with all .conf files in /etc/wireguard without the filename extension. +_arguments "1:mode:((${modes}))"\ + '2:interface:_path_files -W /etc/wireguard -g "*.conf(^/:r)"' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_xinput b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_xinput new file mode 100644 index 00000000..dd99c362 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_xinput @@ -0,0 +1,208 @@ +#compdef xinput +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for xinput +# TODO: Add property handler +# TODO: Add buttons handler +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Timofey Titovets +# +# ------------------------------------------------------------------------------ +_xinput(){ + # list of xinput arguments + local -a _1st_arguments + _1st_arguments=( + 'version:show version' '--version:show version' + 'help:show help options' '--help:show help options' + get-feedbacks + set-ptr-feedback + set-integer-feedback + get-button-map + set-button-map + set-pointer + 'set-mode:change the mode of device' '--set-mode:change the mode of device' + 'list:show devices' '--list:show devices' + query-state + test --test + create-master + remove-master + reattach + float + set-cp + test-xi2 + map-to-output + list-props + set-int-prop + set-float-prop + set-atom-prop + watch-props + delete-prop + set-prop + 'disable:disable the device' '--disable:disable the device' + 'enable:enable the device' '--enable:enable the device' + --get-feedbacks + --set-ptr-feedback + --set-integer-feedback + --get-button-map + --set-button-map + --set-pointer + --query-state + --create-master + --remove-master + --reattach + --float + --set-cp + --test-xi2 + --map-to-output + --list-props + --set-int-prop + --set-float-prop + --set-atom-prop + --watch-props + --delete-prop + --set-prop + ) + + local context state line + local -A opt_args + # Used with "-O expl" for unsorted. + local -a expl + expl=(-Vx) + + _arguments '*:: :->subcmds' && return 0 + + if (( CURRENT == 1 )); then + _describe -t commands "xinput commands" _1st_arguments -V1 + return + fi + + typeset -a xinput_devices_id xinput_devices xinput_devices_name + local i name + for i in ${(on)$(xinput list --id-only)}; do + # Removing prefixes, e.g. from "∼ 7" (floating slave). + i=${i##[^[:digit:]]#} + [[ -n "$i" ]] || continue + xinput_devices_id+=($i) + name="$(xinput list --name-only $i)" + xinput_devices_name+=($name) + xinput_devices+=($i\:$name) + done + xinput_devices+=($xinput_devices_name) + + # xinput arguments handler + case "$words[1]" in + --get-feedbacks|--set-ptr-feedback|--get-button-map|--query-state|--list-props|--watch-props|get-feedbacks|set-ptr-feedback|get-button-map|query-state|list-props|watch-props|--enable|enable|--map-to-output|map-to-output|--disable|disable) + _arguments -O expl \ + ':list option:(($xinput_devices))' + ;; + --list|list) + _arguments -O expl \ + '--short' \ + '--long' \ + '--name-only' \ + '--id-only' \ + ':list option:(($xinput_devices))' \ + ;; + --set-integer-feedback|set-integer-feedback) + _arguments -O expl \ + ':list option:(($xinput_devices))' \ + ':list option:( feedback )' \ + ':list option:( $xinput_devices_id )' + ;; + --set-button-map|set-button-map) + _arguments -O expl \ + ':list option:(($xinput_devices))' #map button 1 [map button 2 [...]] + ;; + --set-pointer|set-pointer) + _arguments -O expl \ + ':list option:(($xinput_devices))' # [x index y index] + ;; + --set-mode|set-mode) + _arguments -O expl \ + ':list option:(($xinput_devices))' \ + ':list option:(ABSOLUTE RELATIVE)' + ;; + --test|test) + _arguments -O expl \ + ':list option:(-proximity ($xinput_devices ))' \ + ':list option:(($xinput_devices))' + ;; + --reattach|reattach) + _arguments -O expl \ + ':list option:(($xinput_devices))' \ + ':list option:(master slave)' + ;; + --float|float) + _arguments -O expl \ + ':list option:(($xinput_devices))' + ;; + --test-xi2|test-xi2) + _arguments -O expl \ + ':list option:(($xinput_devices --root))' \ + ':list option:(($xinput_devices))' + ;; + --delete-prop|delete-prop) + _arguments -O expl \ + ':list option:(($xinput_devices))' #property + ;; + --create-master|create-master) + _arguments -O expl \ + ':list option:(($xinput_devices))' # [sendCore (dflt:1)] [enable (dflt:1)] + ;; + --remove-master|remove-master) + _arguments -O expl \ + ':list option:($xinput_devices_id)' # [Floating|AttachToMaster (dflt:Floating)] [returnPointer] [returnKeyboard] + ;; + # --set-cp|set-cp); window device;; + --set-prop|set-prop) + _arguments -O expl \ + ':list option:(($xinput_devices))' \ + ':list option:(--type={atom,float,int} --format={8,16,32})' \ + ':list option:(--type={atom,float,int} --format={8,16,32})' # property val [val ...] + ;; + --set-int-prop|set-int-prop) + _arguments -O expl \ + ':list option:(($xinput_devices))' # property format (8, 16, 32) val [val ...] + ;; + --set-float-prop|set-float-prop) + _arguments -O expl \ + ':list option:(($xinput_devices))' # property val [val ...] + ;; + --set-atom-prop|set-atom-prop) + _arguments -O expl \ + ':list option:(($xinput_devices))' # property val [val ...] + ;; + esac +} + +_xinput "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_xsel b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_xsel new file mode 100644 index 00000000..3ba249b2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_xsel @@ -0,0 +1,63 @@ +#compdef xsel +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for xsel (http://www.vergenet.net/~conrad/software/xsel/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Tomo Kazahaya (https://github.com/tomonacci) +# +# ------------------------------------------------------------------------------ + +local input='(-a --append -f --follow -i --input)' +local operation='(-c --clear -d --delete -k --keep -x --exchange)' +local selection='(-p --primary -s --secondary -b --clipboard)' + +_arguments -s \ + $input{-a,--append}'[append standard input to the selection]' \ + $input{-f,--follow}'[append to selection as standard input grows]' \ + $input{-i,--input}'[read standard input into the selection]' \ + {-o,--output}'[write the selection to standard output]' \ + $operation{-c,--clear}'[clear the selection]' \ + $operation{-d,--delete}'[request that the current selection be deleted]' \ + $selection{-p,--primary}'[operate on the PRIMARY selection (default)]' \ + $selection{-s,--secondary}'[operate on the SECONDARY selection]' \ + $selection{-b,--clipboard}'[operate on the CLIPBOARD selection]' \ + $operation{-k,--keep}'[do not modify the selections, but make the PRIMARY and SECONDARY selections persist even after the programs they were selected in exit]' \ + $operation{-x,--exchange}'[exchange the PRIMARY and SECONDARY selections]' \ + '--display[specify the server to use; see X(1)]:X display:_x_display' \ + {-t,--selectionTimeout}'[specify the timeout in milliseconds within which the selection must be retrieved]:number' \ + {-l,--logfile}'[specify the file to log errors to when detached (default $HOME/.xsel.log)]:log file:_files' \ + {-n,--nodetach}'[do not detach from the controlling terminal]' \ + {-h,--help}'[display usage information and exit]' \ + {-v,--verbose}'[print informative messages; additional instances of -v raise the debugging level]' \ + '--version[output version information and exit]' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_yaourt b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_yaourt new file mode 100644 index 00000000..47275020 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_yaourt @@ -0,0 +1,368 @@ +#compdef yaourt yaourt.static=yaourt +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for yaourt (https://archlinux.fr/yaourt-en) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * zsh-users mailing list +# +# ------------------------------------------------------------------------------ + +# handles --help subcommand +_yaourt_action_help() { + _arguments -s : \ + "$_yaourt_opts_commands[@]" +} + +# handles cases where no subcommand has yet been given +_yaourt_action_none() { + _arguments -s : \ + "$_yaourt_opts_commands[@]" +} + +# handles --query subcommand +_yaourt_action_query() { + local context state line + typeset -A opt_args + +# _arguments -s : \ +# "$_yaourt_opts_common[@]" \ +# "$_yaourt_opts_query_actions[@]" \ +# "$_yaourt_opts_query_modifiers[@]" + + case $state in + query_file) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:package file:_files -g "*.pkg.tar*"' + ;; + query_group) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:groups:_yaourt_completions_installed_groups' + ;; + query_owner) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:file:_files' + ;; + query_search) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:search text: ' + ;; + *) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_actions[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:package:_yaourt_completions_installed_packages' + ;; + esac +} + +# handles --remove subcommand +_yaourt_action_remove() { + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_remove[@]" +} + +# handles --sync subcommand +_yaourt_action_sync() { + local context state line + typeset -A opt_args + +# _arguments -s : \ +# "$_yaourt_opts_common[@]" \ +# "$_yaourt_opts_sync_actions[@]" #\ +# #"$_yaourt_opts_sync_modifiers[@]" + + case $state in + sync_clean) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*-c[remove old packages from cache]' \ + ;; + sync_group) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:package group:_yaourt_completions_all_groups' + ;; + sync_search) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:search text: ' + ;; + *) + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:package:_yaourt_completions_all_packages' + ;; + esac +} + +# handles --upgrade subcommand +_yaourt_action_upgrade() { + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_pkgfile[@]" +} + +# handles --version subcommand +_yaourt_action_version() { + # no further arguments + return 0 +} + +# provides completions for package groups +_yaourt_completions_all_groups() { + local -a cmd groups + _yaourt_get_command + groups=( $(_call_program groups $cmd[@] -Sg) ) + typeset -U groups + compadd "$@" -a groups +} + +# provides completions for packages available from repositories +# these can be specified as either 'package' or 'repository/package' +_yaourt_completions_all_packages() { + local -a cmd packages repositories packages_long + _yaourt_get_command + + if compset -P1 '*/*'; then + packages=( $(_call_program packages $cmd[@] -Sql ${words[CURRENT]%/*}) ) + typeset -U packages + if [[ -d /var/aur ]]; then + packages=( $packages $(ls /var/aur) ) + fi + _wanted repo_packages expl "repository/package" compadd ${(@)packages} + else + packages=( $(_call_program packages $cmd[@] -Sql) ) + typeset -U packages + if [[ -d /var/aur ]]; then + packages=( $packages $(ls /var/aur) ) + fi + _wanted packages expl "packages" compadd - "${(@)packages}" + + repositories=(${(o)${${${(M)${(f)"$(query_group' + '-o[query the package that owns a file]:file:_files' + '-p[package file to query]:*:package file:->query_file' + '-s[search package names and descriptions]:*:search text:->query_search' + ) + + # options for passing to _arguments: options for --query and subcommands + typeset -a _yaourt_opts_query_modifiers + _yaourt_opts_query_modifiers=( + '-c[list package changelog]' + '-d[list packages installed as dependencies]' + '-e[list packages explicitly installed]' + '-i[view package information]' + '-ii[view package information including backup files]' + '-k[check package files]' + '-l[list package contents]' + '-m[list installed packages not found in sync db(s)]' + '-t[list packages not required by any package]' + '-u[list packages that can be upgraded]' + '--aur[install packages from aur, even if they are in community, or, with the -u option, update packages installed from aur]' + '--devel[used with -u updates all cvs/svn/git/hg/bzr packages]' + '--date[list packages sorted in ascending order (oldest first) by installation date]' + ) + + # options for passing to _arguments: options for --remove command + typeset -a _yaourt_opts_remove + _yaourt_opts_remove=( + '-c[remove all dependent packages]' + '-d[skip dependency checks]' + "-k[only remove database entry, don't remove files]" + '-n[remove protected configuration files]' + '-s[remove dependencies not required by other packages]' + '*:installed package:_yaourt_completions_installed_packages' + ) + + # options for passing to _arguments: options for --sync command + typeset -a _yaourt_opts_sync_actions + _yaourt_opts_sync_actions=( + '*-c[remove old packages from cache]:*:clean:->sync_clean' + '*-cc[remove all packages from cache]:*:clean:->sync_clean' + '-g[view all members of a package group]:*:package group:->sync_group' + '-s[search package names and descriptions]:*:search text:->sync_search' + ) + + # options for passing to _arguments: options for --sync command + typeset -a _yaourt_opts_sync_modifiers + _yaourt_opts_sync_modifiers=( + '-d[skip dependency checks]' + '-f[overwrite conflicting files]' + '-i[view package information]' + '-l[list all packages in a repository]' + '-p[print download URIs for each package to be installed]' + '-u[upgrade all out-of-date packages]' + '-w[download packages only]' + '-y[download fresh package databases]' + '*--ignore[ignore a package upgrade]:package: + _yaourt_completions_all_packages' + '*--ignoregroup[ignore a group upgrade]:package group: + _yaourt_completions_all_groups' + '--asdeps[install packages as non-explicitly installed]' + '--asexplicit[install packages as explicitly installed]' + "--needed[don't reinstall up to date packages]" + '--devel[used with -u updates all cvs/svn/git/hg/bzr packages]' + ) + + case $words[2] in + -Q*g*) # ipkg groups + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:groups:_yaourt_completions_installed_groups' + ;; + -Q*o*) # file + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:package file:_files' + ;; + -Q*p*) # file *.pkg.tar* + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_query_modifiers[@]" \ + '*:package file:_files -g "*.pkg.tar*"' + ;; + -Q*) _yaourt_action_query ;; + -R*) _yaourt_action_remove ;; + -S*c*) # no completion + return 0 + ;; + -S*l*) # repos + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:package repo:_yaourt_completions_repositories' \ + ;; + -S*g*) # pkg groups + _arguments -s : \ + "$_yaourt_opts_common[@]" \ + "$_yaourt_opts_sync_modifiers[@]" \ + '*:package group:_yaourt_completions_all_groups' + ;; + -S*) _yaourt_action_sync ;; + -U*) _yaourt_action_upgrade ;; + -V*) _yaourt_action_version ;; + -h*) _yaourt_action_help ;; + - ) _yaourt_action_none ;; + * ) return 1 ;; + esac +} + +# run the main dispatcher +_yaourt "$@" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_yarn b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_yarn new file mode 100644 index 00000000..70ed5592 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_yarn @@ -0,0 +1,465 @@ +#compdef yarn +# ------------------------------------------------------------------------------ +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for yarn (https://yarnpkg.com/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Massimiliano Torromeo +# * Shohei YOSHIDA +# +# ------------------------------------------------------------------------------ + +declare -g _yarn_run_cwd + +_commands=( + 'access' + 'audit:Checks for known security issues with the installed packages' + 'autoclean:Clean and remove unnecessary files from package dependencies' + 'cache:List or clean every cached package' + "check:Verify package dependencies against yarn's lock file" + 'config:Manages the yarn configuration files' + 'create:Creates new projects from any create-* starter kits' + 'exec' + 'generate-lock-entry:Generates a lock file entry' + 'global:Install packages globally on your operating system' + 'help:Show information about a command' + 'import:Generate yarn.lock from an existing npm-installed node_modules folder' + 'info:Show information about a package' + 'init:Interactively creates or updates a package.json file' + 'install:Install all the dependencies listed within package.json' + 'licenses:List licenses for installed packages' + 'link:Symlink a package folder during development' + 'login:Store registry username and email' + 'logout:Clear registry username and email' + 'node:Runs Node with the same version that the one used by Yarn itself' + 'outdated:Check for outdated package dependencies' + 'owner:Manage package owners' + 'pack:Create a compressed gzip archive of package dependencies' + 'policies:Defines project-wide policies for your project' + 'publish:Publish a package to the npm registry' + 'run:Run a defined package script' + 'tag:Add, remove, or list tags on a package' + 'team:Maintain team memberships' + 'unlink:Unlink a previously created symlink for a package' + 'unplug:Temporarily copies a package outside of the global cache for debugging purposes' + 'version:Update the package version' + 'versions:Display version information of currently installed Yarn, Node.js, and its dependencies' + 'why:Show information about why a package is installed' + 'workspace' + 'workspaces:Show information about your workspaces' +) + +_global_commands=( + 'add:Installs a package and any packages that it depends on' + 'bin:Displays the location of the yarn bin folder' + 'list:List installed packages' + 'remove:Remove installed package from dependencies updating package.json' + 'upgrade:Upgrades packages to their latest version based on the specified range' + 'upgrade-interactive:Interactively upgrade packages' +) + +_yarn_commands_scripts() { + local -a scripts + if [[ -n $opt_args[--cwd] ]]; then + scripts=($(cd $opt_args[--cwd] && yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g')) + else + scripts=($(yarn run --json 2>/dev/null | sed -E '/Commands available|possibleCommands/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g' | tr , '\n' | sed -e 's/:/\\:/g')) + fi + + _describe 'command or script' _commands -- _global_commands -- scripts +} + +_yarn_scripts() { + local -a commands binaries scripts + local -a scriptNames scriptCommands + local i runJSON + + if [[ -n $_yarn_run_cwd ]]; then + runJSON=$(cd $_yarn_run_cwd && yarn run --json 2>/dev/null) + else + runJSON=$(yarn run --json 2>/dev/null) + fi + # Some sed utilities (e.g. Mac OS / BSD) don't interpret `\n` in a replacement + # pattern as a newline. See https://superuser.com/q/307165 + binaries=($(sed -E '/Commands available/!d;s/.*Commands available from binary scripts: ([^"]+)".*/\1/;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g;s/:/\\:/g;s/,/\'$'\n/g' <<< "$runJSON")) + scriptNames=($(sed -E '/possibleCommands/!d;s/.*"items":\[([^]]+).*/\1/;s/[" ]//g;s/:/\\:/g;s/,/\'$'\n/g' <<< "$runJSON")) + scriptCommands=("${(@f)$(sed -E '/possibleCommands/!d;s/.*"hints":\{(.+")\}.*/\1/;s/"[^"]+"://g;s/:/\\:/g;s/","/\'$'\n/g;s/(^"|"$)//g' <<< "$runJSON")}") + + for (( i=1; i <= $#scriptNames; i++ )); do + scripts+=("${scriptNames[$i]}:${scriptCommands[$i]}") + done + + commands=('env' $scripts $binaries) + _describe 'command' commands +} + +_yarn_global_commands() { + local -a cmds + cmds=('ls:List installed packages') + _describe 'command' _global_commands +} + +_yarn_commands() { + _describe 'command' _commands -- _global_commands +} + +_yarn_add_files() { + if compset -P "(file|link):"; then + _files + fi +} + +_yarn_workspaces() { + local -a workspaces=(${(@f)$(yarn workspaces info |sed -n -e 's/^ "\([^"]*\)": {/\1/p')}) + _describe 'workspace' workspaces +} + +_yarn() { + local context state state_descr line + typeset -A opt_args + + _arguments \ + '(-h --help)'{-h,--help}'[output usage information]' \ + '(-V --version)'{-V,--version}'[output the version number]' \ + '--verbose[output verbose messages on internal operations]' \ + '--cache-folder=[specify a custom folder to store the yarn cache]:folder:_files -/' \ + '--check-files[install will verify file tree of packages for consistency]' \ + '--cwd=[working directory to use]:path:_files -/' \ + "(--enable-pnp --pnp)--disable-pnp[disable the Plug'n'Play installation]" \ + '(--no-emoji)--emoji=[enable emoji in output(default: false)]:enabled:(true false)' \ + '(--emoji)--no-emoji[disable emoji in output]' \ + '(--disable-pnp)'{--enable-pnp,--pnp}"[enable the Plug'n'Play installation]" \ + '--flat[only allow one version of a package]' \ + '--focus[Focus on a single workspace by installing remote copies of its sibiling workspaces]' \ + '--force[install and build packages even if they were built before, overwrite lockfile]' \ + "--frozen-lockfile[don't generate a lockfile and fail if an update is needed]" \ + '--global-folder=[modules folder]:folder:_files -/' \ + '--har[save HAR output of network traffic]' \ + '--https-proxy=[HTTPS proxy]:host:_hosts' \ + '--ignore-engines[ignore engines check]' \ + "--ignore-scripts[don't run lifecycle scripts]" \ + '--ignore-optional[ignore optional dependencies]' \ + '--ignore-platform[ignore platform checks]' \ + '--json[format Yarn log messages as lines of JSON]' \ + '--link-duplicates[create hardlinks to the repeated modules in node_modules]' \ + '--link-folder=[specify a custom folder to store global links]' \ + '--modules-folder=[rather than installing modules into the node_modules folder relative to the cwd, output them here]:folder:_files -/' \ + '--mutex=[use a mutex to ensure only one yarn instance is executing]:type[\:specifier]' \ + '--network-concurrency=[maximum number of concurrent network requests]:number' \ + '--network-timeout=[TCP timeout for network requests]:milliseconds' \ + "--no-bin-links[don't generate bin links when setting up packages]" \ + '--no-default-rc[prevent Yarn from automatically detecting yarnrc and npmrc files]' \ + "--no-lockfile[don't read or generate a lockfile]" \ + '--non-interactive[do not show interactive prompts]' \ + '--no-node-version-check[do not warn when using a potentially unsupported Node version]' \ + '--no-progress[disable progress bar]' \ + '--offline[trigger an error if any required dependencies are not available in local cache]' \ + '--otp=[one-time password for two factor authentication]:otpcode' \ + '--prefer-offline[use network only if dependencies are not available in local cache]' \ + '--preferred-cache-folder=[specify a custom folder to store the yarn cache if possible]:folder:_files -/' \ + '(--prod --production)'{--prod,--production}'[install only production dependencies]' \ + '--proxy=[HTTP proxy]:host:_hosts' \ + "--pure-lockfile[don't generate a lockfile]" \ + '--registry=[override configuration registry]:url:_urls' \ + '(-s --silent)'{-s,--silent}'[skip Yarn console logs, other types of logs (script output) will be printed]' \ + '--scripts-prepend-node-path=[prepend the node executable dir to the PATH in scripts]:bool:(true false)' \ + '--skip-integrity-check[run install without checking if node_modules is installed]' \ + "--strict-semver[don't compare semver loosely]" \ + '--update-checksum[update package checksums from current repository]' \ + '--use-yarnrc=[specifies a yarnrc that Yarn should use]:yarnrc:_files' \ + '1: :_yarn_commands_scripts' \ + '*:: :->command_args' + + + case $state in + command_args) + case $words[1] in + help) + _arguments \ + '1: :_yarn_commands' \ + ;; + + access) + _arguments \ + '1: :(public restricted grant revoke ls-packages ls-collaborators edit)' + ;; + + add) + _arguments \ + '(-D --dev)'{-D,--dev}'[install packages in devDependencies]' \ + '(-P --peer)'{-P,--peer}'[install packages in peerDependencies]' \ + '(-O --optional)'{-O,--optional}'[install packages in optionalDependencies]' \ + '(-E --exact)'{-E,--exact}'[install packages as exact versions]' \ + '(-T --tilde)'{-T,--tilde}'[install the most recent release of the packages that have the same minor version]' \ + '(--ignore-workspace-root-check -W)'{--ignore-workspace-root-check,-W}'[allows a package to be installed at the workspaces root]' \ + '--audit[checks for known security issues with the installed packages]' \ + '*:package-name:_yarn_add_files' + ;; + + audit) + _arguments \ + '--verbose[output verbose message]' \ + '--json[format Yarn log messages as lines of JSON]' \ + '--level=[only print advisories with severity greater than or equal to]:level:(info low moderate high critical)' \ + '--groups=[only audit dependencies from listed groups]:groups:->groups_args' + ;; + + cache) + _arguments \ + '1: :(list dir clean)' \ + '*:: :->cache_args' + ;; + + check) + _arguments \ + '--integrity[Verifies that versions and hashed values of the package contents in package.json]' \ + '--verify-tree[Recursively verifies that the dependencies in package.json are present in node_modules]' + ;; + + config) + _arguments \ + '1: :(set get delete list)' \ + '*:: :->config_args' + ;; + + global) + _arguments \ + '--prefix=[bin prefix to use to install binaries]' \ + '1: :_yarn_global_commands' \ + '*:: :->command_args' + ;; + + info) + _arguments \ + '1:package:' \ + '2:field' + ;; + + init) + _arguments \ + '(-y --yes)'{-y,--yes}'[install packages in devDependencies]' + ;; + + licenses) + _arguments \ + '1: :(ls generate-disclaimer)' \ + ;; + + link|unlink|outdated) + _arguments \ + '1:package' \ + ;; + + list) + _arguments \ + '--depth=[Limit the depth of the shown dependencies]:depth' \ + '--pattern=[filter the list of dependencies by the pattern]' + ;; + + owner) + _arguments \ + '1: :(list add rm)' \ + '*:: :->owner_args' + ;; + + pack) + _arguments \ + '(-f --filename)'{-f,--filename}':filename:_files' + ;; + + publish) + _arguments \ + '--new-version:version:' \ + '--message:message:' \ + '--no-git-tag-version' \ + '--access:access:' \ + '--tag:tag:' \ + '1: :_files' + ;; + + policies) + _arguments \ + '1: :(set-version)' + ;; + + remove|upgrade) + _arguments \ + '*:package:' + ;; + + run) + if [[ -n $opt_args[--cwd] ]]; then + _yarn_run_cwd=$opt_args[--cwd] + else + _yarn_run_cwd='' + fi + _arguments \ + '1: :_yarn_scripts' \ + '*:: :_default' + ;; + + tag) + _arguments \ + '1: :(lists add rm)' \ + '*:: :->tag_args' + ;; + + team) + _arguments \ + '1: :(create destroy add rm list)' \ + '*:: :->team_args' + ;; + + upgrade-interactive) + _arguments \ + '--latest[use the version tagged latest in the registry]' + ;; + + version) + _arguments \ + '--new-version[create a new version using an interactive session to prompt you]:version:' \ + '--major[creates a new version by incrementing the major version]' \ + '--minor[creates a new version by incrementing the minor version]' \ + '--patch[creates a new version by incrementing the patch version]' \ + '--premajor[creates a new prerelease version by incrementing the major version]' \ + '--preminor[creates a new prerelease version by incrementing the minor version]' \ + '--prepatch[creates a new prerelease version by incrementing the patch version]' \ + '--prerelease[increments the prerelease version number keeping the main version]' \ + '--no-git-tag-version[creates a new version without creating a git tag]' \ + '--no-commit-hooks[bypasses running commit hooks when committing the new version]' + ;; + + why) + _arguments \ + '1:query:_files' + ;; + + workspace) + _arguments \ + '1:workspace:_yarn_workspaces' \ + '*:: :_yarn_global_commands' + ;; + + workspaces) + _arguments \ + '--json[format Yarn log messages as lines of JSON]' \ + '1:commands:(info run)' + ;; + + *) + _default + ;; + esac + ;; + esac + + case $state in + cache_args) + if [[ $words[1] == "list" ]]; then + _arguments \ + '--pattern=[print out every cached package that matches the pattern]:pattern:' + fi + ;; + config_args) + case $words[1] in + get|delete) + _arguments \ + '1:key:' + ;; + + set) + _arguments \ + '(-g --global)'{-g,--global} \ + '1:key:' \ + '2:value:' + ;; + esac + ;; + groups_args) + local dependency_groups=(devDependencies dependencies optionalDependencies peerDependencies bundledDependencies) + _values -s ',' 'groups' $dependency_groups + ;; + + owner_args) + case $words[1] in + ls) + _arguments \ + '1:package:' + ;; + + add|rm) + _arguments \ + '1:user:' \ + '2:package:' + ;; + esac + ;; + + tag_args) + case $words[1] in + ls) + _arguments \ + '1:package' + ;; + + add|rm) + _arguments \ + '1:package:' \ + '2:tag:' + ;; + esac + ;; + + team_args) + case $words[1] in + create|destroy|ls) + _arguments \ + '1:scope\:team:' + ;; + + add|rm) + _arguments \ + '1:scope\:team:' \ + '2:user:' + ;; + esac + ;; + esac +} + +_yarn "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_zcash-cli b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_zcash-cli new file mode 100644 index 00000000..70ffa402 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/exact_src/_zcash-cli @@ -0,0 +1,181 @@ +#compdef zcash-cli +# ------------------------------------------------------------------------------ +# Copyright (c) 2017 Github zsh-users - http://github.com/zsh-users +# 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-users 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 ZSH-USERS 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. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for zcash-cli (https://z.cash). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Jordy van Wolferen (https://github.com/jvwdev) +# +# ------------------------------------------------------------------------------ + +local state line curcontext="$curcontext" ret=1 + +_arguments -C \ + '-?[display usage information]' \ + -conf='[specify configuration file]:file [zcash.conf]:_files' \ + -datadir='[specify data directory]:directory:_directories' \ + -testnet'[use the test network]' \ + -regtest'[enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development.]' \ + -rpcconnect='[send commands to node running on specified ip]:rpcconnect [127.0.0.1]:_hosts' \ + -rpcport='[connect to JSON-RPC on specified port]: :_guard "[[\:digit\:]]#" "port [8232 or testnet\: 18232]"' \ + -rpcwait'[wait for RPC server to start]' \ + -rpcuser='[username for JSON-RPC connections]:rpcuser' \ + -rpcpassword='[password for JSON-RPC connections]:rpcpassword' \ + -rpcclienttimeout='[specify timeout during HTTP requests, or 0 for no timeout]: :_guard "[[\:digit\:]]#" "timeout (seconds) [900]"' \ + ':subcommand:->subcommand' && ret=0 + +case $state in + subcommand) + subcommands=( + 'getbestblockhash' + 'getblock' + 'getblockchaininfo' + 'getblockcount' + 'getblockhash' + 'getblockheader' + 'getchaintips' + 'getdifficulty' + 'getmempoolinfo' + 'getrawmempool' + 'gettxout' + 'gettxoutproof' + 'gettxoutsetinfo' + 'verifychain' + 'verifytxoutproof' + 'getinfo' + 'help' + 'stop' + 'generate' + 'getgenerate' + 'setgenerate' + 'getblocksubsidy' + 'getblocktemplate' + 'getlocalsolps' + 'getmininginfo' + 'getnetworkhashps' + 'getnetworksolps' + 'prioritisetransaction' + 'submitblock' + 'addnode' + 'clearbanned' + 'disconnectnode' + 'getaddednodeinfo' + 'getconnectioncount' + 'getnettotals' + 'getnetworkinfo' + 'getpeerinfo' + 'listbanned' + 'ping' + 'setban' + 'createrawtransaction' + 'decoderawtransaction' + 'decodescript' + 'fundrawtransaction' + 'getrawtransaction' + 'sendrawtransaction' + 'signrawtransaction' + 'createmultisig' + 'estimatefee' + 'estimatepriority' + 'validateaddress' + 'verifymessage' + 'z_validateaddress' + 'addmultisigaddress' + 'backupwallet' + 'dumpprivkey' + 'dumpwallet' + 'encryptwallet' + 'getaccount' + 'getaccountaddress' + 'getaddressesbyaccount' + 'getbalance' + 'getnewaddress' + 'getrawchangeaddress' + 'getreceivedbyaccount' + 'getreceivedbyaddress' + 'gettransaction' + 'getunconfirmedbalance' + 'getwalletinfo' + 'importaddress' + 'importprivkey' + 'importwallet' + 'keypoolrefill' + 'listaccounts' + 'listaddressgroupings' + 'listlockunspent' + 'listreceivedbyaccount' + 'listreceivedbyaddress' + 'listsinceblock' + 'listtransactions' + 'listunspent' + 'lockunspent' + 'move' + 'sendfrom' + 'sendmany' + 'sendtoaddress' + 'setaccount' + 'settxfee' + 'signmessage' + 'z_exportkey' + 'z_exportwallet' + 'z_getbalance' + 'z_getnewaddress' + 'z_getoperationresult' + 'z_getoperationstatus' + 'z_gettotalbalance' + 'z_importkey' + 'z_importwallet' + 'z_listaddresses' + 'z_listoperationids' + 'z_listreceivedbyaddress' + 'z_sendmany' + 'zcbenchmark' + 'zcrawjoinsplit' + 'zcrawkeygen' + 'zcrawreceive' + 'zcsamplejoinsplit' + ) + + _describe -t subcommands 'zcash-cli subcommand' subcommands && ret=0 + ;; +esac + +return ret + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/zsh-completions-howto.org b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/zsh-completions-howto.org new file mode 100644 index 00000000..6b5dd1da --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/zsh-completions-howto.org @@ -0,0 +1,445 @@ +* Intro +The official documentation for writing zsh completion functions is difficult to understand, and doesn't give many examples. +At the time of writing this document I was able to find a few other tutorials on the web, however those tutorials only +explain a small portion of the capabilities of the completion system. This document aims to cover areas not explained elsewhere, +with examples, so that you can learn how to write more advanced completion functions. I do not go into all the details, but will +give enough information and examples to get you up and running. If you need more details you can look it up for yourself in the + [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]]. + +Please make any scripts that you create publicly available for others (e.g. by forking this repo and making a [[id:64bcd501-b0f0-48c7-b8e2-07af708b95ec][pull request]]). +Also if you have any more information to add or improvements to make to this tutorial, please do. +* Getting started +** Telling zsh which function to use for completing a command +Completion functions for commands are stored in files with names beginning with an underscore _, and these files should +be placed in a directory listed in the $fpath variable. +You can add a directory to $fpath by adding a line like this to your ~/.zshrc file: +#+BEGIN_SRC sh +fpath=(~/newdir $fpath) +#+END_SRC +The first line of a completion function file can look something like this: +#+BEGIN_SRC sh +#compdef foobar +#+END_SRC +This tells zsh that the file contains code for completing the foobar command. +This is the format that you will use most often for the first line, but you can also use the same file for completing +several different functions if you want. See [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Autoloaded-files][here]] for more details. + +You can also use the compdef command directly (e.g. in your ~/.zshrc file) to tell zsh which function to use for completing +a command like this: +#+BEGIN_SRC sh +> compdef _function foobar +#+END_SRC +or to use the same completions for several commands: +#+BEGIN_SRC sh +> compdef _function foobar goocar hoodar +#+END_SRC +or if you want to supply arguments: +#+BEGIN_SRC sh +> compdef '_function arg1 arg2' foobar +#+END_SRC +See [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Functions-4][here]] for more details. +** Completing generic gnu commands +Many [[http://www.gnu.org/][gnu]] commands have a standardized way of listing option descriptions (when the --help option is used). +For these commands you can use the _gnu_generic function for automatically creating completions, like this: +#+BEGIN_SRC sh +> compdef _gnu_generic foobar +#+END_SRC +or to use _gnu_generic with several different commands: +#+BEGIN_SRC sh +> compdef _gnu_generic foobar goocar hoodar +#+END_SRC +This line can be placed in your ~/.zshrc file. +** Copying completions from another command +If you want a command, say cmd1, to have the same completions as another, say cmd2, which has already had +completions defined for it, you can do this: +#+BEGIN_SRC sh +> compdef cmd1=cmd2 +#+END_SRC +This can be useful for example if you have created an alias for a command to help you remember it. +* Writing your own completion functions +A good way to get started is to look at some already defined completion functions. +On my linux installation these are found in /usr/share/zsh/functions/Completion/Unix +and /usr/share/zsh/functions/Completion/Linux and a few other subdirs. + +You will notice that the _arguments function is used a lot in these files. +This is a utility function that makes it easy to write simple completion functions. +The _arguments function is a wrapper around the compadd builtin function. +The compadd builtin is the core function used to add completion words to the command line, and control its behaviour. +However, most of the time you will not need to use compadd, since there are many utility functions such as _arguments +and _describe which are easier to use. + +For very basic completions the _describe function should be adequate + +** Utility functions +Here is a list of some of the utility functions that may be of use. +The full list of utility functions, with full explanations, is available [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-Functions][here]]. +Examples of how to use these functions are given in the next section. + +*** main utility functions for overall completion +| _alternative | Can be used to generate completion candidates from other utility functions or shell code. | +| _arguments | Used to specify how to complete individual options & arguments for a command with unix style options. | +| _describe | Used for creating simple completions consisting of words with descriptions (but no actions). Easier to use than _arguments | +| _gnu_generic | Can be used to complete options for commands that understand the `--help' option. | +| _regex_arguments | Creates a function for matching commandline arguments with regular expressions, and then performing actions/completions. | +*** functions for performing complex completions of single words +| _values | Used for completing arbitrary keywords (values) and their arguments, or comma separated lists of such combinations. | +| _combination | Used to complete combinations of values, for example pairs of hostnames and usernames. | +| _multi_parts | Used for completing multiple parts of words separately where each part is separated by some char, e.g. for completing partial filepaths: /u/i/sy -> /usr/include/sys | +| _sep_parts | Like _multi_parts but allows different separators at different parts of the completion. | +| _sequence | Used as a wrapper around another completion function to complete a delimited list of matches generated by that other function. +*** functions for completing specific types of objects +| _path_files | Used to complete filepaths. Take several options to control behaviour. | +| _files | Calls _path_files with all options except -g and -/. These options depend on file-patterns style setting. | +| _net_interfaces | Used for completing network interface names | +| _users | Used for completing user names | +| _groups | Used for completing group names | +| _options | Used for completing the names of shell options. | +| _parameters | Used for completing the names of shell parameters/variables (can restrict to those matching a pattern). | +*** functions for handling cached completions +If you have a very large number of completions you can save them in a cache file so that the completions load quickly. +| _cache_invalid | indicates whether the completions cache corresponding to a given cache identifier needs rebuilding | +| _retrieve_cache | retrieves completion information from a cache file | +| _store_cache | store completions corresponding to a given cache identifier in a cache file | +*** other functions +| _message | Used for displaying help messages in places where no completions can be generated. | +| _regex_words | Can be used to generate arguments for the _regex_arguments command. This is easier than writing the arguments manually. | +| _guard | Can be used in the ACTION of specifications for _arguments and similar functions to check the word being completed. | +*** Actions +Many of the utility functions such as _arguments, _regex_arguments, _alternative and _values may include an action +at the end of an option/argument specification. This action indicates how to complete the corresponding argument. +The actions can take one of the following forms: +| ( ) | Argument is required but no matches are generated for it. | +| (ITEM1 ITEM2) | List of possible matches | +| ((ITEM1\:'DESC1' ITEM2\:'DESC2')) | List of possible matches, with descriptions. Make sure to use different quotes than those around the whole specification. | +| ->STRING | Set $state to STRING and continue ($state can be checked in a case statement after the utility function call) | +| FUNCTION | Name of a function to call for generating matches or performing some other action, e.g. _files or _message | +| {EVAL-STRING} | Evaluate string as shell code to generate matches. This can be used to call a utility function with arguments, e.g. _values or _describe | +| =ACTION | Inserts a dummy word into completion command line without changing the point at which completion takes place. | +Not all action types are available for all utility functions that use them. For example the ->STRING type is not available in the +_regex_arguments or _alternative functions. +** Writing simple completion functions using _describe +The _describe function can be used for simple completions where the order and position of the options/arguments is +not important. You just need to create an array parameter to hold the options & their descriptions, and then pass +the parameter name as an argument to _describe. The following example creates completion candidates c and d, with +the descriptions (note this should be put in a file called _cmd in some directory listed in $fpath). +#+BEGIN_SRC sh +#compdef cmd +local -a subcmds +subcmds=('c:description for c command' 'd:description for d command') +_describe 'command' subcmds +#+END_SRC + +You can use several different lists separated by a double hyphen as follows but note that this mixes the matches under and single heading and is not intended to be used with different types of completion candidates: +#+BEGIN_SRC sh +local -a subcmds topics +subcmds=('c:description for c command' 'd:description for d command') +topics=('e:description for e help topic' 'f:description for f help topic') +_describe 'command' subcmds -- topics +#+END_SRC + +If two candidates have the same description, _describe collects them together on the same row and ensures that descriptions are aligned in neatly in columns. +The _describe function can be used in an ACTION as part of a specification for _alternative, _arguments or _regex_arguments. +In this case you will have to put it in braces with its arguments, e.g. 'TAG:DESCRIPTION:{_describe 'values' options}' +** Writing completion functions using _alternative +Like _describe, this function performs simple completions where the order and position of options/arguments is not important. +However, unlike _describe, instead of fixed matches further functions may be called to generate the completion candidates. Furthermore, _alternative allows a mix of different types of completion candidates to be mixed. + +As arguments it takes a list of specifications each in the form 'TAG:DESCRIPTION:ACTION' where TAG is a special tag that identifies the type of completion matches, +DESCRIPTION is used as a heading to describe the group of completion candidates collectively, and ACTION is one of the action types listed previously (apart from the ->STRING and =ACTION forms). +For example: +#+BEGIN_SRC sh +_alternative 'arguments:custom arg:(a b c)' 'files:filename:_files' +#+END_SRC +The first specification adds completion candidates a, b & c, and the second specification calls the _files function for completing filepaths. + +We could split the specifications over several lines with \ and add descriptions to each of the custom args like this: +#+BEGIN_SRC sh +_alternative \ + 'args:custom arg:((a\:"description a" b\:"description b" c\:"description c"))' \ + 'files:filename:_files' +#+END_SRC + +If we want to pass arguments to _files they can simply be included, like this: +#+BEGIN_SRC sh +_alternative \ + 'args:custom arg:((a\:"description a" b\:"description b" c\:"description c"))'\ + 'files:filename:_files -/' +#+END_SRC + +To use parameter expansion to create our list of completions we must use double quotes to quote the specifications, +e.g: +#+BEGIN_SRC sh +_alternative \ + "dirs:user directory:($userdirs)" \ + "pids:process ID:($(ps -A o pid=))" +#+END_SRC +In this case the first specification adds the words stored in the $userdirs variable, and the second specification +evaluates 'ps -A o pid=' to get a list of pids to use as completion candidates. In practice, we would make used of the existing _pids function for this. + +We can use other utility functions such as _values in the ACTION to perform more complex completions, e.g: +#+BEGIN_SRC sh +_alternative \ + "directories:user directory:($userdirs)" \ + 'options:comma-separated opt: _values -s , letter a b c' +#+END_SRC +this will complete the items in $userdirs, as well as a comma separated list containing a, b &/or c. Note the use of the initial space before _values. This is needed because _values doesn't understand standard compadd options for descriptions. + +As with _describe, the _alternative function can itself be used in an ACTION as part of a specification for _arguments +or _regex_arguments. +** Writing completion functions using _arguments +With a single call to the _arguments function you can create fairly sophisticated completion functions. It is intended to handle typical commands that take a variety of options along with some normal arguments. +Like the _alternative function, _arguments takes a list of specification strings as arguments. +These specification strings specify options and any corresponding option arguments (e.g. -f filename), +or command arguments. + +Basic option specifications take the form '-OPT[DESCRIPTION]', e.g. like this: +#+BEGIN_SRC sh +_arguments '-s[sort output]' '--l[long output]' '-l[long output]' +#+END_SRC +Arguments for the option can be specified after the option description in this form '-OPT[DESCRIPTION]:MESSAGE:ACTION', +where MESSAGE is a message to display and ACTION can be any of the forms mentioned in the ACTIONS section above. +For example: +#+BEGIN_SRC sh +_arguments '-f[input file]:filename:_files' +#+END_SRC + +Command argument specifications take the form 'N:MESSAGE:ACTION' where N indicates that it is the Nth command argument, +and MESSAGE & ACTION are as before. If the N is omitted then it just means the next command argument (after any that have +already been specified). If a double colon is used at the start (after N) then the argument is optional. +For example: +#+BEGIN_SRC sh +_arguments '-s[sort output]' '1:first arg:_net_interfaces' '::optional arg:_files' ':next arg:(a b c)' +#+END_SRC +here the first arg is a network interface, the next optional arg is a file name, the last arg can be either a, b or c, +and the -s option may be completed at any position. + +The _arguments function allows the full set of ACTION forms listed in the ACTION section above. +This means that you can use actions for selecting case statement branches like this: +#+BEGIN_SRC sh +_arguments '-m[music file]:filename:->files' '-f[flags]:flag:->flags' +case "$state" in + files) + local -a music_files + music_files=( Music/**/*.{mp3,wav,flac,ogg} ) + _multi_parts / music_files + ;; + flags) + _values -s , 'flags' a b c d e + ;; +esac +#+END_SRC +In this case paths to music files are completed stepwise descending down directories using the _multi_parts function, +and the flags are completed as a comma separated list using the _values function. + +I have just given you the basics of _arguments specifications here, you can also specify mutually exclusive options, +repeated options & arguments, options beginning with + instead of -, etc. For more details see the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]]. +Also have a look at the tutorials mentioned at the end of this document, and the completion functions in the [[https://github.com/vapniks/zsh-completions/tree/master/src][src directory]]. +** Writing completion functions using _regex_arguments and _regex_words +If you have a complex command line specification with several different possible argument sequences then +the _regex_arguments function may be what you need. It typically works well where you have a series of keywords followed by a variable number of arguments. + +_regex_arguments creates a completion function whose name is given by the first argument. +Hence you need to first call _regex_arguments to create the completion function, and then call that function, +e.g. like this: +#+BEGIN_SRC sh +_regex_arguments _cmd OTHER_ARGS.. +_cmd "$@" +#+END_SRC + +The OTHER_ARGS should be sequences of specifications for matching & completing words on the command line. +These sequences can be separated by '|' to represent alternative sequences of words. +You can use bracketing to arbitrary depth to specify alternate subsequences, but the brackets must be backslashed like this \( \) +or quoted like this '(' ')'. + +For example: +#+BEGIN_SRC sh +_regex_arguments _cmd SEQ1 '|' SEQ2 \( SEQ2a '|' SEQ2b \) +_cmd "$@" +#+END_SRC +This specifies a command line matching either SEQ1, or SEQ2 followed by SEQ2a or SEQ2b. You are describing the form arguments to the command take in the form of a regular expression grammar. + +Each specification in a sequence must contain a / PATTERN/ part at the start followed by an optional ':TAG:DESCRIPTION:ACTION' +part. + +Each PATTERN is a regular expression to match a word on the command line. These patterns are processed sequentially +until we reach a pattern that doesn't match at which point any corresponding ACTION is performed to obtain completions +for that word. Note that there needs to be a pattern to match the initial command itself. +See below for further explanation about PATTERNs. + +The ':TAG:DESCRIPTION:ACTION' part is interpreted in the same way as for the _alternative function specifications, +except that it has an extra : at the start, and now all of the possible ACTION formats listed previously are allowed. + +Here is an example: +#+BEGIN_SRC sh +_regex_arguments _cmd /$'[^\0]##\0'/ \( /$'word1(a|b|c)\0'/ ':word:first word:(word1a word1b word1c)' '|'\ + /$'word11(a|b|c)\0'/ ':word:first word:(word11a word11b word11c)' \( /$'word2(a|b|c)\0'/ ':word:second word:(word2a word2b word2c)'\ + '|' /$'word22(a|b|c)\0'/ ':word:second word:(word22a word22b word22c)' \) \) +_cmd "$@" +#+END_SRC +in this case the first word can be word1 or word11 followed by an a, b or c, and if the first word contains 11 then a second +word is allowed which can be word2 followed by and a, b, or c, or a filename. + +If this sounds too complicated a much simpler alternative is to use the _regex_words function for creating +specifications for _regex_arguments. +*** Patterns +You may notice that the / PATTERN/ specs in the previous example don't look like normal regular expressions. +Often a string parameter in the form $'foo\0' is used. This is so that the \0 in the string is interpreted correctly +as a null char which is used to separate words in the internal representation. If you don't include the \0 at the end +of the pattern you may get problems matching the next word. If you need to use the contents of a variable in a pattern, +you can double quote it so that it gets expanded and then put a string parameter containing a null char afterwards, +like this: "$somevar"$'\0' + +The regular expression syntax for patterns seems to be a bit different from normal regular expressions, +and I can't find documentation anywhere. +However I have managed to work out what the following special chars are for: +| * | wildcard - any number of chars | +| ? | wildcard - single char | +| # | zero or more of the previous char (like * in a normal regular expression) | +| ## | one or more of the previous char (like + in a normal regular expression) | +*** _regex_words +The _regex_words function makes it much easier to create specifications for _regex_arguments. +The results of calling _regex_words can be stored in a variable which can then be used instead +of a specification for _regex_arguments. + +To create a specification using _regex_words you supply it with a tag followed by a description followed by a list +of specifications for individual words. These specifications take the form 'WORD:DESCRIPTION:SPEC' where WORD is the +word to be completed, DESCRIPTION is a description for it, and SPEC can be another variable created by _regex_words +specifying words that come after the current word or blank if there are no further words. +For example: +#+BEGIN_SRC sh +_regex_words firstword 'The first word' 'word1a:a word:' 'word1b:b word:' 'word1c:c word' +#+END_SRC +the results of this function call will be stored in the $reply array, and so we should store it in another array +before $reply gets changed again, like this: +#+BEGIN_SRC sh +local -a firstword +_regex_words word 'The first word' 'word1a:a word:' 'word1b:b word:' 'word1c:c word' +firstword="$reply[@]" +#+END_SRC +we could then use it with _regex_arguments like this: +#+BEGIN_SRC sh +_regex_arguments _cmd /$'[^\0]##\0'/ "$firstword[@]" +_cmd "$@" +#+END_SRC +Note that I have added an extra pattern for the initial command word itself. + +Here is a more complex example where we call _regex_words for different words on the command line +#+BEGIN_SRC sh +local -a firstword firstword2 secondword secondword2 +_regex_words word1 'The second word' 'woo:tang clan' 'hoo:not me' +secondword=("$reply[@]") +_regex_words word2 'Another second word' 'yee:thou' 'haa:very funny!' +secondword2=("$reply[@]") +_regex_words commands 'The first word' 'foo:do foo' 'man:yeah man' 'chu:at chu' +firstword=("$reply[@]") +_regex_words word4 'Another first word' 'boo:scare somebody:$secondword' 'ga:baby noise:$secondword'\ + 'loo:go to the toilet:$secondword2' +firstword2=("$reply[@]") + +_regex_arguments _hello /$'[^\0]##\0'/ "${firstword[@]}" "${firstword2[@]}" +_hello "$@" +#+END_SRC +In this case the first word can be one of "foo", "man", "chu", "boo", "ga" or "loo". +If the first word is "boo" or "ga" then the second word can be "woo" or "hoo", +and if the first word is "loo" then the second word can be "yee" or "haa", in the other +cases there is no second word. + +For a good example of the usage of _regex_words have a look at the _ip function. +** complex completions with _values, _sep_parts, & _multi_parts +The _values, _sep_parts & _multi_parts functions can be used either on their own, or as ACTIONs in specifications for +_alternative, _arguments or _regex_arguments. The following examples may be instructive. +See the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]] for more info. + +Space separated list of mp3 files: +#+BEGIN_SRC sh +_values 'mp3 files' ~/*.mp3 +#+END_SRC + +Comma separated list of session id numbers: +#+BEGIN_SRC sh +_values -s , 'session id' "${(uonzf)$(ps -A o sid=)}" +#+END_SRC + +Completes foo@news:woo, or foo@news:laa, or bar@news:woo, etc: +#+BEGIN_SRC sh +_sep_parts '(foo bar)' @ '(news ftp)' : '(woo laa)' +#+END_SRC + +Complete some MAC addresses one octet at a time: +#+BEGIN_SRC sh +_multi_parts : '(00:11:22:33:44:55 00:23:34:45:56:67 00:23:45:56:67:78)' +#+END_SRC + +** Adding completion words directly using compadd +For more fine grained control you can use the builtin compadd function to add completion words directly. +This function has many different options for controlling how completions are displayed and how text on the command line +can be altered when words are completed. Read the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]] for full details. +Here I just give a few simple examples. + +Add some words to the list of possible completions: +#+BEGIN_SRC sh +compadd foo bar blah +#+END_SRC + +As above but also display an explanation: +#+BEGIN_SRC sh +compadd -X 'Some completions' foo bar blah +#+END_SRC + +As above but automatically insert a prefix of "what_" before the completed word: +#+BEGIN_SRC sh +compadd -P what_ foo bar blah +#+END_SRC + +As above but automatically insert a suffix of "_todo" after the completed word: +#+BEGIN_SRC sh +compadd -S _todo foo bar blah +#+END_SRC + +As above but automatically remove the "_todo" suffix if a blank char is typed after the suffix: +#+BEGIN_SRC sh +compadd -P _todo -q foo bar blah +#+END_SRC + +Add words in array $wordsarray to the list of possible completions +#+BEGIN_SRC sh +compadd -a wordsarray +#+END_SRC + +* Testing & debugging +To reload a completion function: +#+BEGIN_SRC sh +> unfunction _func +> autoload -U _func +#+END_SRC + +The following functions can be called to obtain useful information. +If the default keybindings don't work you can try pressing Alt+x and then enter the command name. +| Function | Default keybinding | Description | +|-----------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------| +| _complete_help | Ctrl+x h | displays information about context names, tags, and completion functions used when completing at the current cursor position | +| _complete_help | Alt+2 Ctrl+x h | as above but displays even more information | +| _complete_debug | Ctrl+x ? | performs ordinary completion, but captures in a temporary file a trace of the shell commands executed by the completion system | +* Gotchas (things to watch out for) +Remember to include a #compdef line at the beginning of the file containing the completion function. + +Take care to use the correct type of quoting for specifications to _arguments or _regex_arguments: +use double quotes if there is a parameter that needs to be expanded in the specification, single quotes otherwise, +and make sure to use different quotes around item descriptions. + +Check that you have the correct number of :'s in the correct places for specifications for _arguments, +_alternative, _regex_arguments, etc. + +Remember to include an initial pattern to match the command word when using _regex_arguments (it does not need a matching action). + +Remember to put a null char $'\0' at the end of any PATTERN argument for _regex_arguments +* Tips +Sometimes you have a situation where there is just one option that can come after a subcommand, and zsh will complete this +automatically when tab is pressed after the subcommand. If instead you want it listed with its description before completing +you can add another empty option (i.e. \:) to the ACTION like this ':TAG:DESCRIPTION:((opt1\:"description for opt1" \:))' +Note this only applies to utility functions that use ACTIONs in their specification arguments (_arguments, _regex_arguments, etc.) + +* Other resources +[[https://wikimatze.de/writing-zsh-completion-for-padrino/][Here]] is a nicely formatted short tutorial showing basic usage of the _arguments function, +and [[https://web.archive.org/web/20190411104837/http://www.linux-mag.com/id/1106/][here]] is a slightly more advanced tutorial using the _arguments function. +[[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][Here]] is the zshcompsys man page. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/zsh-completions.plugin.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/zsh-completions.plugin.zsh new file mode 100644 index 00000000..b56f55de --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-completions/zsh-completions.plugin.zsh @@ -0,0 +1 @@ +fpath+="${0:h}/src" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/COPYING.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/COPYING.md new file mode 100644 index 00000000..cacbcbee --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/COPYING.md @@ -0,0 +1,23 @@ +Copyright (c) 2010-2020 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. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/HACKING.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/HACKING.md new file mode 100644 index 00000000..6fd195c0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/HACKING.md @@ -0,0 +1,99 @@ +Hacking on zsh-syntax-highlighting itself +========================================= + +This document includes information for people working on z-sy-h itself: on the +core driver (`zsh-syntax-highlighting.zsh`), on the highlighters in the +distribution, and on the test suite. It does not target third-party +highlighter authors (although they may find it an interesting read). + +The `main` highlighter +---------------------- + +The following function `pz` is useful when working on the `main` highlighting: + +```zsh +pq() { + (( $#argv )) || return 0 + print -r -l -- ${(qqqq)argv} +} +pz() { + local arg + for arg; do + pq ${(z)arg} + done +} +``` + +It prints, for each argument, its token breakdown, similar to how the main +loop of the `main` highlighter sees it. + +Testing the `brackets` highlighter +---------------------------------- + +Since the test harness empties `ZSH_HIGHLIGHT_STYLES` and the `brackets` +highlighter interrogates `ZSH_HIGHLIGHT_STYLES` to determine how to highlight, +tests must set the `bracket-level-#` keys themselves. For example: + +```zsh +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= +ZSH_HIGHLIGHT_STYLES[bracket-level-2]= + +BUFFER='echo ({x})' + +expected_region_highlight=( + "6 6 bracket-level-1" # ( + "7 7 bracket-level-2" # { + "9 9 bracket-level-2" # } + "10 10 bracket-level-1" # ) +) +``` + +Testing the `pattern` and `regexp` highlighters +----------------------------------------------- + +Because the `pattern` and `regexp` highlighters modifies `region_highlight` +directly instead of using `_zsh_highlight_add_highlight`, the test harness +cannot get the `ZSH_HIGHLIGHT_STYLES` keys. Therefore, when writing tests, use +the style itself as third word (cf. the +[documentation for `expected_region_highlight`](docs/highlighters.md)). For example: + +```zsh +ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') + +BUFFER='rm -rf /' + +expected_region_highlight=( + "1 8 fg=white,bold,bg=red" # rm -rf / +) +``` + +Memos and commas +---------------- + +We append to `region_highlight` as follows: + + +```zsh +region_highlight+=("$start $end $spec, memo=zsh-syntax-highlighting") +``` + +That comma is required to cause zsh 5.8 and older to ignore the memo without +ignoring the `$spec`. It's a hack, but given that no further 5.8.x patch +releases are planned, it's been deemed acceptable. See issue #418 and the +cross-referenced issues. + + +Miscellany +---------- + +If you work on the driver (`zsh-syntax-highlighting.zsh`), you may find the following zstyle useful: + +```zsh +zstyle ':completion:*:*:*:*:globbed-files' ignored-patterns {'*/',}zsh-syntax-highlighting.plugin.zsh +``` + +IRC channel +----------- + +We're on #zsh-syntax-highlighting on freenode. + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/INSTALL.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/INSTALL.md new file mode 100644 index 00000000..48b724f5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/INSTALL.md @@ -0,0 +1,131 @@ +How to install +-------------- + +### Using packages + +* Arch Linux: [community/zsh-syntax-highlighting][arch-package] / [AUR/zsh-syntax-highlighting-git][AUR-package] +* Debian: `zsh-syntax-highlighting` package [in `stretch`][debian-package] (or in [OBS repository][obs-repository]) +* Fedora: [zsh-syntax-highlighting package][fedora-package-alt] in Fedora 24+ (or in [OBS repository][obs-repository]) +* FreeBSD: `pkg install zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][freebsd-port]) +* Gentoo: [app-shells/zsh-syntax-highlighting][gentoo-repository] +* Mac OS X / Homebrew: [brew install zsh-syntax-highlighting][brew-package] +* NetBSD: `pkg_add zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][netbsd-port]) +* OpenBSD: `pkg_add zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][openbsd-port]) +* openSUSE / SLE: `zsh-syntax-highlighting` package in [OBS repository][obs-repository] +* RHEL / CentOS / Scientific Linux: `zsh-syntax-highlighting` package in [OBS repository][obs-repository] +* Ubuntu: `zsh-syntax-highlighting` package [in Xenial][ubuntu-package] (or in [OBS repository][obs-repository]) +* Void Linux: `zsh-syntax-highlighting package` [in XBPS][void-package] + +[arch-package]: https://www.archlinux.org/packages/zsh-syntax-highlighting +[AUR-package]: https://aur.archlinux.org/packages/zsh-syntax-highlighting-git +[brew-package]: https://github.com/Homebrew/homebrew-core/blob/master/Formula/zsh-syntax-highlighting.rb +[debian-package]: https://packages.debian.org/zsh-syntax-highlighting +[fedora-package]: https://apps.fedoraproject.org/packages/zsh-syntax-highlighting +[fedora-package-alt]: https://bodhi.fedoraproject.org/updates/?packages=zsh-syntax-highlighting +[freebsd-port]: http://www.freshports.org/textproc/zsh-syntax-highlighting/ +[gentoo-repository]: https://packages.gentoo.org/packages/app-shells/zsh-syntax-highlighting +[netbsd-port]: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/shells/zsh-syntax-highlighting/ +[obs-repository]: https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-syntax-highlighting&package=zsh-syntax-highlighting +[openbsd-port]: https://cvsweb.openbsd.org/ports/shells/zsh-syntax-highlighting/ +[ubuntu-package]: https://launchpad.net/ubuntu/+source/zsh-syntax-highlighting +[void-package]: https://github.com/void-linux/void-packages/tree/master/srcpkgs/zsh-syntax-highlighting + +See also [repology's cross-distro index](https://repology.org/metapackage/zsh-syntax-highlighting/versions) + + +### In your ~/.zshrc + +Simply clone this repository and source the script: + +```zsh +git clone https://github.com/zsh-users/zsh-syntax-highlighting.git +echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc +``` + + Then, enable syntax highlighting in the current interactive shell: + +```zsh +source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +``` + + If `git` is not installed, download and extract a snapshot of the latest + development tree from: + +``` +https://github.com/zsh-users/zsh-syntax-highlighting/archive/master.tar.gz +``` + + Note the `source` command must be **at the end** of `~/.zshrc`. + + +### With a plugin manager + +Note that `zsh-syntax-highlighting` must be the last plugin sourced. + +The zsh-syntax-highlighting authors recommend manual installation over the use +of a framework or plugin manager. + +This list is incomplete as there are too many +[frameworks / plugin managers][framework-list] to list them all here. + +[framework-list]: https://github.com/unixorn/awesome-zsh-plugins#frameworks + +#### [Antigen](https://github.com/zsh-users/antigen) + +Add `antigen bundle zsh-users/zsh-syntax-highlighting` as the last bundle in +your `.zshrc`. + +#### [Oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) + +1. Clone this repository in oh-my-zsh's plugins directory: + + ```zsh + git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting + ``` + +2. Activate the plugin in `~/.zshrc`: + + ```zsh + plugins=( [plugins...] zsh-syntax-highlighting) + ``` + +3. Restart zsh (such as by opening a new instance of your terminal emulator). + +#### [Prezto](https://github.com/sorin-ionescu/prezto) + +Zsh-syntax-highlighting is included with Prezto. See the +[Prezto documentation][prezto-docs] to enable and configure highlighters. + +[prezto-docs]: https://github.com/sorin-ionescu/prezto/tree/master/modules/syntax-highlighting + +#### [zgen](https://github.com/tarjoilija/zgen) + +Add `zgen load zsh-users/zsh-syntax-highlighting` to the end of your `.zshrc`. + +#### [zplug](https://github.com/zplug/zplug) + +Add `zplug "zsh-users/zsh-syntax-highlighting", defer:2` to your `.zshrc`. + +#### [zplugin](https://github.com/psprint/zplugin) + +Add `zplugin load zsh-users/zsh-syntax-highlighting` to the end of your +`.zshrc`. + + +### System-wide installation + +Any of the above methods is suitable for a single-user installation, +which requires no special privileges. If, however, you desire to install +zsh-syntax-highlighting system-wide, you may do so by running + +```zsh +make install +``` + +and directing your users to add + +```zsh +source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +``` + +to their `.zshrc`s. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/Makefile b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/Makefile new file mode 100644 index 00000000..bbc1d439 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/Makefile @@ -0,0 +1,64 @@ +NAME=zsh-syntax-highlighting + +INSTALL?=install -c +PREFIX?=/usr/local +SHARE_DIR?=$(DESTDIR)$(PREFIX)/share/$(NAME) +DOC_DIR?=$(DESTDIR)$(PREFIX)/share/doc/$(NAME) +ZSH?=zsh # zsh binary to run tests with + +all: + cd docs && \ + cp highlighters.md all.md && \ + printf '\n\nIndividual highlighters documentation\n=====================================' >> all.md && \ + for doc in highlighters/*.md; do printf '\n\n'; cat "$$doc"; done >> all.md + +install: all + $(INSTALL) -d $(SHARE_DIR) + $(INSTALL) -d $(DOC_DIR) + cp .version zsh-syntax-highlighting.zsh $(SHARE_DIR) + cp COPYING.md README.md changelog.md $(DOC_DIR) + sed -e '1s/ .*//' -e '/^\[build-status-[a-z]*\]: /d' < README.md > $(DOC_DIR)/README.md + if [ x"true" = x"`git rev-parse --is-inside-work-tree 2>/dev/null`" ]; then \ + git rev-parse HEAD; \ + else \ + cat .revision-hash; \ + fi > $(SHARE_DIR)/.revision-hash + : +# The [ -e ] check below is to because sh evaluates this with (the moral +# equivalent of) NONOMATCH in effect, and highlighters/*.zsh has no matches. + for dirname in highlighters highlighters/*/ ; do \ + $(INSTALL) -d $(SHARE_DIR)/"$$dirname"; \ + for fname in "$$dirname"/*.zsh ; do [ -e "$$fname" ] && cp "$$fname" $(SHARE_DIR)"/$$dirname"; done; \ + done + cp -R docs/* $(DOC_DIR) + +clean: + rm -f docs/all.md + +test: + @$(ZSH) -fc 'echo ZSH_PATCHLEVEL=$$ZSH_PATCHLEVEL' + @result=0; \ + for test in highlighters/*; do \ + if [ -d $$test/test-data ]; then \ + echo "Running test $${test##*/}"; \ + env -i QUIET=$$QUIET $${TERM:+"TERM=$$TERM"} $(ZSH) -f tests/test-highlighting.zsh "$${test##*/}"; \ + : $$(( result |= $$? )); \ + fi \ + done; \ + exit $$result + +quiet-test: + $(MAKE) test QUIET=y + +perf: + @result=0; \ + for test in highlighters/*; do \ + if [ -d $$test/test-data ]; then \ + echo "Running test $${test##*/}"; \ + $(ZSH) -f tests/test-perfs.zsh "$${test##*/}"; \ + : $$(( result |= $$? )); \ + fi \ + done; \ + exit $$result + +.PHONY: all install clean test perf diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/README.md new file mode 100644 index 00000000..36fbdd71 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/README.md @@ -0,0 +1,97 @@ +zsh-syntax-highlighting [![Build Status][build-status-image]][build-status] +======================= + +**[Fish shell][fish]-like syntax highlighting for [Zsh][zsh].** + +*Requirements: zsh 4.3.11+.* + +[fish]: http://www.fishshell.com/ +[zsh]: http://www.zsh.org/ + +This package provides syntax highlighting for the shell zsh. It enables +highlighting of commands whilst they are typed at a zsh prompt into an +interactive terminal. This helps in reviewing commands before running +them, particularly in catching syntax errors. + +Some examples: + +Before: [![Screenshot #1.1](images/before1-smaller.png)](images/before1.png) +
    +After:  [![Screenshot #1.2](images/after1-smaller.png)](images/after1.png) + +Before: [![Screenshot #2.1](images/before2-smaller.png)](images/before2.png) +
    +After:  [![Screenshot #2.2](images/after2-smaller.png)](images/after2.png) + +Before: [![Screenshot #3.1](images/before3-smaller.png)](images/before3.png) +
    +After:  [![Screenshot #3.2](images/after3-smaller.png)](images/after3.png) + +Before: [![Screenshot #4.1](images/before4-smaller.png)](images/before4-smaller.png) +
    +After:  [![Screenshot #4.2](images/after4-smaller.png)](images/after4-smaller.png) + + + +How to install +-------------- + +See [INSTALL.md](INSTALL.md). + + +FAQ +--- + +### Why must `zsh-syntax-highlighting.zsh` be sourced at the end of the `.zshrc` file? + +zsh-syntax-highlighting works by hooking into the Zsh Line Editor (ZLE) and +computing syntax highlighting for the command-line buffer as it stands at the +time z-sy-h's hook is invoked. + +In zsh 5.2 and older, +`zsh-syntax-highlighting.zsh` hooks into ZLE by wrapping ZLE widgets. It must +be sourced after all custom widgets have been created (i.e., after all `zle -N` +calls and after running `compinit`) in order to be able to wrap all of them. +Widgets created after z-sy-h is sourced will work, but will not update the +syntax highlighting. + +In zsh newer than 5.8 (not including 5.8 itself), +zsh-syntax-highlighting uses the `add-zle-hook-widget` facility to install +a `zle-line-pre-redraw` hook. Hooks are run in order of registration, +therefore, z-sy-h must be sourced (and register its hook) after anything else +that adds hooks that modify the command-line buffer. + +### Does syntax highlighting work during incremental history search? + +Highlighting the command line during an incremental history search (by default bound to +to Ctrl+R in zsh's emacs keymap) requires zsh 5.4 or newer. + +Under zsh versions older than 5.4, the zsh-default [underlining][zshzle-Character-Highlighting] +of the matched portion of the buffer remains available, but zsh-syntax-highlighting's +additional highlighting is unavailable. (Those versions of zsh do not provide +enough information to allow computing the highlighting correctly.) + +See issues [#288][i288] and [#415][i415] for details. + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting +[i288]: https://github.com/zsh-users/zsh-syntax-highlighting/pull/288 +[i415]: https://github.com/zsh-users/zsh-syntax-highlighting/pull/415 + +### How are new releases announced? + +There is currently no "push" announcements channel. However, the following +alternatives exist: + +- GitHub's RSS feed of releases: https://github.com/zsh-users/zsh-syntax-highlighting/releases.atom +- An anitya entry: https://release-monitoring.org/project/7552/ + + +How to tweak +------------ + +Syntax highlighting is done by pluggable highlighter scripts. See the +[documentation on highlighters](docs/highlighters.md) for details and +configuration settings. + +[build-status]: https://github.com/zsh-users/zsh-syntax-highlighting/actions +[build-status-image]: https://github.com/zsh-users/zsh-syntax-highlighting/workflows/Tests/badge.svg diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/changelog.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/changelog.md new file mode 100644 index 00000000..92302366 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/changelog.md @@ -0,0 +1,884 @@ +# Changes in HEAD + + +## Changes fixed as part of the switch to zle-line-pre-redraw + +The changes in this section were fixed by switching to a `zle-line-pre-redraw`-based +implementation. + +Note: The new implementation will only be used on future zsh releases, +numbered 5.8.0.3 and newer, due to interoperability issues with other plugins +(issues #418 and #579). The underlying zsh feature has been available since +zsh 5.2. + +Whilst under development, the new implementation was known as the +"feature/redrawhook" topic branch. + +- Fixed: Highlighting not triggered after popping a buffer from the buffer stack + (using the `push-line` widget, default binding: `M-q`) + [#40] + +- Fixed: Invoking completion when there were no matches removed highlighting + [#90, #470] + +- Fixed: Two successive deletes followed by a yank only yanked the latest + delete, rather than both of them + [#150, #151, #160; cf. #183] + +- Presumed fixed: Completing `$(xsel)` results in an error message from `xsel`, + with pre-2017 versions of `xsel`. (For 2017 vintage and newer, see the issue + for details.) + [#154] + +- Fixed: When the standard `bracketed-paste-magic` widget is in use, pastes were slow + [#295] + +- Fixed: No way to prevent a widget from being wrapped + [#324] + +- Fixed: No highlighting while cycling menu completion + [#375] + +- Fixed: Does not coexist with the `IGNORE_EOF` option + [#377] + +- Fixed: The `undefined-key` widget was wrapped + [#421] + +- Fixed: Does not coexist with the standard `surround` family of widgets + [#520] + +- Fixed: First completed filename doesn't get `path` highlighting + [#632] + + +## Other changes + +- Add issue #712 to the previous release's changelog (hereinafter). + + +# Changes in 0.8.0-alpha1-pre-redrawhook + +## Notice about an improbable-but-not-impossible forward incompatibility + +Everyone can probably skip this section. + +The `master` branch of zsh-syntax-highlighting uses a zsh feature that has not +yet appeared in a zsh release: the `memo=` feature, added to zsh in commit +zsh-5.8-172-gdd6e702ee (after zsh 5.8, before zsh 5.9). In the unlikely event +that this zsh feature should change in an incompatible way before the next +stable zsh release, set `zsh_highlight__memo_feature=0` in your .zshrc files to +disable use of the new feature. + +z-sy-h dogfoods the new, unreleased zsh feature because that feature was +added to zsh at z-sy-h's initiative. The new feature is used in the fix +to issue #418. + + +## Incompatible changes: + +- An unsuccessful completion (a ⮀ Tab press that doesn't change the + command line) no longer causes highlighting to be lost. Visual feedback can + alternatively be achieved by setting the `format` zstyle under the `warnings` + tag, for example, + + zstyle ':completion:*:warnings' format '%F{red}No matches%f' + + Refer to the [description of the `format` style in `zshcompsys(1)`] + [zshcompsys-Standard-Styles-format]. + + (#90, part of #245 (feature/redrawhook)) + +[zshcompsys-Standard-Styles]: http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Standard-Styles +[zshcompsys-Standard-Styles-format]: http://zsh.sourceforge.net/Doc/Release/Completion-System.html#index-format_002c-completion-style + + + +## Other changes: + +- Document `$ZSH_HIGHLIGHT_MAXLENGTH`. + [#698] + +- Optimize highlighting unquoted words (words that are not in single quotes, double quotes, backticks, or dollar-single-quotes) + [#730] + +- Redirection operators (e.g., `<` and `>`) are now highlighted by default + [#646] + +- Propertly terminate `noglob` scope in try/always blocks + [#577] + +- Don't error out when `KSH_ARRAYS` is set in the calling scope + [#622, #689] + +- Literal semicolons in array assignments (`foo=( bar ; baz )`) are now + highlighted as errors. + [3ca93f864fb6] + +- Command separators in array assignments (`foo=( bar | baz )`) are now + highlighted as errors. + [#651, 81267ca3130c] + +- Support parameter elision in command position (e.g., `$foo ls` where `$foo` is unset or empty) + [#667] + +- Don't consider the filename in `sudo -e /path/to/file` to be a command position + [#678] + +- Don't look up absolute directory names in $cdpath + [2cc2583f8f12, part of #669] + +- Fix `exec 2>&1;` being highlighted as an error. + [#676] + +- Fix `: $(<*)` being highlighted as globbing. + [#582] + +- Fix `cat < *` being highlighting as globbing when the `MULTIOS` option is unset. + [#583] + +- Fix `echo >&2` highlighting the `2` as a filename if a file by that name happened to exist + [#694, part of #645] + +- Fix `echo >&-` highlighting the `-` as a filename if a file by that name happened to exist + [part of #645] + +- Fix `echo >&p` highlighting the `p` as a filename if a file by that name happened to exist + [part of #645] + +- Fix wrong highlighting of unquoted parameter expansions under zsh 5.2 and older + [e165f18c758e] + +- Highlight global aliases + [#700] + +- Highlight `: =nosuchcommand' as an error (when the `EQUALS` option hasn't been unset). + [#430] + +- Highlight reserved word after assignments as errors (e.g., `foo=bar (ls;)`) + [#461] + +- Correctly highlight `[[ foo && bar || baz ]]`. + +- Highlight non-executable files in command position correctly (e.g., `% /etc/passwd`) + [#202, #669] + +- Highlight directories in command position correctly, including `AUTO_CD` support + [#669] + +- Recognize `env` as a precommand (e.g., `env FOO=bar ls`) + +- Recognize `strace` as a precommand + +- Fix an error message on stderr before every prompt when the `WARN_NESTED_VAR` zsh option is set: + `_zsh_highlight_main__precmd_hook:1: array parameter _zsh_highlight_main__command_type_cache set in enclosing scope in function _zsh_highlight_main__precmd_hook` + [#727, #731, #732, #733] + +- Fix highlighting of alias whose definitions use a simple command terminator + (such as `;`, `|`, `&&`) before a newline + [#677; had regressed in 0.7.0] + +- Highlight arithmetic expansions (e.g., `$(( 42 ))`) + [#607 #649 #704] + +- Highlight the parentheses of array assignments as reserved words (`foo=( bar )`). + The `assign` style remains supported and has precedence. + [#585] + +- Fix interoperability issue with other plugins that use highlighting. The fix + requires zsh 5.8.0.3 or newer. (zsh 5.8.0.2-dev from the `master` branch, + revision zsh-5.8-172-gdd6e702ee or newer is also fine.) + [#418, https://github.com/okapia/zsh-viexchange/issues/1] + +- Improve performance of the `brackets` highlighter. + +- Fix highlighting of pre-command redirections (e.g., the `$fn` in `<$fn cat`) + [#712] + + +# Changes in version 0.7.1 + +- Remove out-of-date information from the 0.7.0 changelog. + + +# Changes in version 0.7.0 + +This is a stable bugfix and feature release. Major new features and changes include: + +- Add `ZSH_HIGHLIGHT_DIRS_BLACKLIST` to disable "path" and "path prefix" + highlighting for specific directories + [#379] + +- Add the "regexp" highlighter, modelled after the pattern highlighter + [4e6f60063f1c] + +- When a word uses globbing, only the globbing metacharacters will be highlighted as globbing: + in `: foo*bar`, only the `*` will be blue. + [e48af357532c] + +- Highlight pasted quotes (e.g., `: foo"bar"`) + [dc1b2f6fa4bb] + +- Highlight command substitutions (`` : `ls` ``, `: $(ls)`) + [c0e64fe13178 and parents, e86f75a840e7, et al] + +- Highlight process substitutions (`: >(nl)`, `: <(pwd)`, `: =(git diff)`) + [c0e64fe13178 and parents, e86f75a840e7, et al] + +- Highlight command substitutions inside double quotes (``: "`foo`"``) + [f16e858f0c83] + +- Highlight many precommands (e.g., `nice`, `stdbuf`, `eatmydata`; + see `$precommand_options` in the source) + +- Highlight numeric globs (e.g., `echo /lib<->`) + +- Assorted improvements to aliases highlighting + (e.g., + `alias sudo_u='sudo -u'; sudo_u jrandom ls`, + `alias x=y y=z z=nosuchcommand; x`, + `alias ls='ls -l'; \ls`) + [f3410c5862fc, 57386f30aec8, #544, and many others] + +- Highlight some more syntax errors + [dea05e44e671, 298ef6a2fa30] + +- New styles: named file descriptors, `RC_QUOTES`, and unclosed quotes (e.g., `echo "foo`) + [38c794a978cd, 25ae1c01216c, 967335dfc5fd] + +- The 'brackets' highlighting no longer treats quotes specially. + [ecdda36ef56f] + + +Selected bugfixes include: + +- Highlight `sudo` correctly when it's not installed + [26a82113b08b] + +- Handle some non-default options being set in zshrc + [b07ada1255b7, a2a899b41b8, 972ad197c13d, b3f66fc8748f] + +- Fix off-by-one highlighting in vi "visual" mode (vicmd keymap) + [be3882aeb054] + +- The 'yank-pop' widget is not wrapped + [#183] + + +Known issues include: + +- A multiline alias that uses a simple command terminator (such as `;`, `|`, `&&`) + before a newline will incorrectly be highlighted as an error. See issue #677 + for examples and workarounds. + [#677] + [UPDATE: Fixed in 0.8.0] + + +# Changes in version 0.6.0 + +This is a stable release, featuring bugfixes and minor improvements. + + +## Performance improvements: + +(none) + + +## Added highlighting of: + +- The `isearch` and `suffix` [`$zle_highlight` settings][zshzle-Character-Highlighting]. + (79e4d3d12405, 15db71abd0cc, b56ee542d619; requires zsh 5.3 for `$ISEARCHMATCH_ACTIVE` / `$SUFFIX_ACTIVE` support) + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting + +- Possible history expansions in double-quoted strings. + (76ea9e1df316) + +- Mismatched `if`/`then`/`elif`/`else`/`fi`. + (73cb83270262) + + +## Fixed highlighting of: + +- A comment line followed by a non-comment line. + (#385, 9396ad5c5f9c) + +- An unquoted `$*` (expands to the positional parameters). + (237f89ad629f) + +- history-incremental-pattern-search-backward under zsh 5.3.1. + (#407, #415, 462779629a0c) + + +## API changes (for highlighter authors): + +(none) + + +## Developer-visible changes: + +- tests: Set the `ALIAS_FUNC_DEF` option for zsh 5.4 compatibility. + (9523d6d49cb3) + + +## Other changes: + +- docs: Added before/after screenshots. + (cd9ec14a65ec..b7e277106b49) + +- docs: Link Fedora package. + (3d74aa47e4a7, 5feed23962df) + +- docs: Link FreeBSD port. + (626c034c68d7) + +- docs: Link OpenSUSE Build Service packages + (#419, dea1fedc7358) + +- Prevent user-defined aliases from taking effect in z-sy-h's own code. + (#390, 2dce602727d7, 8d5afe47f774; and #392, #395, b8fa1b9dc954) + +- docs: Update zplug installation instructions. + (#399, 4f49c4a35f17) + +- Improve "unhandled ZLE widget 'foo'" error message. + (#409, be083d7f3710) + +- Fix printing of "failed loading highlighters" error message. + (#426, ad522a091429) + + +# Changes in version 0.5.0 + + +## Performance improvements: + +We thank Sebastian Gniazdowski and "m0viefreak" for significant contributions +in this area. + +- Optimize string operations in the `main` (default) highlighter. + (#372/3cb58fd7d7b9, 02229ebd6328, ef4bfe5bcc14, #372/c6b6513ac0d6, #374/15461e7d21c3) + +- Command word highlighting: Use the `zsh/parameter` module to avoid forks. + Memoize (cache) the results. + (#298, 3ce01076b521, 2f18ba64e397, 12b879caf7a6; #320, 3b67e656bff5) + +- Avoid forks in the driver and in the `root` highlighter. + (b9112aec798a, 38c8fbea2dd2) + + +## Added highlighting of: + +- `pkexec` (a precommand). + (#248, 4f3910cbbaa5) + +- Aliases that cannot be defined normally nor invoked normally (highlighted as an error). + (#263 (in part), 28932316cca6) + +- Path separators (`/`) — the default behaviour remains to highlight path separators + and path components the same way. + (#136, #260, 6cd39e7c70d3, 9a934d291e7c, f3d3aaa00cc4) + +- Assignments to individual positional arguments (`42=foo` to assign to `$42`). + (f4036a09cee3) + +- Linewise region (the `visual-line-mode` widget, bound to `V` in zsh's `vi` keymap). + (#267, a7a7f8b42280, ee07588cfd9b) + +- Command-lines recalled by `isearch` mode; requires zsh≥5.3. + (#261 (in part); #257; 4ad311ec0a68) + +- Command-lines whilst the `IGNORE_BRACES` or `IGNORE_CLOSE_BRACES` option is in effect. + (a8a6384356af, 02807f1826a5) + +- Mismatched parentheses and braces (in the `main` highlighter). + (51b9d79c3bb6, 2fabf7ca64b7, a4196eda5e6f, and others) + +- Mismatched `do`/`done` keywords. + (b2733a64da93) + +- Mismatched `foreach`/`end` keywords. + (#96, 2bb8f0703d8f) + +- In Bourne-style function definitions, when the `MULTI_FUNC_DEF` option is set + (which is the default), highlight the first word in the function body as + a command word: `f() { g "$@" }`. + (6f91850a01e1) + +- `always` blocks. + (#335, e5782e4ddfb6) + +- Command substitutions inside double quotes, `"$(echo foo)"`. + (#139 (in part), c3913e0d8ead) + +- Non-alphabetic parameters inside double quotes (`"$$"`, `"$#"`, `"$*"`, `"$@"`, `"$?"`, `"$-"`). + (4afe670f7a1b, 44ef6e38e5a7) + +- Command words from future versions of zsh (forward compatibly). + This also adds an `arg0` style that all other command word styles fall back to. + (b4537a972eed, bccc3dc26943) + +- Escaped history expansions inside double quotes: `: "\!"` + (28d7056a7a06, et seq) + + +## Fixed highlighting of: + +- Command separator tokens in syntactically-invalid positions. + (09c4114eb980) + +- Redirections with a file descriptor number at command word. + (#238 (in part), 73ee7c1f6c4a) + +- The `select` prompt, `$PS3`. + (#268, 451665cb2a8b) + +- Values of variables in `vared`. + (e500ca246286) + +- `!` as an argument (neither a history expansion nor a reserved word). + (4c23a2fd1b90) + +- "division by zero" error under the `brackets` highlighter when `$ZSH_HIGHLIGHT_STYLES` is empty. + (f73f3d53d3a6) + +- Process substitutions, `<(pwd)` and `>(wc -l)`. + (#302, 6889ff6bd2ad, bfabffbf975c, fc9c892a3f15) + +- The non-`SHORT_LOOPS` form of `repeat` loops: `repeat 42; do true; done`. + (#290, 4832f18c50a5, ef68f50c048f, 6362c757b6f7) + +- Broken symlinks (are now highlighted as files). + (#342, 95f7206a9373, 53083da8215e) + +- Lines accepted from `isearch` mode. + (#284; #257, #259, #288; 5bae6219008b, a8fe22d42251) + +- Work around upstream bug that triggered when the command word was a relative + path, that when interpreted relative to a $PATH directory denoted a command; + the effect of that upstream bug was that the relative path was cached as + a "valid external command name". + (#354, #355, 51614ca2c994, fdaeec45146b, 7d38d07255e4; + upstream fix slated to be released in 5.3 (workers/39104)) + +- After accepting a line with the cursor on a bracket, the matching bracket + of the bracket under the cursor no longer remains highlighted (with the + `brackets` highlighter). + (4c4baede519a) + +- The first word on a new line within an array assignment or initialization is no + longer considered a command position. + (8bf423d16d46) + +- Subshells that end at command position, `(A=42)`, `(true;)`. + (#231, 7fb6f9979121; #344, 4fc35362ee5a) + +- Command word after array assignment, `a=(lorem ipsum) pwd`. + (#330, 7fb6f9979121) + + +## API changes (for highlighter authors): + +- New interface `_zsh_highlight_add_highlight`. + (341a3ae1f015, c346f6eb6fb6) + +- tests: Specify the style key, not its value, in test expectations. + (a830613467af, fd061b5730bf, eaa4335c3441, among others) + +- Module author documentation improvements. + (#306 (in part), 217669270418, 0ff354b44b6e, 80148f6c8402, 364f206a547f, and others) + +- The driver no longer defines a `_zsh_highlight_${highlighter}_highlighter_cache` + variable, which is in the highlighters' namespace. + (3e59ab41b6b8, 80148f6c8402, f91a7b885e7d) + +- Rename highlighter entry points. The old names remain supported for + backwards compatibility. + (a3d5dfcbdae9, c793e0dceab1) + +- tests: Add the "NONE" expectation. + (4da9889d1545, 13018f3dd735, d37c55c788cd) + +- tests: consider a test that writes to stderr to have failed. + (#291, 1082067f9315) + + +## Developer-visible changes: + +- Add `make quiet-test`. + (9b64ad750f35) + +- test harness: Better quote replaceables in error messages. + (30d8f92df225) + +- test harness: Fix exit code for XPASS. + (bb8d325c0cbd) + +- Create [HACKING.md](HACKING.md). + (cef49752fd0e) + +- tests: Emit a description for PASS test points. + (6aa57d60aa64, f0bae44b76dd) + +- tests: Create a script that generates a test file. + (8013dc3b8db6, et seq; `tests/generate.zsh`) + + +## Other changes: + +- Under zsh≤5.2, widgets whose names start with a `_` are no longer excluded + from highlighting. + (ed33d2cb1388; reverts part of 186d80054a40 which was for #65) + +- Under zsh≤5.2, widgets implemented by a function named after the widget are + no longer excluded from highlighting. + (487b122c480d; reverts part of 776453cb5b69) + +- Under zsh≤5.2, shell-unsafe widget names can now be wrapped. + (#278, 6a634fac9fb9, et seq) + +- Correct some test expectations. + (78290e043bc5) + +- `zsh-syntax-highlighting.plugin.zsh`: Convert from symlink to plain file + for msys2 compatibility. + (#292, d4f8edc9f3ad) + +- Document installation under some plugin managers. + (e635f766bef9, 9cab566f539b) + +- Don't leak the `PATH_DIRS` option. + (7b82b88a7166) + +- Don't require the `FUNCTION_ARGZERO` option to be set. + (#338, 750aebc553f2) + +- Under zsh≤5.2, support binding incomplete/nonexistent widgets. + (9e569bb0fe04, part of #288) + +- Make the driver reentrant, fixing possibility of infinite recursion + under zsh≤5.2 under interaction with theoretical third-party code. + (#305, d711563fe1bf, 295d62ec888d, f3242cbd6aba) + +- Fix warnings when `WARN_CREATE_GLOBAL` is set prior to sourcing zsh-syntax-highlighting. + (z-sy-h already sets `WARN_CREATE_GLOBAL` internally.) + (da60234fb236) + +- Warn only once, rather than once per keypress, when a highlighter is unavailable. + (0a9b347483ae) + + +# Changes in version 0.4.1 + +## Fixes: + +- Arguments to widgets were not properly dash-escaped. Only matters for widgets + that take arguments (i.e., that are invoked as `zle ${widget} -- ${args}`). + (282c7134e8ac, reverts c808d2187a73) + + +# Changes in version 0.4.0 + + +## Added highlighting of: + +- incomplete sudo commands + (a3047a912100, 2f05620b19ae) + + ```zsh + sudo; + sudo -u; + ``` + +- command words following reserved words + (#207, #222, b397b12ac139 et seq, 6fbd2aa9579b et seq, 8b4adbd991b0) + + ```zsh + if ls; then ls; else ls; fi + repeat 10 do ls; done + ``` + + (The `ls` are now highlighted as a command.) + +- comments (when `INTERACTIVE_COMMENTS` is set) + (#163, #167, 693de99a9030) + + ```zsh + echo Hello # comment + ``` + +- closing brackets of arithmetic expansion, subshells, and blocks + (#226, a59f442d2d34, et seq) + + ```zsh + (( foo )) + ( foo ) + { foo } + ``` + +- command names enabled by the `PATH_DIRS` option + (#228, 96ee5116b182) + + ```zsh + # When ~/bin/foo/bar exists, is executable, ~/bin is in $PATH, + # and 'setopt PATH_DIRS' is in effect + foo/bar + ``` + +- parameter expansions with braces inside double quotes + (#186, 6e3720f39d84) + + ```zsh + echo "${foo}" + ``` + +- parameter expansions in command word + (#101, 4fcfb15913a2) + + ```zsh + x=/bin/ls + $x -l + ``` + +- the command separators '\|&', '&!', '&\|' + + ```zsh + view file.pdf &! ls + ``` + + +## Fixed highlighting of: + +- precommand modifiers at non-command-word position + (#209, 2c9f8c8c95fa) + + ```zsh + ls command foo + ``` + +- sudo commands with infix redirections + (#221, be006aded590, 86e924970911) + + ```zsh + sudo -u >/tmp/foo.out user ls + ``` + +- subshells; anonymous functions + (#166, #194, 0d1bfbcbfa67, 9e178f9f3948) + + ```zsh + (true) + () { true } + ``` + +- parameter assignment statements with no command + (#205, 01d7eeb3c713) + + ```zsh + A=1; + ``` + + (The semicolon used to be highlighted as a mistake) + +- cursor highlighter: Remove the cursor highlighting when accepting a line. + (#109, 4f0c293fdef0) + + +## Removed features: + +- Removed highlighting of approximate paths (`path_approx`). + (#187, 98aee7f8b9a3) + + +## Other changes: + +- main highlighter refactored to use states rather than booleans. + (2080a441ac49, et seq) + +- Fix initialization when sourcing `zsh-syntax-highlighting.zsh` via a symlink + (083c47b00707) + +- docs: Add screenshot. + (57624bb9f64b) + +- widgets wrapping: Don't add '--' when invoking widgets. + (c808d2187a73) [_reverted in 0.4.1_] + +- Refresh highlighting upon `accept-*` widgets (`accept-line` et al). + (59fbdda64c21) + +- Stop leaking match/mbegin/mend to global scope (thanks to upstream + `WARN_CREATE_GLOBAL` improvements). + (d3deffbf46a4) + +- 'make install': Permit setting `$(SHARE_DIR)` from the environment. + (e1078a8b4cf1) + +- driver: Tolerate KSH_ARRAYS being set in the calling context. + (#162, 8f19af6b319d) + +- 'make install': Install documentation fully and properly. + (#219, b1619c001390, et seq) + +- docs: Improve 'main' highlighter's documentation. + (00de155063f5, 7d4252f5f596) + +- docs: Moved to a new docs/ tree; assorted minor updates + (c575f8f37567, 5b34c23cfad5, et seq) + +- docs: Split README.md into INSTALL.md + (0b3183f6cb9a) + +- driver: Report `$ZSH_HIGHLIGHT_REVISION` when running from git + (84734ba95026) + + +## Developer-visible changes: + +- Test harness converted to [TAP](http://testanything.org/tap-specification.html) format + (d99aa58aaaef, et seq) + +- Run each test in a separate subprocess, isolating them from each other + (d99aa58aaaef, et seq) + +- Fix test failure with nonexisting $HOME + (#216, b2ac98b98150) + +- Test output is now colorized. + (4d3da30f8b72, 6fe07c096109) + +- Document `make install` + (a18a7427fd2c) + +- tests: Allow specifying the zsh binary to use. + (557bb7e0c6a0) + +- tests: Add 'make perf' target + (4513eaea71d7) + +- tests: Run each test in a sandbox directory + (c01533920245) + + +# Changes in version 0.3.0 + + +## Added highlighting of: + +- suffix aliases (requires zsh 5.1.1 or newer): + + ```zsh + alias -s png=display + foo.png + ``` + +- prefix redirections: + + ```zsh + foo.txt + ``` + +- arithmetic evaluations: + + ```zsh + (( 42 )) + ``` + +- $'' strings, including \x/\octal/\u/\U escapes + + ```zsh + : $'foo\u0040bar' + ``` + +- multiline strings: + + ```zsh + % echo "line 1 + line 2" + ``` + +- string literals that haven't been finished: + + ```zsh + % echo "Hello, world + ``` +- command words that involve tilde expansion: + + ```zsh + % ~/bin/foo + ``` + +## Fixed highlighting of: + +- quoted command words: + + ```zsh + % \ls + ``` + +- backslash escapes in "" strings: + + ```zsh + % echo "\x41" + ``` + +- noglob after command separator: + + ```zsh + % :; noglob echo * + ``` + +- glob after command separator, when the first command starts with 'noglob': + + ```zsh + % noglob true; echo * + ``` + +- the region (vi visual mode / set-mark-command) (issue #165) + +- redirection and command separators that would be highlighted as `path_approx` + + ```zsh + % echo foo;‸ + % echo <‸ + ``` + + (where `‸` represents the cursor location) + +- escaped globbing (outside quotes) + + ```zsh + % echo \* + ``` + + +## Other changes: + +- implemented compatibility with zsh's paste highlighting (issue #175) + +- `$?` propagated correctly to wrapped widgets + +- don't leak $REPLY into global scope + + +## Developer-visible changes: + +- added makefile with `install` and `test` targets + +- set `warn_create_global` internally + +- document release process + + + + +# Version 0.2.1 + +(Start of changelog.) + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_editorconfig b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_editorconfig new file mode 100644 index 00000000..cda541d5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_editorconfig @@ -0,0 +1,15 @@ +# Top-most editorconfig file + +root = true + +[*] +end_of_line = lf +tab_width = 2 +indent_size = 2 +indent_style = space + +[Makefile] +tab_width = 8 +indent_size = 8 +indent_style = tab + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_gitattributes b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_gitattributes new file mode 100644 index 00000000..715e624b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_gitattributes @@ -0,0 +1 @@ +.revision-hash export-subst diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_gitignore b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_gitignore new file mode 100644 index 00000000..18fa5eca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_gitignore @@ -0,0 +1,3 @@ +*.zwc* +.pc/ +docs/all.md diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_revision-hash b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_revision-hash new file mode 100644 index 00000000..187d177f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_revision-hash @@ -0,0 +1 @@ +5eb494852ebb99cf5c2c2bffee6b74e6f1bf38d0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_version b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_version new file mode 100644 index 00000000..9fb12109 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/dot_version @@ -0,0 +1 @@ +0.8.0-alpha2-dev diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/brackets.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/brackets.md new file mode 100644 index 00000000..8410135e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/brackets.md @@ -0,0 +1,31 @@ +zsh-syntax-highlighting / highlighters / brackets +------------------------------------------------- + +This is the `brackets` highlighter, that highlights brackets and parentheses, and +matches them. + + +### How to tweak it + +This highlighter defines the following styles: + +* `bracket-error` - unmatched brackets +* `bracket-level-N` - brackets with nest level N +* `cursor-matchingbracket` - the matching bracket, if cursor is on a bracket + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, +for example in `~/.zshrc`: + +```zsh +# To define styles for nested brackets up to level 4 +ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' +ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' +ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' +ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' +``` + +The syntax for values is the same as the syntax of "types of highlighting" of +the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` +manual page][zshzle-Character-Highlighting]. + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/cursor.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/cursor.md new file mode 100644 index 00000000..c4f22b89 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/cursor.md @@ -0,0 +1,24 @@ +zsh-syntax-highlighting / highlighters / cursor +----------------------------------------------- + +This is the `cursor` highlighter, that highlights the cursor. + + +### How to tweak it + +This highlighter defines the following styles: + +* `cursor` - the style for the current cursor position + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, +for example in `~/.zshrc`: + +```zsh +ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' +``` + +The syntax for values is the same as the syntax of "types of highlighting" of +the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` +manual page][zshzle-Character-Highlighting]. + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/line.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/line.md new file mode 100644 index 00000000..1081fe1e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/line.md @@ -0,0 +1,24 @@ +zsh-syntax-highlighting / highlighters / line +--------------------------------------------- + +This is the `line` highlighter, that highlights the whole line. + + +### How to tweak it + +This highlighter defines the following styles: + +* `line` - the style for the whole line + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, +for example in `~/.zshrc`: + +```zsh +ZSH_HIGHLIGHT_STYLES[line]='bold' +``` + +The syntax for values is the same as the syntax of "types of highlighting" of +the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` +manual page][zshzle-Character-Highlighting]. + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/main.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/main.md new file mode 100644 index 00000000..cc6186b4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/main.md @@ -0,0 +1,121 @@ +zsh-syntax-highlighting / highlighters / main +--------------------------------------------- + +This is the `main` highlighter, that highlights: + +* Commands +* Options +* Arguments +* Paths +* Strings + +This highlighter is active by default. + + +### How to tweak it + +This highlighter defines the following styles: + +* `unknown-token` - unknown tokens / errors +* `reserved-word` - shell reserved words (`if`, `for`) +* `alias` - aliases +* `suffix-alias` - suffix aliases (requires zsh 5.1.1 or newer) +* `global-alias` - global aliases +* `builtin` - shell builtin commands (`shift`, `pwd`, `zstyle`) +* `function` - function names +* `command` - command names +* `precommand` - precommand modifiers (e.g., `noglob`, `builtin`) +* `commandseparator` - command separation tokens (`;`, `&&`) +* `hashed-command` - hashed commands +* `autodirectory` - a directory name in command position when the `AUTO_CD` option is set +* `path` - existing filenames +* `path_pathseparator` - path separators in filenames (`/`); if unset, `path` is used (default) +* `path_prefix` - prefixes of existing filenames +* `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default) +* `globbing` - globbing expressions (`*.txt`) +* `history-expansion` - history expansion expressions (`!foo` and `^foo^bar`) +* `command-substitution` - command substitutions (`$(echo foo)`) +* `command-substitution-unquoted` - an unquoted command substitution (`$(echo foo)`) +* `command-substitution-quoted` - a quoted command substitution (`"$(echo foo)"`) +* `command-substitution-delimiter` - command substitution delimiters (`$(` and `)`) +* `command-substitution-delimiter-unquoted` - an unquoted command substitution delimiters (`$(` and `)`) +* `command-substitution-delimiter-quoted` - a quoted command substitution delimiters (`"$(` and `)"`) +* `process-substitution` - process substitutions (`<(echo foo)`) +* `process-substitution-delimiter` - process substitution delimiters (`<(` and `)`) +* `arithmetic-expansion` - arithmetic expansion `$(( 42 ))`) +* `single-hyphen-option` - single-hyphen options (`-o`) +* `double-hyphen-option` - double-hyphen options (`--option`) +* `back-quoted-argument` - backtick command substitution (`` `foo` ``) +* `back-quoted-argument-unclosed` - unclosed backtick command substitution (`` `foo ``) +* `back-quoted-argument-delimiter` - backtick command substitution delimiters (`` ` ``) +* `single-quoted-argument` - single-quoted arguments (`` 'foo' ``) +* `single-quoted-argument-unclosed` - unclosed single-quoted arguments (`` 'foo ``) +* `double-quoted-argument` - double-quoted arguments (`` "foo" ``) +* `double-quoted-argument-unclosed` - unclosed double-quoted arguments (`` "foo ``) +* `dollar-quoted-argument` - dollar-quoted arguments (`` $'foo' ``) +* `dollar-quoted-argument-unclosed` - unclosed dollar-quoted arguments (`` $'foo ``) +* `rc-quote` - two single quotes inside single quotes when the `RC_QUOTES` option is set (`` 'foo''bar' ``) +* `dollar-double-quoted-argument` - parameter expansion inside double quotes (`$foo` inside `""`) +* `back-double-quoted-argument` - backslash escape sequences inside double-quoted arguments (`\"` in `"foo\"bar"`) +* `back-dollar-quoted-argument` - backslash escape sequences inside dollar-quoted arguments (`\x` in `$'\x48'`) +* `assign` - parameter assignments (`x=foo` and `x=( )`) +* `redirection` - redirection operators (`<`, `>`, etc) +* `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`) +* `comment` - elided parameters in command position (`$x ls` when `$x` is unset or empty) +* `named-fd` - named file descriptor (the `fd` in `echo foo {fd}>&2`) +* `numeric-fd` - numeric file descriptor (the `2` in `echo foo {fd}>&2`) +* `arg0` - a command word other than one of those enumerated above (other than a command, precommand, alias, function, or shell builtin command). +* `default` - everything else + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, +for example in `~/.zshrc`: + +```zsh +# Declare the variable +typeset -A ZSH_HIGHLIGHT_STYLES + +# To differentiate aliases from other command types +ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold' + +# To have paths colored instead of underlined +ZSH_HIGHLIGHT_STYLES[path]='fg=cyan' + +# To disable highlighting of globbing expressions +ZSH_HIGHLIGHT_STYLES[globbing]='none' +``` + +The syntax for values is the same as the syntax of "types of highlighting" of +the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` +manual page][zshzle-Character-Highlighting]. + +#### Parameters + +To avoid partial path lookups on a path, add the path to the `ZSH_HIGHLIGHT_DIRS_BLACKLIST` array. + +```zsh +ZSH_HIGHLIGHT_DIRS_BLACKLIST+=(/mnt/slow_share) +``` + +### Useless trivia + +#### Forward compatibility. + +zsh-syntax-highlighting attempts to be forward-compatible with zsh. +Specifically, we attempt to facilitate highlighting _command word_ types that +had not yet been invented when this version of zsh-syntax-highlighting was +released. + +A _command word_ is something like a function name, external command name, et +cetera. (See +[Simple Commands & Pipelines in `zshmisc(1)`][zshmisc-Simple-Commands-And-Pipelines] +for a formal definition.) + +If a new _kind_ of command word is ever added to zsh — something conceptually +different than "function" and "alias" and "external command" — then command words +of that (new) kind will be highlighted by the style `arg0_$kind`, +where `$kind` is the output of `type -w` on the new kind of command word. If that +style is not defined, then the style `arg0` will be used instead. + +[zshmisc-Simple-Commands-And-Pipelines]: http://zsh.sourceforge.net/Doc/Release/Shell-Grammar.html#Simple-Commands-_0026-Pipelines + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/pattern.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/pattern.md new file mode 100644 index 00000000..e67d79f3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/pattern.md @@ -0,0 +1,24 @@ +zsh-syntax-highlighting / highlighters / pattern +------------------------------------------------ + +This is the `pattern` highlighter, that highlights user-defined patterns. + + +### How to tweak it + +To use this highlighter, associate patterns with styles in the +`ZSH_HIGHLIGHT_PATTERNS` associative array, for example in `~/.zshrc`: + +```zsh +# Declare the variable +typeset -A ZSH_HIGHLIGHT_PATTERNS + +# To have commands starting with `rm -rf` in red: +ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') +``` + +The syntax for values is the same as the syntax of "types of highlighting" of +the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` +manual page][zshzle-Character-Highlighting]. + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/regexp.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/regexp.md new file mode 100644 index 00000000..5c8a89eb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/regexp.md @@ -0,0 +1,30 @@ +zsh-syntax-highlighting / highlighters / regexp +------------------------------------------------ + +This is the `regexp` highlighter, that highlights user-defined regular +expressions. It's similar to the `pattern` highlighter, but allows more complex +patterns. + +### How to tweak it + +To use this highlighter, associate regular expressions with styles in the +`ZSH_HIGHLIGHT_REGEXP` associative array, for example in `~/.zshrc`: + +```zsh +typeset -A ZSH_HIGHLIGHT_REGEXP +ZSH_HIGHLIGHT_REGEXP+=('\bsudo\b' fg=123,bold) +``` + +This will highlight "sudo" only as a complete word, i.e., "sudo cmd", but not +"sudoedit" + +The syntax for values is the same as the syntax of "types of highlighting" of +the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` +manual page][zshzle-Character-Highlighting]. + +See also: [regular expressions tutorial][perlretut], zsh regexp operator `=~` +in [the `zshmisc(1)` manual page][zshmisc-Conditional-Expressions] + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting +[perlretut]: http://perldoc.perl.org/perlretut.html +[zshmisc-Conditional-Expressions]: http://zsh.sourceforge.net/Doc/Release/Conditional-Expressions.html#Conditional-Expressions diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/root.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/root.md new file mode 100644 index 00000000..d120d20c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/exact_highlighters/root.md @@ -0,0 +1,25 @@ +zsh-syntax-highlighting / highlighters / root +--------------------------------------------- + +This is the `root` highlighter, that highlights the whole line if the current +user is root. + + +### How to tweak it + +This highlighter defines the following styles: + +* `root` - the style for the whole line if the current user is root. + +To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, +for example in `~/.zshrc`: + +```zsh +ZSH_HIGHLIGHT_STYLES[root]='bg=red' +``` + +The syntax for values is the same as the syntax of "types of highlighting" of +the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` +manual page][zshzle-Character-Highlighting]. + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/highlighters.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/highlighters.md new file mode 100644 index 00000000..bb72e547 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_docs/highlighters.md @@ -0,0 +1,132 @@ +zsh-syntax-highlighting / highlighters +====================================== + +Syntax highlighting is done by pluggable highlighters: + +* `main` - the base highlighter, and the only one [active by default][1]. +* `brackets` - [matches brackets][2] and parenthesis. +* `pattern` - matches [user-defined patterns][3]. +* `cursor` - matches [the cursor position][4]. +* `root` - highlights the whole command line [if the current user is root][5]. +* `line` - applied to [the whole command line][6]. + +[1]: highlighters/main.md +[2]: highlighters/brackets.md +[3]: highlighters/pattern.md +[4]: highlighters/cursor.md +[5]: highlighters/root.md +[6]: highlighters/line.md + + +Highlighter-independent settings +-------------------------------- + +By default, all command lines are highlighted. However, it is possible to +prevent command lines longer than a fixed number of characters from being +highlighted by setting the variable `${ZSH_HIGHLIGHT_MAXLENGTH}` to the maximum +length (in characters) of command lines to be highlighter. This is useful when +editing very long comand lines (for example, with the [`fned`][fned] utility +function). Example: + +[fned]: http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#index-zed + +```zsh +ZSH_HIGHLIGHT_MAXLENGTH=512 +``` + + +How to activate highlighters +---------------------------- + +To activate an highlighter, add it to the `ZSH_HIGHLIGHT_HIGHLIGHTERS` array in +`~/.zshrc`, for example: + +```zsh +ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor) +``` + +By default, `$ZSH_HIGHLIGHT_HIGHLIGHTERS` is unset and only the `main` +highlighter is active. + + +How to tweak highlighters +------------------------- + +Highlighters look up styles from the `ZSH_HIGHLIGHT_STYLES` associative array. +Navigate into the [individual highlighters' documentation](highlighters/) to +see what styles (keys) each highlighter defines; the syntax for values is the +same as the syntax of "types of highlighting" of the zsh builtin +`$zle_highlight` array, which is documented in [the `zshzle(1)` manual +page][zshzle-Character-Highlighting]. + +[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting + +Some highlighters support additional configuration parameters; see each +highlighter's documentation for details and examples. + + +How to implement a new highlighter +---------------------------------- + +To create your own `acme` highlighter: + +* Create your script at + `highlighters/acme/acme-highlighter.zsh`. + +* Implement the `_zsh_highlight_highlighter_acme_predicate` function. + This function must return 0 when the highlighter needs to be called and + non-zero otherwise, for example: + + ```zsh + _zsh_highlight_highlighter_acme_predicate() { + # Call this highlighter in SVN working copies + [[ -d .svn ]] + } + ``` + +* Implement the `_zsh_highlight_highlighter_acme_paint` function. + This function does the actual syntax highlighting, by calling + `_zsh_highlight_add_highlight` with the start and end of the region to + be highlighted and the `ZSH_HIGHLIGHT_STYLES` key to use. Define the default + style for that key in the highlighter script outside of any function with + `: ${ZSH_HIGHLIGHT_STYLES[key]:=value}`, being sure to prefix + the key with your highlighter name and a colon. For example: + + ```zsh + : ${ZSH_HIGHLIGHT_STYLES[acme:aurora]:=fg=green} + + _zsh_highlight_highlighter_acme_paint() { + # Colorize the whole buffer with the 'aurora' style + _zsh_highlight_add_highlight 0 $#BUFFER acme:aurora + } + ``` + + If you need to test which options the user has set, test `zsyh_user_options` + with a sensible default if the option is not present in supported zsh + versions. For example: + + ```zsh + [[ ${zsyh_user_options[ignoreclosebraces]:-off} == on ]] + ``` + + The option name must be all lowercase with no underscores and not an alias. + +* Name your own functions and global variables `_zsh_highlight_acme_*`. + + - In zsh-syntax-highlighting 0.4.0 and earlier, the entrypoints + `_zsh_highlight_highlighter_acme_predicate` and + `_zsh_highlight_highlighter_acme_paint` + were named + `_zsh_highlight_acme_highlighter_predicate` and + `_zsh_highlight_highlighter_acme_paint` respectively. + + These names are still supported for backwards compatibility; + however, support for them will be removed in a future major or minor release (v0.x.0 or v1.0.0). + +* Activate your highlighter in `~/.zshrc`: + + ```zsh + ZSH_HIGHLIGHT_HIGHLIGHTERS+=(acme) + ``` + +* [Write tests](../tests/README.md). diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/FETCH_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/FETCH_HEAD new file mode 100644 index 00000000..6a5b1b7e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/FETCH_HEAD @@ -0,0 +1,6 @@ +5eb494852ebb99cf5c2c2bffee6b74e6f1bf38d0 branch 'master' of ssh://github.com/zsh-users/zsh-syntax-highlighting +7ac72a57bc7e5cc0ad84ef005d75c39d101b32a0 not-for-merge branch '0.4.x' of ssh://github.com/zsh-users/zsh-syntax-highlighting +eb67c0b84f56f33cd34e3e40fa88c346d20211bc not-for-merge branch '0.5.x' of ssh://github.com/zsh-users/zsh-syntax-highlighting +ffed6e16547596f554b69f33d16b228649dfc142 not-for-merge branch 'feature/redrawhook' of ssh://github.com/zsh-users/zsh-syntax-highlighting +023c994cdf00009c3fd7ba99e1900f0c450a6ebb not-for-merge branch 'i652-v1' of ssh://github.com/zsh-users/zsh-syntax-highlighting +1089e3a40886155c14bd9540e3de5f29a63776a2 not-for-merge branch 'themes' of ssh://github.com/zsh-users/zsh-syntax-highlighting diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/ORIG_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/ORIG_HEAD new file mode 100644 index 00000000..187d177f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/ORIG_HEAD @@ -0,0 +1 @@ +5eb494852ebb99cf5c2c2bffee6b74e6f1bf38d0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/config b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/config new file mode 100644 index 00000000..f4941982 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/config @@ -0,0 +1,11 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + url = https://github.com/zsh-users/zsh-syntax-highlighting.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/description b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_branches/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_branches/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_applypatch-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_applypatch-msg.sample new file mode 100644 index 00000000..a5d7b84a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_commit-msg.sample new file mode 100644 index 00000000..b58d1184 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample new file mode 100644 index 00000000..14ed0aa4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample @@ -0,0 +1,173 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + } + my $query = <<" END"; + ["query", "$git_work_tree", { + "since": $last_update_token, + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_post-update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_post-update.sample new file mode 100644 index 00000000..ec17ec19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-applypatch.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-applypatch.sample new file mode 100644 index 00000000..4142082b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-commit.sample new file mode 100644 index 00000000..e144712c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample new file mode 100644 index 00000000..399eab19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-push.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-push.sample new file mode 100644 index 00000000..4ce688d3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-rebase.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-rebase.sample new file mode 100644 index 00000000..6cbef5c3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-receive.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-receive.sample new file mode 100644 index 00000000..a1fd29ec --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample new file mode 100644 index 00000000..10fa14c5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_update.sample new file mode 100644 index 00000000..c4d426bc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_hooks/executable_update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_info/exclude b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_info/exclude new file mode 100644 index 00000000..a5196d1b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/HEAD new file mode 100644 index 00000000..5f355067 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/HEAD @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 1715f39a4680a27abd57fc30c98a95fdf191be45 joelazar 1606125410 +0100 clone: from https://github.com/zsh-users/zsh-syntax-highlighting.git +1715f39a4680a27abd57fc30c98a95fdf191be45 5eb494852ebb99cf5c2c2bffee6b74e6f1bf38d0 joelazar 1610064438 +0100 pull --ff-only: Fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_heads/master new file mode 100644 index 00000000..5f355067 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_heads/master @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 1715f39a4680a27abd57fc30c98a95fdf191be45 joelazar 1606125410 +0100 clone: from https://github.com/zsh-users/zsh-syntax-highlighting.git +1715f39a4680a27abd57fc30c98a95fdf191be45 5eb494852ebb99cf5c2c2bffee6b74e6f1bf38d0 joelazar 1610064438 +0100 pull --ff-only: Fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD new file mode 100644 index 00000000..c07119a1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 1715f39a4680a27abd57fc30c98a95fdf191be45 joelazar 1606125410 +0100 clone: from https://github.com/zsh-users/zsh-syntax-highlighting.git diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master new file mode 100644 index 00000000..fa173b4d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master @@ -0,0 +1 @@ +1715f39a4680a27abd57fc30c98a95fdf191be45 5eb494852ebb99cf5c2c2bffee6b74e6f1bf38d0 joelazar 1610064438 +0100 pull --ff-only: fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_04/6cb03a120ca3376f076d746009bf9b7f052969 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_04/6cb03a120ca3376f076d746009bf9b7f052969 new file mode 100644 index 0000000000000000000000000000000000000000..833da5b13c4012ced7d0524e660db0ac56b73a7a GIT binary patch literal 266 zcmbxoeZ%iR&GRMuFI6D1V!X2cm??#xEJ;}+eu8#3LaNSFJ@65TJ zrLo4%+def)3ns{iGy|k0%+|~!2hnk*xuve(xvbteVbARH}IE6A!z1r<=ccotJO6=Szv+%+>k)!cq ZZzoiJkK1$ldiANj7aadE1#YU^2LROKdiwwX literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_07/5f22131987196d9d7ccf3987b9c9cdd219ad2c b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_07/5f22131987196d9d7ccf3987b9c9cdd219ad2c new file mode 100644 index 0000000000000000000000000000000000000000..741055a5e99175c26870a69eb63e01730cea8b9f GIT binary patch literal 572 zcmbh%-byTJ_&#*Lnd9llHd*;4y@Ge$=bhe|wnRy0 zlH&0RUYiUq6@2$oxfAsGdrOGt=HQ3gT)!I@eHO|v^6%4J`uFVJ6&VY<7v>*zs1jKv zHRsP2)jp0rGxycIoS!6YvyOe)zj-Gr-41P9%=FK-=u=bCgPn!T7Prm0QN66xK=<;I zx--v~ZvS7f$$6XE>egjnZ~n}3p1m|Kmn&-hIX&^&OC#s&hyQe)HeY&g-KMD??)%(l zKK)&HsV(8wzt3MpYCj#0(%dNd>t5~GoNnf#`uE57vH9%(J7J?~`K~1flebL0v7zPy o$JG8(KG~bkkEEn{JUuS7Z28JroAcK;mhaek*Y_V&W1{y2087m$x&QzG literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_0b/41e46415d476172ff493ebcbd8fd59e29291c1 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_0b/41e46415d476172ff493ebcbd8fd59e29291c1 new file mode 100644 index 0000000000000000000000000000000000000000..60bb767ef0f93357cd11bf6c5d3a79f4d16eca98 GIT binary patch literal 53 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_4e/a3f344ca0e985a05fbc7f01d92c3f7da79f5b4 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_4e/a3f344ca0e985a05fbc7f01d92c3f7da79f5b4 new file mode 100644 index 0000000000000000000000000000000000000000..008938fc3fd843030eddf22d80c86adb35da7790 GIT binary patch literal 21649 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 A=l}o! literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_63/ab8d4f73b6fcef48aff90bc261f4f40b8124c0 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_63/ab8d4f73b6fcef48aff90bc261f4f40b8124c0 new file mode 100644 index 0000000000000000000000000000000000000000..8f6bcc7a096e6c0be1e034072b7d581b400c9512 GIT binary patch literal 649 zcmbTI?!w)Zzz-e}RR==|9IedfMC+4Sz+ z>o)$d`M!3RY7Nt}O-nQcSA?uLGH*ZlJ}@$&qWtTj^X=c}%s%qLA@Xa+ZQmK2HeFGg zP|5SzT&qZIMoo8W)vdoPEbJVoDOvwIx z;r%z_)8Cw8_7z(E?&%;E$smL(+ zo~z9BuR`BEwcG!0_I-5gV~hB!Ig75$xpL%D$b{so{cmi3d{SS2-8A(1mQA-ctz-Ll z+;Hk)RGTs>iLLl=!DD^zT=lTn0#AdY3%67!e!3}<=b6;1cPDjb<;yBo z%cU=8R#rJ=w)wA%%wKn}n`8IuJzI}ieekZhcq{fGOG)#V*hjXzPG&y(Xw9xy8m8f~ QdXDerhu+K#F?X~x0VP~cI{*Lx literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_75/c0eb0717aa9e2f5668212155398867032df74e b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_75/c0eb0717aa9e2f5668212155398867032df74e new file mode 100644 index 00000000..c1856742 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_75/c0eb0717aa9e2f5668212155398867032df74e @@ -0,0 +1 @@ +x��MN�0 �Y��X���4iB�ر��ɳi�&}jnO�,��f4�/o��&꛾3���泓`����f����Z�8L�6.���έ:�Z�3Y�`���FxhVY9k+1uG>S})-yMMxcvYH$V JgWpl1WdKqr7w7;0 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_7c/a32afa365f7aca6d3afb533e99b047b795346d b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_7c/a32afa365f7aca6d3afb533e99b047b795346d new file mode 100644 index 0000000000000000000000000000000000000000..f9b28dff788255253c698173ed6b444018b5834d GIT binary patch literal 646 zcmb)&%@lp64&Huvg((~s(eg1(f zS}67H@-^JSp;Mx!Mb4QyfBEc*5pxbsSom@Aca!+zeVdQQUXQ4m_dD#YkR4-i z@0EVl`{&Kd8&-WPDEZd5>ePOVuLr7LF1q>WeC17TE{k_2p}S5xg;xGzZMXRKqv6b_ z8|yxq78JQ;<`n(Ct+(y3n)-6<*p^kFe9!p#o<8H5dZYG3*V2sM3r)uN_Wif_wD*_hs73n8Wdf)r8@D`O^Gb8(89L7!qhm=q*lERt4Ug4xd^bPz LW@gxWM8g9BMU_W6 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_82/21926855ae446b20f971a23fe592e18d0c2c64 b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_82/21926855ae446b20f971a23fe592e18d0c2c64 new file mode 100644 index 0000000000000000000000000000000000000000..674560b239e94e72367c5b8642fd9dcaf391b21d GIT binary patch literal 605 zcmb@XBiaNu{9l5&26!kft4ig@?KYs8ixY8`k?psjJO56wG-mpt zFumoowx8ly{iSksTmXMXO$$r6x?|guXZlaSy_w*>WAi?Cw-0ZRPe1Lp{CIfkTC1f_ z;!7SLOE|h@@{5;0mWRhrI99+GcV!EsT)v^7ecUhn7{#AA@ zd=ar{R$`AP$rGa$E%RO$ XT!{NWaq8sgjn3UE-=rrUOZf@_b7(O# literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_ad/2b70a12f824e7cbcdc8c898ded30e3f95ce5bc b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_ad/2b70a12f824e7cbcdc8c898ded30e3f95ce5bc new file mode 100644 index 0000000000000000000000000000000000000000..8285a950a79add65f0b9dcd87539b41c4b51031d GIT binary patch literal 648 zcmbTI?!w)Zzz-e}RR==|9IedfMC+4Sz+ z>o)$d`M!3RY7Nt}O-nQcSA?uLGH*ZlJ}@$&qWtTj^X=c}%s%qLA@Xa+ZQmK2HeFGg zP|5SzT&qZIMoo8W)vdoPEbJVoDOvwIx z;r%z_)8Cw8_7z(E?&=+rxO3?Ox{su^RU%wxrV8_=|&6DCo}HpTl4SxbMj@W?^VmSZ^};jU02rI zCXn2~xpc{lgE97Zew+@v-5Dw#Bh(|arOb0ljal2QpwKxBqhn@Cii?{IwhT{s_fwDGN7XysMBqy`n#_Xja9abB*3}MY%3% PrC-kZafud4#1)wPEi_XW?Zkr80EoLRY&XZCuDooeg_zpmWUzt$DE*&!ln*LSy$lDwoe zxx>HLzS{X`v-MBEpLNmMB7#T%9kY5R<+4j*;}Vsv8vTtw55JfEzU5yHj8wLia;xk7YaOyH;M z7Y-aabHqi_+|bzHT-n%GnZ3h1sQb&RE@O$9*~vQLxuHGp6F1DU_Eq$I_{>CKO?bmh r)s;t8cWHL2cJjFMi^}{G-K@6pe&#xn>7V|)N7v=)FfpioHmCsr7i%`l literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_info/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_info/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_pack/pack-86f86ac27a4a675dc5ab2f31321553db91fd9d8e.idx.REMOVED.git-id b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_pack/pack-86f86ac27a4a675dc5ab2f31321553db91fd9d8e.idx.REMOVED.git-id new file mode 100644 index 00000000..329da03d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_pack/pack-86f86ac27a4a675dc5ab2f31321553db91fd9d8e.idx.REMOVED.git-id @@ -0,0 +1 @@ +9f8aa38963ce7cee18ed1280d73e42659946adfa \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_pack/pack-86f86ac27a4a675dc5ab2f31321553db91fd9d8e.pack.REMOVED.git-id b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_pack/pack-86f86ac27a4a675dc5ab2f31321553db91fd9d8e.pack.REMOVED.git-id new file mode 100644 index 00000000..1ba82f6f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_objects/exact_pack/pack-86f86ac27a4a675dc5ab2f31321553db91fd9d8e.pack.REMOVED.git-id @@ -0,0 +1 @@ +531fbb2ffa4a61631af4efcfb9e41ccd19dadba6 \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_heads/master new file mode 100644 index 00000000..187d177f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_heads/master @@ -0,0 +1 @@ +5eb494852ebb99cf5c2c2bffee6b74e6f1bf38d0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD new file mode 100644 index 00000000..6efe28ff --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD @@ -0,0 +1 @@ +ref: refs/remotes/origin/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_remotes/exact_origin/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_remotes/exact_origin/master new file mode 100644 index 00000000..187d177f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_remotes/exact_origin/master @@ -0,0 +1 @@ +5eb494852ebb99cf5c2c2bffee6b74e6f1bf38d0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_tags/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/exact_refs/exact_tags/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/index b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/index new file mode 100644 index 0000000000000000000000000000000000000000..5c5fb0ac82b5cfe49c861633a21feb631a5f3fe7 GIT binary patch literal 39096 zcmZ?q402{*U|?ckV2p_0-JWEq)PEI5Gcf#PVmKos!obkDgn@zi1p@=~O$G*rt!I}y zUR|@=>$vgtr9$jmPY2XYh-_it)k{suEXglQ&d*EBOlJTAm^m;SYMum|c`}7@N!|vl zOT={dt&z^3^zY64-b{H0KE3qJlEjjdqRgbylGI|bdEXbAsjuGmHy%nu%(JRQHIMaj zlj5X|&~+}^3O@@M**~51u$MetCXTc3Mt;d9i*;YH^8PWo{10Y!HUI z6GlVKmytv@pFu+6SKKN86Gt1LpXKN93R@Co?We5Ezy&ftGd(ZAC>3ND2*b>Q(NOcG z(9Gk>(D>1Nny+KW+2XEiEI!YDt7ZwGVBpg$N-fJQ&dkr#%}6ZHz+;{ant6irH!5-# zn0$+6dfNS{I6gs^BRhwUfkUq>wFqP!0|U%GFdFJESyXe_I8L2D{f=kr65Ic(dyBo) zk0syFHg{m)a`q31^z?Jr%S{2f34~$hz-Xv>a;WBU#php~dSJbD(QN+byzCVP9Cw;3 z-DDZKJRF_9i84Q6;fbNG&${k~h+ zdFd+$?~BsrC+~H>H5?b_W8e&Ob#(D{1vv{GPN6xwVKmenO;mHDtS1>Lr-`na{a$OI zXPQptQ|*;CWvvW6$r*`x>8UyS=^&#(!4HW~bo0*fEk`v^@W$?g?GJA}RUF#rheU=@~hh=@})dMa6{7U5RQgOG%4>aNOoe_Ll|caXwoVFfC$b zR7xR(EQY!INkxgt*{LOP3t;|-(co}6$F~aAe5PMVK52Jexo&=X&wuIk&EhjoO*^Qu znL!%U{N&Q2;`}1G^KpgCYBcko2sHkadt@2H{o7}P!e`GT=DLoz6B#5i&CkiqO9hz@ zb1#gBx_cd}xneKQB(`ml{lWEvWoGE}iv@CACp)j7#%6AAVrCv5bJwGq%WVIww(>LY z&yNMBT6y8jEibop-kqq%AcN`Ng2a-N)FQCa_|nM+RP$LL$8>eR=IlOKw|Zix{LGya zbvKS%G+_(xqSW-%iUN?!!N%hX?~SPDGs|C8xWqGw?Zt_{)U(A`A6Q;9;(Ef1EnJH7 z^GiUc!@?OxL&JMBs=16NEfem3G2R-rq~YG4NeZ@}llNuGtY8pBPTKm2OvnH&2Ql-_ zRtAOz3`q5za_02C373~`>|mQ%w@_@sKJkS)jj{~#DCWYFHi`u>_rhqXySJgbTQFpg zMgQ#|Pvjm59+iLPbncwjnx)I`Fz8`7A7+s*lC)kGQvHDGpB{TW;Mo^w|ElAaIV)t#(V4dRyiwUNPqko~E-1tpcb#U+(Fsl^amVfMgi zsC~Op?c@CT^!(WmCP7zpvSw)LODXI;@#MJsHU^ZU7hAaJ{xnBltz)jp2X zF-JRo?cKn&R^?GhsPmsi{S~?$%?uWV{Fj?q431;ng2a;4ypoL6Vgml$i)QaO&ks!d z3|pkPX`h+oamW6h8pD*&UkUp&FEz19x3Dz71ZEvBf9^xIkJCYM5&z~>9^cBIZ}r%E zC)OvNLHxcggBc-z=A{;wq^9T=Bo?9i5?U@`hVOn-PEF@{31x|!D-(CH2WkP-?4nsJZkZujVmm2Zqtfa?Ny(N z@FzG(LHt2&iP#%j%*R!5Ul+8#+GKHub>j^af$g}D{;*OcXc-;Tb=>=A|1DVFeW-``avaCpw0hFamt z6(xVs`~hmhVfq8qPrWz$8o0l3Z}v5)`Dal4!N_~jZ}DfBQ+zX`Sbrb?AUo;s_gj@; zx1jk0Y(9v<>5tuN9bkX#R_lP;a}C8F1`hf22eslm4WAoJO}c2=xTrX7!-iR(8EjC( z3uFaSou8OgT##6jp_`efo1CAUo0ylPTaaIzS(2HbX9!N(pyU84r!nonj%L4p$G?P= z_d<8pepJh@w)bs!UijhPIR;yD?N5R`0OoHP4fX#GH2akUj4vH2u(bRj&d$fY?Pkks zR$i$|WcweIwek7?CYt@#j&X+RcNcVAV+#8FuE3|;t>pf_)nwam4EH{+@V|v-e>Y$1 z$*xnZhb?_G&gV9LmM@$6$@>i1;crYZ{BNV#uQ_jW^v9N9hV6S=7W1*RJe*sY`O<`J z|C{~a{@)t_i=T(F{kQ-s1)yY1f&Cpw9@WO|crzbQfc@1okz$;Bfe)2I21`-7sg zt;xRn#7+8r(#;Hpc+-DQW@52!VsUY1dR}g7UI`@A!O}U5hNky>sP=KFSN+(2c9Y!C z#|xU~%{1IwJ@>GvP4 z-qmF(=8FzIu*&|qAFVx)UcP|+2P;~NOOuLAGD}K9#S4=4xa@y`W`D-6=kN0i#h6pl zI)awTcblbM@AxFD}ZnNwe2r`HMp4pO-FupMG{jfOsnj z_Q6XKSh&JyNci%Lq1hK6b^XA~v*9ssn0VQ10u0x$2-{Q5!hl>M6zk*iUqMc41w2S$ z_P}VUed1{Lc?8FwIVrhw3wPeBMoXogy5~N8N#-CX{eXK&aND5uIc9jGjRSMYsX0CL zKUeiP%ca@6^aD?9xOZODOtk(OR{y0I9 zl)Pl8x;<^Za3=RIN%lcw5EhOw8XBHxgx69IwffBJ*?pg>T!ZC z0@rRh;}31znL|wTf!8^|CpTxl?|N->?~mtX&ed7+#H1IHebAr;+X(X)jE4FTZG4*J zVypl$e`Zk_zi+!u$oJq5eY~2j_UBD{p$NbLQXEH?Fo{v58)8D3Dm~#o$QT ze+BRW)y*#e72>*yMd_tz^%iD1pop4oId11BiI3D1j&X$d?`Og&nZnvz+Rnp^_25#}!# z4fUTIntciK*QB`Z4y3LYODUSB5XSiDa@w&pV*FQ>T3Vb6tz$q1704bVg$Kbf8fu?9 zntjRUs`5LJO%bt^+ihrjJ*%IG_2-+LMB4{Rx*+So^%@rYG|=pei!BUT*gbX0yGk~l zd-oepsqt)nGmU8bAW0RUeQ5Jk9G|MLGxrpfe6Xq&+cPQi_oL*Fha27zZ673Q;MVG%5eOqmI z^^{lVfz8C!qs6H?X|S{j@*r#+07gU7i<2;#ea3&Y9@yJke$SP=WjMuT)!Q&O)tBbP z)T1E#kdh0o^rC}ipT2=5uT$VO!N=d;{E5wLO04ELuplZwl;rECWWp*JXnlqyJay6R zGfa9DBz$*KoPP9Y9|tMjY17hWZ^jdo-y!xH!aJU@d{+t<+f?(wyb+lSN-ok{nP z7X81(@DDNez=}+m`7j!4j|r+hoH29Lf6MZ$y}_QW5#gi4%rT#@&G`_65#DgigZ6NA z(@OJ_K}{=oWZ}+trl|IE=yZne)i`^r=IX8I=`%MMeYh9s?5{+i94ksU&`r+I$@du-!@o0f&&#Lt^ zWNT)gwGp_p|I_g+Woo?19lx`)p9{3c1iv;Qkgg-Mfi%WD4Yk(}&E6xk&N(-`Pn#UKe3itn)EU~EzaAIIq0O)1j@Qh*vc#Os6y4;E#3D$v z;!4lHNvgXzU;nKtOLTh5EzK#(EXc`BMuauYpD-HgUk5aM z4_`MqYqEDnOUHlvje$Xv_bNxH*6krM{(=Z+$e;nZ7=+maqoMXWqS?1 zh%OX=+TUmIP*(Nm6Vdh|b*5nUz-Xv_PH6VUt@2w_b;_f7?%!kU#1uX~`fu8P*aQ4=pN6tOVCDsRi)j9^y|- z`&?1&+#M=jJl|aVtj4=HdgJ$2DiU#f9dY3aN~Q$UO9GmG$K$rSKFfP>qDE8du$PcA;3zd~N|eM7)UleK4GEkRosf?j_>!V_M1K<1QTAqxvn7!3{ABs6=2Q>Aur z`P(XQOg(XIV}8ex+JfdCW(3*=5PS3TOLP-KVGFSlW)F;p+Lw%GpTqrI0(mBnzS_)D zJ6l|)vL$1)_Mc+}%5gONAaMz^2S!8fOF^}dv;WF6-Cx^$7QAs3=2^|bvXbNIx|64g z3Rg&-0WRM_Q)v)i;>;hZsP=Nq`0jDi@7Zgo#Y#q}xj%fdkS$oRG=r#cEl$nNMCv8L z{0F0<{!Bx&FGNA9V{+fZ>YqE~PwF)<`dg6h7M@37TpJRuptfvAYEBN+gD`twG}OLy zH2W&IUGRTkuaG~l|BbrkPDZYFtBY!71nNhKeW0dYDr9XMqSn9}t{G_dw%No_-cqY~ zUCmO)c=6_c!S&6nSDTS)FC+ya)ytUWc_x~@PmjF_*1huc#b*6E^O8&x-tM|Kh4Tu5 z{t4K>&|rnsQ*E;p!Qt9AOA#8bS!njG+f;aERjQr4sez&AJUMAT&v)xIxCzYrg6#p# z4Cp4MrsWr<>K3IIm**FyAO|ll`?JyQSE+M+?U~4VaNpa!`JTB2ALkxD;6bMS$ia-u z{#-QsGlN(prWSJw7H!&>p0IV!k_64W5@KZ9k0^v;{d&ys&qK3+-x=E=!Ki8w|nA?7Ksp3K7-RAq|5{-d00A!(a`i>h-x4A!K*Bb zj(=U9zlMMMpQ5*W3)H0!B;Li}UrS0%&W4m9DeyTlu$ABp4YLnML+vd>wU^`U$Br9< z+yC%IaWpY7EZ3O$_R8-3Lj2`3vc35Qsn9+m%pMpGwXYb>zOdKl^~9e%as77eH&0hr zfk{Nrqv$yN^$^Iu;+(|d4Bh1Xypqg3)DAJsJ{S$Pw*<}J>GO1!DQj7CpO~tX*7@oE zHNn^oC)VMg*TrrxEHlIGgV9iXOVR9I!`qd7(68={>4xOK8`XDKT$7lzKOBF3gs``` zATc==8l^CMU^LXeay0t{UU8Ox+ZH=B>Btp1!5Mi^vTLnoy<*VBH{JlZ4{Q_6d>9S2 zrvlBM`%8U3T@W~wFSynA&`&q!YuxU?&NkuCA4!RM>Ck0INDU^KJun(-AKLyqj*^#> ztPFlu>FmE}hVw0dd+m{2*r_7?6Z_NG}>%q z_`x9l_{w7;3;gY0u)PJD1*xDVqTnzEWk{I+U^LX9)oAvewTYJJmlbxoa#nWrSB|Q) zF2_FJOU6H54B9l2iaP#{S-#ew*>i01tD30`Dq0`;FfB8_y=!Wm#Ey%*h_Q!2`maT^ zr?KYPy$~JeNB+O|o~)^Q|M6F}%O^ns@dn+|1>Y4yO#NMlW^bY7@ekK?uKk*Kt#j4I z;7v=mFPyRYJc;(gyb6jwT=jN6n!Quv@)|yMia&o=$#L#^Vo#U)%hSSI#M%qpBteXS z8&K`#WSGkxd~DmZ8I=cPi(Pg$e2{Ejn`wrBJQtL1Ks)DjVVg4y4RkZpbn{Zv6H7A7 z2$VaGsP=PA(VekIakuxq|EH`%{{^{bOFu6@C`qEfi3#r}G<$6x8#t_p@x80mX{_hY z`YrRh^wLEeNVJ!j_E9ssy(>4yp8Y;Wbhn$OcwFxxVclc@|CEwwFEQ<+7BqW<6kqJt zo*k7kFD|emGWgpQiS-*eok_HpnD$UBn!P*b{;+6f|HoTiT0WkVQ)LCyPxb!9W0fgMqQ5Ok@OKxQ{o8&u z+OC`)Wccgf+s{6q4$8P_NGaJ8X@5acYHnglX;G?fNorAUW*%ZNA9s4|Mzh~5rJ!0r zIP>Kxg{Pidw?4H$y=beGJN|V9$tmFN4A5;2urP8x-Q%R8 z=$o)b;!#*FHu4uF7L{Zs!iFs%>1$^>2iV@7*ZWY94&K6fXPw(CoMS z^>@h}@#^py5+|}^pOmdX&$_#)n2%fhy2@$X;2>JE&V4w$_#8fyOpRQoxqzOuB`IIA>R{e0k` zrm!Y6hOuGW9{l|;sQtyMprx24upNIedtfxwzKLk|O=j`eFeuDQYTE1(Q@>gE@`AmY z?pF!hmzr0io0gxGlV1*-Qi0h6qoMXqLbK0&%gKqX^ADD=A6UPC`iz=+TVAUxT*lx3 z0r?MPUruUbN@iXXZQZ*~f8uoS@5Vp=53?^n z4S8V|%pMpGwQmZVeQQ3S34ikK|GEc<*OhubRbWlZwmPzlL4!~_PR%Ppp5MgGuTxR& z;WYQS#JyrugpyNcf?><)Nkig7!8fT8EEz`i}=d^bE3f1Hwm%|DRDcV9bbNvdoS_! zA)1abdtfxwzL}`@2^5|XoYfMr@T;D}KaLI8?z^2c4r~;`-|tE;$tcaqD1`Il`QchxWc1~t7yyAe_1EZn#%|Wy8*yGRb z=X5r|h--e6nvinijltBei|_EqS4w_PPGXTRgo1`5wEvHp9_OOk#~D9+qx6mI#Xi%j zK9?>CxF@}Px;|GI{`3#ANH;G(vl!Ni!kzx-q1wlluD$2I#GiGiF3s4GWb|~EReO@P zBXRbD_ngDMhbw>2N41Y*9*2}!^aF*kKa0DBHJ8k}SJu{))-yh5c}X69A*!UhT69f)jp1YX7Q$y zVeUJ=sUHp#C_f}|kY`$~2nqJVGdRp17!9>=5t@CjPfwjS-#O`YN>9+VJFQw))1z3M zjPQ@+LKZXWW>gkrq~<|4IS`D;#i;gjrgJ%)ojUEp#(zC?nU+F9>S3=AEmcDC2wFr1 z9YKa$2=gC|hWc{}ntdEc7@j(7=5eQ8?2Jl#QSfA2j-PTYp>RdAk5D`=MYGSj?eV#5 z^V+1{Y#PiNlt0w0_#^3{M}mEX;&BK#|r(f?g+H$w5RcL6U(gD=I)OD)G7Z^SI$ zR-pOQJ;Kn<*JG1}gcQpX-_$4D_MWL31egJLhCbc1%T6UU-ETb_Nlk2CezxqiKH zh+ECfw1hLR_`?;&J|mcgu<(S@&~QaN=ZV91$+e8=%`e2+S2bwm7!3`-wP^MP^$1ipq*>QVW_c3(SzIO;=v;ue@oq-zH6uD-V43N*aORGF!NzF z)SmTd{@LoS|71@;-`iWew`MfCn*W>XwU7A}{_;7sI61K(HAS~LGcP>{I%5w@g*e+0 zXy;#XG*&D)rYs)(XWGGaE3Q7??Y%l{xy~f~^ChVjsmZ#q?MU#$5n%p<(NKS)orlHI z8e?;zGtj9wSz`XH=V=WF7n*a!tMHF2q^0PVBo?Komgs_(w17^h%S+6Kw_srQ!Dy(x zn^41-^9uj0X3Owx(`UXZ|D>;T!RUmsN}@0RehO^$xo%=kNpWRfNg`rXG46bac1{!X(*uII&VvyQ3U>eCfr_-H{pu}VE%*AP=9Vg^(V*dhx+HTuDIS+ z+I&yudFG;(54XHY-cE{r1oGilH2can?rXI)mStLX-RtkV)s=Szmn`j4z~9e=`45s- zVg7;9P=BGF8^&=^|09zgbMF6xFX}c-4Y_xE?%kX{4;WPN^=H#_^5MH@aOQ{YX#NRh zP`YRHu6NDtqr7#>;(GUzZyR6f#$WG%>`BbgO$2T4hxAe4?anvB@4)_g6Z{V9FSPT? zIODHh_dc@z)SDgJySEuvO_EpY6@A8!KV5?CE7mOsZ5{x%JrP3@AZsD*YfO95&LiWP zqS^eu_jBckpI?16@31d9W6^I`r;fkA1D(v7ngXlXA+ZMyS4{iR&L88LSHXUU?WLcs zhwKmaEoZK6OEH~Ov;_Zn7HF||eo>_^v>giaYif!vwA6!HkITPk=aF&jNl`p^>yPk+ zbN4qlEav>EnQW+b$_)SbEq41+N1Jf^AN_o?l@FS3pI@etIN4cpgH_zDt_}RDGIQ{+ zKgVu=UOvR@uyh5Zq3H|#e6k7WpDmPK*Yj}sNe?%si3yyUZN?nO@Xxa0=H7esd+v#1W1KIG8 zD`w_pq!wkCB<8`_aDXg?`42`z{fT}~S-4f5QIvb$FWYf^Y`xUn)P9`vuoPaY zSmUe5!JA+}-5$v59He;_gl}<{!za+}&t_ELvR}QyhPQZW>|Yy?^_~mz6;1HZGa&3Q zE-8Z7wlIIfXsCbD&TZpJwVH6}h4uv9>mr)>e=hT%`;gtSAqRgsgl-=sjA8b`XsCUs z(EL|WcP^b{>zw!s>-e&);&!IU)lBx^@z*n8`|^t+3oKHL!8tUEkUvkO*_*QM_6*yU z89Lr4pX587-KTk|`sOKK{N+3@d-3`g^*lKS&O^8M7o4!zywO~6Q+Z-a9sdtT9Rm~m z?Om|Fpwk+`Eehy#2d?~i7S*4et>t}%n&1EZN_(yM_eRLwW~K)$N>%vBL*Vuy^_gI{ z;!L;aQ0?W=)t}}PcmL>wj--rV|M$68Ts`X$>W9A^%F73pwUBlxqQr%z9~ccyN9R%P z6S4+!_s+i$CS@mkV(FK--?-7Q*a-(NOy?pxVb#ClP*|$MLt9 z+OCcx$I#ZTa+N2YPF5 ziLnQgDsjfwB{X{ijPgyLzcBG4`O0Phi?}1=Svo#(i=IDOuLd%X@kK&a_6YO`f@MO9TFS zo4nGT99__00XQwd;sr)S5%jqlIKIcR~Clqa8PkvgOZc?Rgeja=b z0@Rd&`3puv{fB-oWJO76MX0;UM5n3yuZHY;qW<}G;-!`N>!19B65Zkq(1wBHf}Bj~ zv3TI}%2?juGRQs<4Yd#L97s;@Q=#vhCq{%O-jT9kysh%>l03_cF8uWY=s2U?%qmb< z54JZwGq0c&IwJFV6eIX~gt+hrI3-jJV&zg-OVFT5iU?cjhC6SQ3nidQs$ zqM!4)t=vY!A~<;JTc+|5ofqjcj7vgdp5k9Wo?n!bS_C@qIzu-xtt1s~1`=i;jE06U z+WC$gDJ@|e8`T*1J=oCJloM)orHa4f$!GlgAdu{Z?t=l1^}&WPXb5hc+-^ z_QGhW{ZG*B|Dr6ok3Fe>_glX;&x4!!wPPaF`ZwYqze9w7aS3A20n8p44YltnntgZ9 zDmCwy<6=}P{H(k%S2I>heoD(;{Ox;$eI@zedKorI3XW=+eJ~no?=v)eceB2d{`D-d z$oTNu15(qad%wgVjZ$OqBACy?@eJ9@2wI1en3-1$8@YrR0nix7TkbqZb5DPO(~Frd zT{}wmxmD$#BPfcQA?lr`Boi68!D- zf<*9L04Tj5ocZo0nte}py?$pVzH;N`O&2d7?~i!uS+MD+68>=*P=%_SR0KL#O1HQ& zHzzYM8=M00`tud4y_{Y%Sz}i&kt}q&@pE-yL9{*F8m&zV`0H1&y^uvOsVTb1Wemt> zSh|DJ(De5j)m{#-FDzFt@Rt0D*{k$3>@q`Jv%N=kArbyXu@^aFVfMjjsJ-7&?d7z7 zGecT#p-oJC@V%u+Eg~8cg88pBlWH%dL)g2cno&T)2RgJU8qwXK6{)P2vKt6_r zFN}tU^Di`eb538_-1pGJpdmtH?ti2E)^!p~|EwV*UFBw0q^5uysqm2!kgYhw`8TS) zTw8)lW>?xV#B5xAdaKDV>4z+gB{|RWk6VDl8NRv}Hi7{2AB=|j^ADbAcrvL+*eY!F1 zc^y|~vcGTYOYpqP?6dmIDN#9+?1L5tFn_^li2no_(d_Fpj<&yFb1Cw++SLg2W73J! zZWkB?5p5rM<{DDS!|Z|4Q2UtC?6bSv{{HjZ?CPjEmK7D^qArYHLJaaYvaXTdYplJk;|2Wa?Yn^ZM)4Au;j_5-o z^C!x)So~ca7CDJ%`=DtAk9}Nd_RSEH|8*{IT3E>1xn}P;_ztcK=6jb#pdXNvn3<;w z>ePdJV6Z*_WIqz(>^)ex!f0sta--Q_Upm7i;aF;`wYJgx$$fjCyc1e^?g@c<1JMJ^ z&dkZl%u7dZ2*T`x(NKGN(CqEmlYb)3;&;p6w4`P;zpD{}r&4d!lWH$g^x~)|1<=k_ z=V<$|yY&CW^Il7MH&rHR{z$NY70Z#2zu%2?Qgum2D!zRwnEfsRv~$*ZvVC5NADS1t zBkUFHxgN#|EqeED&({+u7ZBlHQds~yQy3P$Fd7oh!f5BFa6Q>y`ep09{SFuZU3<>- zUhtNm*DGFDlI(*9GRz(r4Yd#L+!U@e^~awa&1cP6tsUF>Ho7l=`N#JwUy)=VG!Mb- zfzeR=(9TQYv}8W9Jj!C;rnB;PmN(7sah@-_$vqwadMKp$EX~WzD=taQ$${;D!PWi{ zMn5m*L-zXlU(;3ymoB~ZbDc9wNr;`pq!tF$d!Nw8JyGn192N^1!U7kMwA7^CVX+#4@*ZvQ)@r|MV)K`I zzG(M2Vx-sne}5>{ev}wTTrq}qTmm!v(a&$`?zy7A z?tSsY{<{J70(B9r7i4c*9mPK%SCkCyuR^C8aQL?jtvrifASuAZvod6hp6hYe6Fkcb ztSx#E<8S96dlb~VL*9jpGku|-Hnz;|E6e2vq7^!?=}>GF!t z3$M?vSv|w<&u__&{oFkl^YOO_Q0y-TFV0494`7Bj`aW~fVw-P!I}V*#dGYx<;Uxuq zzeH2S!-%)HxF9t-GciXuIT3boD~@!Hw$Gg7R+j2?DbE`Y6`#G|>G${f2gF=rl*C_e zBKa2)ypVP~ra#g4m2-T);?r04Ntv;6uGYeW<@ah|JZTF1j=x`qWFMlK#AP4)e$~hO z*>rvvK6MoLV3AMR`g~9O!eU!3qU}R!h~Nm%8EECioHdIpb9>f%9}1tLsm1YLy(ZsI z^fvx+=%Uo()S@!c3HIRxN`X_po&PD+RiG>V+2 z(5w1vDgN|QT$+*(n^Qsf42ON6Q0?PbRdRMhlwj@Q9EW{hQ0?QKbgcCH zrMms^>WZEA2C+Fa-#7Ui@g09Z5*(fwsRf69Us3Jj*rvR8sm-1jOB}vL%#l=H)MWge z=jJ;6>t@jHgA_72?E8jh-`9qx(V;({^?C8~6zNn?J@{EEV*YW`?1L0CIP62458((* zKRN9r>p8vsKPBJ#Zd>al6=iVs3jX{D8ES=QckJ^&nB_M5e8|$@mVNhsFqrpSJ*YC= zDAwnaukm{q{`OBvW^Sr3Xj(fjKRLe$bY~OB_!6eQKheT>Q>f>=NvUl2*SHnV->^%< zerb&obR{wvFKa(%ZZC-p5}rmgb?J)Q8tT zw0RH?_2=^Ij&?2fewdMH+@6@YDNW5RWefgsd)Q4i(3pi5Jvh=4+B^uyhP?@EeGb>P zZkVC{{`&UycMf>T6^Y`vuPiYyGbbkzZAmu{`_Sh>z7{Yane*`o#o132kU1f&DzW-?VH!H<|;7bW?T2Y=F{kWyQz2=%hslp8g zIh6isL1IZsYEd5Q70%er7eSkc;5L5Xq|4#q?(wkCAw}|MMRkRs$3G#oaujAhlt#X^ z6B=1K+v6fkX!#&sziiSJj$kQkZa$f1F;icL?tQjC8Lj?<+M|!S;-n~7w+MP@3J!m< zpoN>_d{w2ZlGV3zWW=j8-o2Gh{-9y0gmxc!QEGZ>MFDEC;i$(&SW*4KZOQAr>a5ix zwJ!#nc;7#8 z87Z{>A;co2U`x&i-C_@!<-iec=<^#<20dGZzlzi@f77wYtCD8SUWk^TFzhKV zO-ijOC`v7c@3O(^FZB71##?`O{JHp?li*ZP9aqD*gCJRTE6!)*QQ{|0PsO~hz=S~q+^LS?bnUeFtqDi4y zP`=c@`gWuDibcvSsO~f&#+_*QL9>}|ni}}(gMxZq>N?Ho8IvwOzGv4G%pe7gcgXrq z)C2`-7T`)(X!k#J`7|8+>i>0$)Y>GMRr9SMpZ4`-7JS1XglaxGAn==ucF!}H?o6q| z+z^Ru6}<%u<_K>Mwhx!Qwja&is0j?e`Dph#bD4RZKdiniI;j4-Ro{9Mry0+KpE-x4 zxf_zu@SBTve>2nXr>e)UY;^DXpt@L3bKlLw9ky|Ebp1V+C9wTarrxZC7!x&&3^a6{oRt-YUZC$d064*7ZjzIWu}&+ByjxZqusk~X%!N4 zRB-i&GZX$yP&l8K`gPSMHa$c-gqn|%4! zt!Hl^6*lQldLdBem!43^k;fnoF)uYGvqU#7F%xvv8CV3?p2Kt}=w2!$a|O%8rZF*X z(bIFvz8ijT(lc3&ZLD{78HB*5=%=UVr4}WYKwG?!5P-Q8Mnl~Tx_=7ET&`)K@3cIB zChethXN!=d-d!%4f*&F;VeTzSEC65ZSCmrl+CDk#c_ zwz)wu2XiNk2D|r+4BCCH43?i!)~+ZecOJ%&ed8F_SW?7xAOd=?6jQx@?r)<1p_W_$0sSGSIWfo zzf698`o`bLN0TNVL~*2%rMZGRm%NJU9*yFs@0TA^d+n@#zWlj%gA%A)%3!2mz_s~` zk!x}Qr%$c@Vy);k3xp-6dv65IzA_k@fx^N6z;o3G)%onAzTdB^-BVd{LQ%^VZiKsp%=rV55!OQ)18%I{e91nXCSOMRxsc?x-;KMrSZ4DPyDMz^M6)eZBjhx2<=5O7%LcZF@N|y2A(;UR#*10+)sxSio4Qr-jQpCrro8@pPX>J7(EZx{ UPz^(KZdco^rfGdjn`UML00xSYK>z>% literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/packed-refs b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/packed-refs new file mode 100644 index 00000000..6657d0c5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_git/packed-refs @@ -0,0 +1,31 @@ +# pack-refs with: peeled fully-peeled sorted +7ac72a57bc7e5cc0ad84ef005d75c39d101b32a0 refs/remotes/origin/0.4.x +eb67c0b84f56f33cd34e3e40fa88c346d20211bc refs/remotes/origin/0.5.x +2f3597310deea4e02d18fbff52367f6e72424c15 refs/remotes/origin/alias-fix +ffed6e16547596f554b69f33d16b228649dfc142 refs/remotes/origin/feature/redrawhook +023c994cdf00009c3fd7ba99e1900f0c450a6ebb refs/remotes/origin/i652-v1 +1715f39a4680a27abd57fc30c98a95fdf191be45 refs/remotes/origin/master +1089e3a40886155c14bd9540e3de5f29a63776a2 refs/remotes/origin/themes +d2715e2cb3294880bbc6a75b91288243054218d0 refs/tags/0.1.0 +bb0d575942760fe483790fe878ea43b1f781e2ca refs/tags/0.1.1 +732b7d6e65c0349ee1d89b698bf9cd8a30c1015d refs/tags/0.1.2 +a0862053f57e3d8d6e0dbc34e55be13d9e4fb668 refs/tags/0.1.3 +dbd27cb30a710809dd070669c331574fdc15b397 refs/tags/0.2.0 +3dc574190071ef59054f6d693132410b37aa3ae4 refs/tags/0.2.1 +fee52920ae0b29e30bf5413151263faed20f5123 refs/tags/0.3.0 +2d792b03bb715b1cd4c550aba48e2ca10be6a447 refs/tags/0.4.0 +c19ee583138ebab416b0d2efafbad7dc9f3f7c4f refs/tags/0.4.1 +c5523c757192c9d9fffde1219c0f8d60f9af9a22 refs/tags/0.5.0 +^15d4587514a3beaa13972093e335bf685b6726a9 +f7a963b078820de3be822c62333f68067efd9a29 refs/tags/0.6.0 +^434af7b11dd33641231f1b48b8432e68eb472e46 +0f26070068b25b97b47693adf87c438c40a0756e refs/tags/0.6.0-rc1 +^dc2673155594f1de815802ca674bc7741ccda60f +3c828bf18302d7c4c2357b688e69f16c6c0dcb18 refs/tags/0.7.0 +^36a3c0f82c23934fbfa924c79453266c4edda5fd +6a18eb874ae1b6d53b940f532eac24c6650918c6 refs/tags/0.7.0-beta1 +^71dc090d02f891a65fee153041dd4332c76c21bc +956d0ebeecddb8c5ceabcb42b8c9be485e622c8d refs/tags/0.7.1 +^932e29a0c75411cb618f02995b66c0a4a25699bc +6b76f34ffc520463084be36e61f04343547778b4 refs/tags/0.8.0-alpha1-pre-redrawhook +^00a5fd11eb9d1c163fb49da5310c8f4b09fb3022 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_github/exact_workflows/test.yml b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_github/exact_workflows/test.yml new file mode 100644 index 00000000..82219268 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_dot_github/exact_workflows/test.yml @@ -0,0 +1,73 @@ +--- +name: Tests +on: + push: + paths-ignore: + - '**.md' + - '**.png' + pull_request: + paths-ignore: + - '**.md' + - '**.png' + schedule: + - cron: '29 7 * * 1' + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + version: + - master + - 5.8 + - 5.7.1 + - 5.7 + - 5.6.2 + - 5.6.1 + - 5.6 + - 5.5.1 + - 5.5 + - 5.4.2 + - 5.4.1 + - 5.4 + - 5.3.1 + - 5.3 + - 5.2 + - 5.1.1 + - 5.1 + - 5.0.8 + - 5.0.7 + - 5.0.6 + - 5.0.5 + - 5.0.4 + - 5.0.3 + - 5.0.2 + - 5.0.1 + - 5.0.0 + - 4.3.17 + - 4.3.16 + - 4.3.15 + - 4.3.14 + - 4.3.13 + - 4.3.12 + - 4.3.11 + container: + image: zshusers/zsh:${{ matrix.version }} + steps: + - uses: actions/checkout@v2 + - run: install_packages bsdmainutils make procps + - run: make test + + notify: + runs-on: ubuntu-latest + needs: test + if: failure() && (github.repository_owner == 'zsh-users') + steps: + - + name: Notify IRC + uses: Gottox/irc-message-action@v1 + with: + channel: '#zsh-syntax-highlighting' + nickname: zsyh-gh-bot + message: '${{ github.ref }} failed tests: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/README.md new file mode 100644 index 00000000..8490ddf4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/README.md @@ -0,0 +1,8 @@ +zsh-syntax-highlighting / highlighters +====================================== + +Navigate into the individual highlighters' documentation to see +what styles (`$ZSH_HIGHLIGHT_STYLES` keys) each highlighter defines. + +Refer to the [documentation on highlighters](../docs/highlighters.md) for further +information. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/brackets-highlighter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/brackets-highlighter.zsh new file mode 100644 index 00000000..bc388fdb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/brackets-highlighter.zsh @@ -0,0 +1,107 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[bracket-error]:=fg=red,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-1]:=fg=blue,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-2]:=fg=green,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-3]:=fg=magenta,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-4]:=fg=yellow,bold} +: ${ZSH_HIGHLIGHT_STYLES[bracket-level-5]:=fg=cyan,bold} +: ${ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]:=standout} + +# Whether the brackets highlighter should be called or not. +_zsh_highlight_highlighter_brackets_predicate() +{ + [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved || _zsh_highlight_buffer_modified +} + +# Brackets highlighting function. +_zsh_highlight_highlighter_brackets_paint() +{ + local char style + local -i bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]} buflen=${#BUFFER} level=0 matchingpos pos + local -A levelpos lastoflevel matching + + # Find all brackets and remember which one is matching + pos=0 + for char in ${(s..)BUFFER} ; do + (( ++pos )) + case $char in + ["([{"]) + levelpos[$pos]=$((++level)) + lastoflevel[$level]=$pos + ;; + [")]}"]) + if (( level > 0 )); then + matchingpos=$lastoflevel[$level] + levelpos[$pos]=$((level--)) + if _zsh_highlight_brackets_match $matchingpos $pos; then + matching[$matchingpos]=$pos + matching[$pos]=$matchingpos + fi + else + levelpos[$pos]=-1 + fi + ;; + esac + done + + # Now highlight all found brackets + for pos in ${(k)levelpos}; do + if (( $+matching[$pos] )); then + if (( bracket_color_size )); then + _zsh_highlight_add_highlight $((pos - 1)) $pos bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 )) + fi + else + _zsh_highlight_add_highlight $((pos - 1)) $pos bracket-error + fi + done + + # If cursor is on a bracket, then highlight corresponding bracket, if any. + if [[ $WIDGET != zle-line-finish ]]; then + pos=$((CURSOR + 1)) + if (( $+levelpos[$pos] )) && (( $+matching[$pos] )); then + local -i otherpos=$matching[$pos] + _zsh_highlight_add_highlight $((otherpos - 1)) $otherpos cursor-matchingbracket + fi + fi +} + +# Helper function to differentiate type +_zsh_highlight_brackets_match() +{ + case $BUFFER[$1] in + \() [[ $BUFFER[$2] == \) ]];; + \[) [[ $BUFFER[$2] == \] ]];; + \{) [[ $BUFFER[$2] == \} ]];; + *) false;; + esac +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/cursor-matchingbracket-line-finish.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/cursor-matchingbracket-line-finish.zsh new file mode 100644 index 00000000..b2acd31d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/cursor-matchingbracket-line-finish.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +WIDGET=zle-line-finish + +BUFFER=': $foo[bar]' +CURSOR=6 # cursor is zero-based + +expected_region_highlight=( +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/cursor-matchingbracket.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/cursor-matchingbracket.zsh new file mode 100644 index 00000000..e05b4e90 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/cursor-matchingbracket.zsh @@ -0,0 +1,47 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsorted=1 + +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= +ZSH_HIGHLIGHT_STYLES[bracket-level-2]= +ZSH_HIGHLIGHT_STYLES[bracket-level-3]= + +BUFFER=': ((( )))' +CURSOR=2 # cursor is zero-based + +expected_region_highlight=( + "3 3 bracket-level-1" + "4 4 bracket-level-2" + "5 5 bracket-level-3" + "7 7 bracket-level-3" + "8 8 bracket-level-2" + "9 9 bracket-level-1" + "9 9 cursor-matchingbracket" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/empty-styles.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/empty-styles.zsh new file mode 100644 index 00000000..e60657bc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/empty-styles.zsh @@ -0,0 +1,33 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': (x)' + +expected_region_highlight=( +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/loop-styles.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/loop-styles.zsh new file mode 100644 index 00000000..e5cfcdf0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/loop-styles.zsh @@ -0,0 +1,53 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsorted=1 + +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= +ZSH_HIGHLIGHT_STYLES[bracket-level-2]= +ZSH_HIGHLIGHT_STYLES[bracket-level-3]= + +BUFFER=': ({[({[(x)]})]})' + +expected_region_highlight=( + "3 3 bracket-level-1" + "4 4 bracket-level-2" + "5 5 bracket-level-3" + "6 6 bracket-level-1" + "7 7 bracket-level-2" + "8 8 bracket-level-3" + "9 9 bracket-level-1" + "11 11 bracket-level-1" + "12 12 bracket-level-3" + "13 13 bracket-level-2" + "14 14 bracket-level-1" + "15 15 bracket-level-3" + "16 16 bracket-level-2" + "17 17 bracket-level-1" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/mismatch-patentheses.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/mismatch-patentheses.zsh new file mode 100644 index 00000000..5cc588fa --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/mismatch-patentheses.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsorted=1 + +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= +ZSH_HIGHLIGHT_STYLES[bracket-level-2]= + +BUFFER='echo ({x}]' + +expected_region_highlight=( + "6 6 bracket-error" # ( + "7 7 bracket-level-2" # { + "9 9 bracket-level-2" # } + "10 10 bracket-error" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/near-quotes.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/near-quotes.zsh new file mode 100644 index 00000000..49f002be --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/near-quotes.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsorted=1 + +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= +ZSH_HIGHLIGHT_STYLES[bracket-level-2]= + +BUFFER=': {"{x}"}' + +expected_region_highlight=( + "3 3 bracket-level-1" + "5 5 bracket-level-2" + "7 7 bracket-level-2" + "9 9 bracket-level-1" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/nested-parentheses.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/nested-parentheses.zsh new file mode 100644 index 00000000..21a20fb3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/nested-parentheses.zsh @@ -0,0 +1,45 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsorted=1 + +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= +ZSH_HIGHLIGHT_STYLES[bracket-level-2]= +ZSH_HIGHLIGHT_STYLES[bracket-level-3]= + +BUFFER='echo $(echo ${(z)array})' + +expected_region_highlight=( + "7 7 bracket-level-1" # ( + "14 14 bracket-level-2" # { + "15 15 bracket-level-3" # ( + "17 17 bracket-level-3" # ) + "23 23 bracket-level-2" # } + "24 24 bracket-level-1" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/only-error.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/only-error.zsh new file mode 100644 index 00000000..00fe557c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/only-error.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': x)' + +expected_region_highlight=( + "4 4 bracket-error" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/quoted-patentheses.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/quoted-patentheses.zsh new file mode 100644 index 00000000..81ee04f2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/quoted-patentheses.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo "foo ( bar"' + +expected_region_highlight=( +"11 11 bracket-error" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/simple-parentheses.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/simple-parentheses.zsh new file mode 100644 index 00000000..2ccfbab0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/simple-parentheses.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsorted=1 + +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= +ZSH_HIGHLIGHT_STYLES[bracket-level-2]= + +BUFFER='echo ({x})' + +expected_region_highlight=( + "6 6 bracket-level-1" # ( + "7 7 bracket-level-2" # { + "9 9 bracket-level-2" # } + "10 10 bracket-level-1" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/unclosed-patentheses.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/unclosed-patentheses.zsh new file mode 100644 index 00000000..d3f6560d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/unclosed-patentheses.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsorted=1 + +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= +ZSH_HIGHLIGHT_STYLES[bracket-level-2]= + +BUFFER='echo ({x}' + +expected_region_highlight=( + "6 6 bracket-error" # ( + "7 7 bracket-level-2" # { + "9 9 bracket-level-2" # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/unclosed-patentheses2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/unclosed-patentheses2.zsh new file mode 100644 index 00000000..2c489c30 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/exact_test-data/unclosed-patentheses2.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsorted=1 + +ZSH_HIGHLIGHT_STYLES[bracket-level-1]= + +BUFFER='echo {x})' + +expected_region_highlight=( + "6 6 bracket-level-1" # { + "8 8 bracket-level-1" # } + "9 9 bracket-error" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/symlink_README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/symlink_README.md new file mode 100644 index 00000000..6997bd60 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_brackets/symlink_README.md @@ -0,0 +1 @@ +../../docs/highlighters/brackets.md \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_cursor/cursor-highlighter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_cursor/cursor-highlighter.zsh new file mode 100644 index 00000000..81633a3c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_cursor/cursor-highlighter.zsh @@ -0,0 +1,47 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[cursor]:=standout} + +# Whether the cursor highlighter should be called or not. +_zsh_highlight_highlighter_cursor_predicate() +{ + # remove cursor highlighting when the line is finished + [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved +} + +# Cursor highlighting function. +_zsh_highlight_highlighter_cursor_paint() +{ + [[ $WIDGET == zle-line-finish ]] && return + + _zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_cursor/symlink_README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_cursor/symlink_README.md new file mode 100644 index 00000000..70e0c8c4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_cursor/symlink_README.md @@ -0,0 +1 @@ +../../docs/highlighters/cursor.md \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_line/line-highlighter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_line/line-highlighter.zsh new file mode 100644 index 00000000..f922dc9b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_line/line-highlighter.zsh @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[line]:=} + +# Whether the root highlighter should be called or not. +_zsh_highlight_highlighter_line_predicate() +{ + _zsh_highlight_buffer_modified +} + +# root highlighting function. +_zsh_highlight_highlighter_line_paint() +{ + _zsh_highlight_add_highlight 0 $#BUFFER line +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_line/symlink_README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_line/symlink_README.md new file mode 100644 index 00000000..052fe20b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_line/symlink_README.md @@ -0,0 +1 @@ +../../docs/highlighters/line.md \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position1.zsh new file mode 100644 index 00000000..cfc12a5f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position1.zsh @@ -0,0 +1,35 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'/' + +expected_region_highlight=( + '1 1 path_prefix' # / +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position1b.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position1b.zsh new file mode 100644 index 00000000..88fe60c9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position1b.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt autocd +BUFFER=$'/' + +expected_region_highlight=( + '1 1 autodirectory' # / +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position2.zsh new file mode 100644 index 00000000..5033d2c4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position2.zsh @@ -0,0 +1,35 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'/bi' + +expected_region_highlight=( + '1 3 path_prefix' # /bi +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position3.zsh new file mode 100644 index 00000000..415e3167 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position3.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'/bin; /bin' + +expected_region_highlight=( + '1 4 unknown-token' # /bin (in middle) + '5 5 commandseparator' # ; + '7 10 path_prefix' # /bin (at end) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position3b.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position3b.zsh new file mode 100644 index 00000000..0e65c98a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position3b.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt autocd +BUFFER=$'/bin; /bin' + +expected_region_highlight=( + '1 4 autodirectory' # /bin (in middle) + '5 5 commandseparator' # ; + '7 10 autodirectory' # /bin (at end) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position4.zsh new file mode 100644 index 00000000..9e935bf1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position4.zsh @@ -0,0 +1,35 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'/bin/s' + +expected_region_highlight=( + '1 6 path_prefix' # /bin/s +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position5.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position5.zsh new file mode 100644 index 00000000..e428b1a0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/abspath-in-command-position5.zsh @@ -0,0 +1,35 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'/bin/sh' + +expected_region_highlight=( + '1 7 command' # /bin/sh +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-assignment1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-assignment1.zsh new file mode 100644 index 00000000..0c101c8e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-assignment1.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Issue #263 (more-pathological case): aliases[x=y]=z works; the ${(z)} splitter considers +# that a single word; but it's not looked up as an alias. Hence, highlight it as an error. +aliases[x=y]='lorem ipsum dolor sit amet' +BUFFER='x=y ls' + +expected_region_highlight=( + "1 3 unknown-token" # x=y + "5 6 default" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-basic.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-basic.zsh new file mode 100644 index 00000000..7af8b7cd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-basic.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias foo="echo hello world" +BUFFER="foo" + +expected_region_highlight+=( + "1 3 alias" # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-command-substitution.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-command-substitution.zsh new file mode 100644 index 00000000..a7b77dfa --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-command-substitution.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Alias must be at least 4 characters to test the regression +# cf. 139ea2b189819c43cc251825981c116959b15cc3 +alias foobar='echo "$(echo foobar)"' +BUFFER='foobar' + +expected_region_highlight=( + "1 6 alias" # foobar +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-comment1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-comment1.zsh new file mode 100644 index 00000000..bae7ef6f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-comment1.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# see alias-comment2.zsh and comment-followed.zsh +setopt interactivecomments +alias x=$'# foo\npwd' +BUFFER='x' + +expected_region_highlight=( + '1 1 alias' # x +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-comment2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-comment2.zsh new file mode 100644 index 00000000..5a498229 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-comment2.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# see alias-comment1.zsh +setopt NO_interactivecomments +alias x=$'# foo\npwd' +BUFFER='x' + +expected_region_highlight=( + '1 1 unknown-token' # x (#) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-complex.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-complex.zsh new file mode 100644 index 00000000..5ad7c0a9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-complex.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias x='echo && ls; >' + +BUFFER='x file echo' + +expected_region_highlight=( + '1 1 alias' # x + '3 6 default' # file + '8 11 builtin' # echo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-empty.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-empty.zsh new file mode 100644 index 00000000..535fccc9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-empty.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias x='' + +BUFFER='x echo foo' + +expected_region_highlight=( + '1 1 alias' # x + '3 6 builtin' # echo + '8 10 default' # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-eponymous1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-eponymous1.zsh new file mode 100644 index 00000000..2642e14f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-eponymous1.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias ls='command ls' + +BUFFER='ls' + +expected_region_highlight=( + "1 2 alias" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-eponymous2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-eponymous2.zsh new file mode 100644 index 00000000..dcd85653 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-eponymous2.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias ls=tmp tmp='command ls' + +BUFFER='ls' + +expected_region_highlight=( + "1 2 alias" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-in-cmdsubst.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-in-cmdsubst.zsh new file mode 100644 index 00000000..b3cf777a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-in-cmdsubst.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias p='print -r --' + +BUFFER=$'s=$(p foo)' + +expected_region_highlight=( + '1 10 assign' # s=$(p foo) + '3 10 default' # $(p foo) + '3 10 command-substitution-unquoted' # $(p foo) + '3 4 command-substitution-delimiter-unquoted' # $( + '5 5 alias' # p + '7 9 default' # foo + '10 10 command-substitution-delimiter-unquoted' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-loop.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-loop.zsh new file mode 100644 index 00000000..83992dbf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-loop.zsh @@ -0,0 +1,44 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +function b() {} # beware of ALIAS_FUNC_DEF +alias a=b b=c c=b + +BUFFER='a foo; :' + +expected_region_highlight=( + # An alias is ineligible for expansion whilst it's being expanded. + # Therefore, the "b" in the expansion of the alias "c" is not considered + # as an alias. + '1 1 alias' # a + '3 5 default' # foo + '6 6 commandseparator' # ; + '8 8 builtin' # : +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-loop2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-loop2.zsh new file mode 100644 index 00000000..29e04ace --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-loop2.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias ls="ls" +BUFFER="ls" + +expected_region_highlight+=( + "1 2 alias" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-nested-precommand.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-nested-precommand.zsh new file mode 100644 index 00000000..6d4172bc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-nested-precommand.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=b b=sudo +sudo(){} + +BUFFER='a -u phy1729 echo; :' + +expected_region_highlight=( + '1 1 alias' # a + '3 4 single-hyphen-option' # -u + '6 12 default' # phy1729 + '14 17 builtin' # echo + '18 18 commandseparator' # ; + '20 20 builtin' # : +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-nested.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-nested.zsh new file mode 100644 index 00000000..b24b4967 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-nested.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=b b=: + +BUFFER='a foo; :' + +expected_region_highlight=( + '1 1 alias' # a + '3 5 default' # foo + '6 6 commandseparator' # ; + '8 8 builtin' # : +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-parameter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-parameter.zsh new file mode 100644 index 00000000..21bc6b32 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-parameter.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias '$foo'='echo alias' +local foo; foo=(echo param) + +BUFFER='$foo' + +expected_region_highlight=( + '1 4 alias' # $foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument1.zsh new file mode 100644 index 00000000..2d1f35c6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument1.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# See also param-precommand-option-argument1.zsh +alias sudo_u='sudo -u' +sudo(){} + +BUFFER='sudo_u phy1729 echo foo' + +expected_region_highlight=( + '1 6 alias' # sudo_u + '8 14 default' # phy1729 + '17 19 command "issue #540"' # echo (not builtin) + '21 23 default' # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument2.zsh new file mode 100644 index 00000000..fbc6eec7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument2.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias sudo_b='sudo -b' +alias sudo_b_u='sudo_b -u' +sudo(){} + +BUFFER='sudo_b_u phy1729 echo foo' + +expected_region_highlight=( + '1 8 alias' # sudo_b_u + '10 16 default' # phy1729 + '18 21 command "issue #540"' # echo (not builtin) + '23 25 default' # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument3.zsh new file mode 100644 index 00000000..373f12b6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument3.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# See also param-precommand-option-argument3.zsh +alias sudo_u='sudo -u' +sudo(){} + +BUFFER='sudo_u phy1729 ls foo' + +expected_region_highlight=( + '1 6 alias' # sudo_u + '8 14 default' # phy1729 + '16 17 command' # ls + '19 21 default' # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument4.zsh new file mode 100644 index 00000000..d47dccb8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-precommand-option-argument4.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias sudo_b='sudo -b' +alias sudo_b_u='sudo_b -u' +sudo(){} + +BUFFER='sudo_b_u phy1729 ls foo' + +expected_region_highlight=( + '1 8 alias' # sudo_b_u + '10 16 default' # phy1729 + '18 19 command' # ls + '21 23 default' # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-quoted.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-quoted.zsh new file mode 100644 index 00000000..e42e2f0a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-quoted.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) YYYY 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=: ls='ls -l' +BUFFER='"a" foo; \ls' + +expected_region_highlight=( + '1 3 unknown-token' # "a" + '5 7 default' # foo + '8 8 commandseparator' # ; + '10 12 command' # \ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-redirect.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-redirect.zsh new file mode 100644 index 00000000..acc3dcbe --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-redirect.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias x=\> +BUFFER='x foo echo bar' + +expected_region_highlight=( + '1 1 alias' # x + '3 5 default' # foo + '7 10 builtin' # echo + '12 14 default' # bar +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse1.zsh new file mode 100644 index 00000000..1fd61a0b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse1.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=: b='a | a' + +BUFFER='b | b' + +expected_region_highlight=( + '1 1 alias' # b + '3 3 commandseparator' # | + '5 5 alias' # b +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse2.zsh new file mode 100644 index 00000000..37251fb9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse2.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=: b='a && a' + +BUFFER='b && b' + +expected_region_highlight=( + '1 1 alias' # b + '3 4 commandseparator' # && + '6 6 alias' # b +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse3.zsh new file mode 100644 index 00000000..5d7150a1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse3.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=: b='a; a' + +BUFFER='b; b' + +expected_region_highlight=( + '1 1 alias' # b + '2 2 commandseparator' # ; + '4 4 alias' # b +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse4.zsh new file mode 100644 index 00000000..7ad7038c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse4.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=: b='a $(a)' + +BUFFER='b $(b)' + +expected_region_highlight=( + '1 1 alias' # b + '3 6 default' # $(b) + '3 6 command-substitution-unquoted' # $(b) + '3 4 command-substitution-delimiter-unquoted' # $( + '5 5 alias' # b + '6 6 command-substitution-delimiter-unquoted' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse5.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse5.zsh new file mode 100644 index 00000000..881401b2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-reuse5.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=: b='a < <(a)' + +BUFFER='b < <(b)' + +expected_region_highlight=( + '1 1 alias' # b + '3 3 redirection' # < + '5 8 default' # <(b) + '5 8 process-substitution' # <(b) + '5 6 process-substitution-delimiter' # <( + '7 7 alias' # b + '8 8 process-substitution-delimiter' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-self.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-self.zsh new file mode 100644 index 00000000..c6f12b1a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-self.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias echo='echo foo' + +BUFFER='echo bar' + +expected_region_highlight=( + '1 4 alias' # echo + '6 8 default' # bar +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-self2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-self2.zsh new file mode 100644 index 00000000..fd6ae03f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-self2.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias cat='cat | cat' + +BUFFER='cat' + +expected_region_highlight=( + '1 3 alias' # cat +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-to-dir.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-to-dir.zsh new file mode 100644 index 00000000..30390d42 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-to-dir.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias x=/ +BUFFER=$'x' + +expected_region_highlight=( + '1 1 unknown-token' # x (/) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-to-dir1b.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-to-dir1b.zsh new file mode 100644 index 00000000..62ec5213 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-to-dir1b.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt autocd +alias x=/ +BUFFER=$'x' + +expected_region_highlight=( + '1 1 alias' # x +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-unknown-token1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-unknown-token1.zsh new file mode 100644 index 00000000..9c996bfe --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-unknown-token1.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=b b=foo + +BUFFER='a ' + +expected_region_highlight=( + '1 1 unknown-token' # a +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-unknown-token2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-unknown-token2.zsh new file mode 100644 index 00000000..ab9facd6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias-unknown-token2.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a='() { ls "$@" ; foo }' + +BUFFER='a ' + +expected_region_highlight=( + '1 1 unknown-token' # a +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias.zsh new file mode 100644 index 00000000..4cafa804 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/alias.zsh @@ -0,0 +1,53 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias alias1="ls" +alias -s alias2="echo" +function alias1() {} # to check that it's highlighted as an alias, not as a function + +BUFFER='x.alias2; alias1; alias2' + +# Set expected_region_highlight as a function of zsh version. +# +# Highlight of suffix alias requires zsh-5.1.1 or newer; see issue #126, +# and commit 36403 to zsh itself. Therefore, check if the requisite zsh +# functionality is present, and skip verifying suffix-alias highlighting +# if it isn't. +expected_region_highlight=() +if zmodload -e zsh/parameter || [[ "$(type -w x.alias2)" == *suffix* ]]; then + expected_region_highlight+=( + "1 8 suffix-alias" # x.alias2 + ) +fi +expected_region_highlight+=( + "9 9 commandseparator" # ; + "11 16 alias" # alias1 + "17 17 commandseparator" # ; + "19 24 unknown-token" # alias2 +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always1.zsh new file mode 100644 index 00000000..ae40a72f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always1.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='{ ls } always { pwd }' + +expected_region_highlight=( + '1 1 reserved-word' # { + '3 4 command' # ls + '6 6 reserved-word' # } + '8 13 reserved-word' # always + '15 15 reserved-word' # { + '17 19 builtin' # pwd + '21 21 reserved-word' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always2.zsh new file mode 100644 index 00000000..991137c2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always2.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'{\nls\n} always { pwd }' + +expected_region_highlight=( + '1 1 reserved-word' # { + '2 2 commandseparator' # \n + '3 4 command' # ls + '5 5 commandseparator' # \n + '6 6 reserved-word' # } + '8 13 reserved-word' # always + '15 15 reserved-word' # { + '17 19 builtin' # pwd + '21 21 reserved-word' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always3.zsh new file mode 100644 index 00000000..d41beeb5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/always3.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt ignorebraces +BUFFER='echo { foo } always { bar }' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 6 default' # { + '8 10 default' # foo + '12 12 default' # } + '14 19 default' # always + '21 21 default' # { + '23 25 default' # bar + '27 27 default' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/anonymous-function.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/anonymous-function.zsh new file mode 100644 index 00000000..9d67fb1d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/anonymous-function.zsh @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='() echo hello; () { echo world } "argument"' + +expected_region_highlight=( + "1 2 reserved-word" # () + "4 7 builtin" # echo + "9 13 default" # hello + "14 14 commandseparator" # ; + "16 17 reserved-word" # () + "19 19 reserved-word" # { + "21 24 builtin" # echo + "26 30 default" # world + "32 32 reserved-word" # } + "34 43 default" # "argument" + "34 43 double-quoted-argument" # "argument" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arg0-colon.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arg0-colon.zsh new file mode 100644 index 00000000..8955bd28 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arg0-colon.zsh @@ -0,0 +1,35 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=''\''x: /' + +expected_region_highlight=( + '1 5 unknown-token' # \'x: / +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith-cmdsubst-mess.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith-cmdsubst-mess.zsh new file mode 100644 index 00000000..82268ac1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith-cmdsubst-mess.zsh @@ -0,0 +1,46 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $((ls); (ls))' + +expected_region_highlight=( + '1 1 builtin' # : + '3 15 default' # $((ls); (ls)) + '3 15 command-substitution-unquoted' # $((ls); (ls)) + '3 4 command-substitution-delimiter-unquoted' # $( + '5 5 reserved-word' # ( + '6 7 command' # ls + '8 8 reserved-word' # ) + '9 9 commandseparator' # ; + '11 11 reserved-word' # ( + '12 13 command' # ls + '14 14 reserved-word' # ) + '15 15 command-substitution-delimiter-unquoted' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith1.zsh new file mode 100644 index 00000000..0462f738 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith1.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(( 6 * 9 ))' + +expected_region_highlight=( + '1 1 builtin' # : + '3 14 default' # $(( 6 * 9 )) + '3 14 arithmetic-expansion' # $(( 6 * 9 )) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith2.zsh new file mode 100644 index 00000000..af981d7c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arith2.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': "$(( 6 * 9 ))"' + +expected_region_highlight=( + '1 1 builtin' # : + '3 16 default' # "$(( 6 * 9 ))" + '3 16 double-quoted-argument' # "$(( 6 * 9 ))" + '4 15 arithmetic-expansion' # $(( 6 * 9 )) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-command-substitution.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-command-substitution.zsh new file mode 100644 index 00000000..07db0fb2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-command-substitution.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(( $(echo 2) + 2 ))' + +expected_region_highlight=( + '1 1 builtin' # : + '3 22 default' # $(( $(echo 2) + 2 )) + '3 22 arithmetic-expansion' # $(( $(echo 2) + 2 )) + '7 15 command-substitution-quoted' # $(echo 2) + '7 8 command-substitution-delimiter-quoted' # $( + '9 12 builtin' # echo + '14 14 default' # 2 + '15 15 command-substitution-delimiter' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-doubled-parens.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-doubled-parens.zsh new file mode 100644 index 00000000..d582d67c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-doubled-parens.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(( ((42)) ))' + +expected_region_highlight=( + '1 1 builtin' # : + '3 15 default' # $(( ((42)) )) + '3 15 arithmetic-expansion' # $(( ((42)) )) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-empty.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-empty.zsh new file mode 100644 index 00000000..bd759966 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-empty.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': "foo"$(())"bar"' + +expected_region_highlight=( + '1 1 builtin' # : + '3 17 default' # "foo"$(())"bar" + '3 7 double-quoted-argument' # "foo" + '8 12 arithmetic-expansion' # $(()) + '13 17 double-quoted-argument' # "bar" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-evaluation.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-evaluation.zsh new file mode 100644 index 00000000..e0eb6e75 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-evaluation.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Must be at command word, since the word following 'if' isn't currently considered +# a command word (issue #207). +# +# An opening '((' without matching '))' is highlighted correctly under zsh-5.1.1-52-g4bed2cf +# or newer, only (issue #188). +BUFFER='(( x == 42 ))' + +expected_region_highlight=( + "1 2 reserved-word" # (( + "12 13 reserved-word" # )) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-hist-expn.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-hist-expn.zsh new file mode 100644 index 00000000..79af7233 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-hist-expn.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(( \!\! ))' + +expected_region_highlight=( + '1 1 builtin' # : + '3 11 default' # $(( !! )) + '3 11 arithmetic-expansion' # $(( !! )) + '7 8 history-expansion "issue #713"' # !! +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-invalid-chars.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-invalid-chars.zsh new file mode 100644 index 00000000..9ace4383 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-invalid-chars.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(( 0 * 1\'\'000 ))' + +expected_region_highlight=( + '1 1 builtin' # : + '3 19 default' # $(( 0 * 1\'\'000 )) + '3 19 arithmetic-expansion' # $(( 0 * 1\'\'000 )) + '12 12 unknown-token' # \' + '13 13 unknown-token' # \' +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-multiplication.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-multiplication.zsh new file mode 100644 index 00000000..65df0c9f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-multiplication.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': foo*$(( 42 * 1729 ))*bar' + +expected_region_highlight=( + '1 1 builtin' # : + '3 26 default' # foo*$(( 42 * 1729 ))*bar + '6 6 globbing' # * + '7 22 arithmetic-expansion' # $(( 42 * 1729 )) + '23 23 globbing' # * +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-nested.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-nested.zsh new file mode 100644 index 00000000..d734cd34 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-nested.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(( $(( 1 + 2 )) * 3 ))' + +expected_region_highlight=( + '1 1 builtin' # : + '3 25 default' # $(( $(( 1 + 2 )) * 3 )) + '3 25 arithmetic-expansion' # $(( $(( 1 + 2 )) * 3 )) + '7 18 arithmetic-expansion' # $(( 1 + 2 )) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-quoted.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-quoted.zsh new file mode 100644 index 00000000..917ddf78 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-quoted.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': "$(( 1 + 1 ))"' + +expected_region_highlight=( + '1 1 builtin' # : + '3 16 default' # "$(( 1 + 1 ))" + '3 16 double-quoted-argument' # "$(( 1 + 1 ))" + '4 15 arithmetic-expansion' # $(( 1 + 1 )) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-unclosed.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-unclosed.zsh new file mode 100644 index 00000000..aa4eac7a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-unclosed.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(( 1' + +expected_region_highlight=( + '1 1 builtin' # : + '3 7 default' # $(( 1 + '3 7 arithmetic-expansion' # $(( 1 +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-unfinished.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-unfinished.zsh new file mode 100644 index 00000000..916c3dad --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/arithmetic-unfinished.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(( 1729 )' + +expected_region_highlight=( + '1 1 builtin' # : + '3 12 default' # $(( 1729 ) + '3 12 arithmetic-expansion' # $(( 1729 ) +) + +if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug + expected_region_highlight[2]='3 13 default' # $(( 1729 ) +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep1.zsh new file mode 100644 index 00000000..2fd55c03 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep1.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'a=( foo | bar )' +bar(){} + +expected_region_highlight=( + '1 3 assign' # a=( + '3 3 reserved-word' # ( + '5 7 default' # foo + '9 9 unknown-token' # | + # zsh reports a parse error at this point. Nevertheless, we test how we + # highlight the remainder of $BUFFER. Currently we recover by treating the pipe + # as a command separator. That's not the only reasonable behaviour, though; if + # we change the behaviour, we should adjust the following expectations accordingly. + '11 13 function' # bar + '15 15 unknown-token' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep2.zsh new file mode 100644 index 00000000..0bda6761 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep2.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'a=( foo ; bar )' + +expected_region_highlight=( + '1 3 assign' # a=( + '3 3 reserved-word' # ( + '5 7 default' # foo + '9 9 unknown-token' # ; (not commandseparator; see highlighter source code) + '11 13 default' # bar + '15 15 assign' # ) + '15 15 reserved-word' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep3.zsh new file mode 100644 index 00000000..b4b3687c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/array-cmdsep3.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'a=( foo \n bar )' + +expected_region_highlight=( + '1 3 assign' # a=( + '3 3 reserved-word' # ( + '5 7 default' # foo + '9 9 commandseparator' # \n + '11 13 default' # bar + '15 15 assign' # ) + '15 15 reserved-word' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-append.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-append.zsh new file mode 100644 index 00000000..feb68e53 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-append.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='a+=(lorem ipsum)' + +expected_region_highlight=( + "1 4 assign" # a+=( + "4 4 reserved-word" # ( + "5 9 default" # lorem + "11 15 default" # ipsum + "16 16 assign" # ) + "16 16 reserved-word" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-argv.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-argv.zsh new file mode 100644 index 00000000..ec5acc24 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-argv.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch foo +BUFFER='42=foo 43+=bar' + +expected_region_highlight=( + "1 6 assign" # 42=foo + "4 6 path" # foo + "8 14 assign" # 43+=bar + "12 14 default" # bar +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array.zsh new file mode 100644 index 00000000..ef0a6669 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='(A=(hello world))' + +expected_region_highlight=( + "1 1 reserved-word" # ( + "2 4 assign" # A=( + "4 4 reserved-word" # ( + "5 9 default" # hello + "11 15 default" # world + "16 16 assign" # ) + "16 16 reserved-word" # ) + "17 17 reserved-word" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array2.zsh new file mode 100644 index 00000000..2d487211 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array2.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='A=(hello world) ls' + +expected_region_highlight=( + "1 3 assign" # A=( + "3 3 reserved-word" # ( + "4 8 default" # hello + "10 14 default" # world + "15 15 assign" # ) + "15 15 reserved-word" # ) + "17 18 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array3.zsh new file mode 100644 index 00000000..5eb645e6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-array3.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='A=(hello world) b=42' + +expected_region_highlight=( + "1 3 assign" # A=( + "3 3 reserved-word" # ( + "4 8 default" # hello + "10 14 default" # world + "15 15 assign" # ) + "15 15 reserved-word" # ) + "17 20 assign" # b=42 + "19 20 default" # 42 +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-invalid-command.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-invalid-command.zsh new file mode 100644 index 00000000..557327e8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-invalid-command.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'x=y nosuchcommand' + +expected_region_highlight=( + '1 3 assign' # x=y + '3 3 default' # y + '5 17 unknown-token' # nosuchcommand +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-not-array.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-not-array.zsh new file mode 100644 index 00000000..651ab80a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-not-array.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='a=foo( bar ) :' + +expected_region_highlight=( + '1 12 assign' # a=foo( bar ) + '3 12 default' # foo( bar ) + '14 14 builtin' # : +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-not-array2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-not-array2.zsh new file mode 100644 index 00000000..dfda106e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-not-array2.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='a=foo\( :' + +expected_region_highlight=( + '1 7 assign' # a=foo\( + '3 7 default' # foo\( + '9 9 builtin' # : +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-quoted-cmdsubst.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-quoted-cmdsubst.zsh new file mode 100644 index 00000000..d4a62dfa --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-quoted-cmdsubst.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'x="$(ls x y z)"' + +expected_region_highlight=( + '1 15 assign' # x="$(ls x y z)" + '3 15 default' # "$(ls x y z)" + '3 3 double-quoted-argument' # " + '15 15 double-quoted-argument' # " + '4 14 command-substitution-quoted' # $(ls x y z) + '4 5 command-substitution-delimiter-quoted' # $( + '6 7 command' # ls + '9 9 default' # x + '11 11 default' # y + '13 13 default' # z + '14 14 command-substitution-delimiter-quoted' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-semicolon.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-semicolon.zsh new file mode 100644 index 00000000..f748c94e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-semicolon.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='A=1; echo hello world' + +expected_region_highlight=( + "1 3 assign" # A=1 + "3 3 default" # 1 + "4 4 commandseparator" # ; + "6 9 builtin" # echo + "11 15 default" # hello + "17 21 default" # world +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-subshell.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-subshell.zsh new file mode 100644 index 00000000..20228893 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-subshell.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='(A=1)' + +expected_region_highlight=( + "1 1 reserved-word" # ( + "2 4 assign" # A=1 + "4 4 default" # 1 + "5 5 reserved-word" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-value-quote1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-value-quote1.zsh new file mode 100644 index 00000000..b6d04fe0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-value-quote1.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'s="foo\'bar"' + +expected_region_highlight=( + '1 11 assign' # s="foo'bar" + '3 11 default' # "foo'bar" + '3 11 double-quoted-argument' # "foo'bar" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-value-quote2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-value-quote2.zsh new file mode 100644 index 00000000..3c5f93b4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign-value-quote2.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'s="foo \'\' bar"' + +expected_region_highlight=( + '1 14 assign' # s="foo '' bar" + '3 14 default' # "foo '' bar" + '3 14 double-quoted-argument' # "foo '' bar" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign.zsh new file mode 100644 index 00000000..c6e8532d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assign.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='A=1 b=("foo" bar)' + +expected_region_highlight=( + "1 3 assign" # A=1 + "3 3 default" # 1 + "5 7 assign" # b=( + "7 7 reserved-word" # ( + "8 12 default" # "foo" + "8 12 double-quoted-argument" # "foo" + "14 16 default" # bar + "17 17 assign" # ) + "17 17 reserved-word" # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword1.zsh new file mode 100644 index 00000000..b271d4aa --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword1.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=bar { :; }' + +expected_region_highlight=( + '1 7 assign' # foo=bar + '5 7 default' # bar + '9 9 unknown-token' # { + '11 11 builtin' # : + '12 12 commandseparator' # ; + '14 14 reserved-word' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword2.zsh new file mode 100644 index 00000000..247e41eb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword2.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=bar ( :; )' + +expected_region_highlight=( + '1 7 assign' # foo=bar + '5 7 default' # bar + '9 9 unknown-token' # ( + '11 11 builtin' # : + '12 12 commandseparator' # ; + '14 14 unknown-token' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword3.zsh new file mode 100644 index 00000000..52041895 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword3.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=bar (( foo ))' + +expected_region_highlight=( + '1 7 assign' # foo=bar + '5 7 default' # bar + '9 17 unknown-token' # (( foo )) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword4.zsh new file mode 100644 index 00000000..cc3d5231 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword4.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=bar [[ -n foo ]]' + +expected_region_highlight=( + '1 7 assign' # foo=bar + '5 7 default' # bar + '9 10 unknown-token' # [[ + '12 13 single-hyphen-option' # -n + '15 17 default' # foo + '19 20 reserved-word' # ]] +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword5.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword5.zsh new file mode 100644 index 00000000..33f1ed14 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-before-resword5.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=bar \! :' + +expected_region_highlight=( + '1 7 assign' # foo=bar + '5 7 default' # bar + '9 9 unknown-token' # \! + '11 11 builtin' # : +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-quoted.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-quoted.zsh new file mode 100644 index 00000000..18638adb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/assignment-quoted.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'1="foo"' + +expected_region_highlight=( + '1 7 assign' # 1="foo" + '3 7 default' # "foo" + '3 7 double-quoted-argument' # "foo" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/back-quoted-argument.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/back-quoted-argument.zsh new file mode 100644 index 00000000..d504a2c7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/back-quoted-argument.zsh @@ -0,0 +1,58 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo `echo \`42\`` "is `echo equal` to" `echo 6 times 9' + +expected_region_highlight=( + "1 4 builtin" # echo + "6 18 default" # `echo \`42\`` + "6 18 back-quoted-argument" # `echo \`42\`` + "6 6 back-quoted-argument-delimiter" # ` + "7 10 builtin" # echo + "12 17 default" # \`42\` + "12 17 back-quoted-argument" # \`42\` + "12 13 back-quoted-argument-delimiter" # \` + "14 15 unknown-token" # 42 + "16 17 back-quoted-argument-delimiter" # \` + "18 18 back-quoted-argument-delimiter" # ` + "20 39 default" # "is `echo equal` to" + "20 39 double-quoted-argument" # "is `echo equal` to" + "24 35 back-quoted-argument" # `echo equal` + "24 24 back-quoted-argument-delimiter" # ` + "25 28 builtin" # echo + "30 34 default" # equal + "35 35 back-quoted-argument-delimiter" # ` + "41 55 default" # `echo 6 times 9 + "41 55 back-quoted-argument-unclosed" # `echo 6 times 9 + "41 41 back-quoted-argument-delimiter" # ` + "42 45 builtin" # echo + "47 47 default" # 6 + "49 53 default" # times + "55 55 default" # 9 +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/back-quoted-open.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/back-quoted-open.zsh new file mode 100644 index 00000000..f188d811 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/back-quoted-open.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch foo +BUFFER=$': `ls fo' + +expected_region_highlight=( + '1 1 builtin' # : + '3 8 default' # `ls fo + '3 8 back-quoted-argument-unclosed' # `ls fo + '3 3 back-quoted-argument-delimiter' # ` + '4 5 command' # ls + '7 8 path_prefix' # fo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-continuation.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-continuation.zsh new file mode 100644 index 00000000..ebcf2e17 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-continuation.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +PREBUFFER=$'echo \\\n' +BUFFER='noglob' + +expected_region_highlight=( + "1 6 default" # 'noglob' highlighted as a string, not as a precomand +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-continuation2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-continuation2.zsh new file mode 100644 index 00000000..9e2ca623 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-continuation2.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'echo foo\\\nbar"baz"' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 18 default "issue #705"' # foo\\\nbar"baz" + '14 18 double-quoted-argument "issue #705"' # "baz" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-space.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-space.zsh new file mode 100644 index 00000000..0d8a63c1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash-space.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'echo \\ \'foo\' ; ls' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 12 default' # \ \'foo\' + '8 12 single-quoted-argument' # 'foo' + '14 14 commandseparator' # ; + '16 17 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash.zsh new file mode 100644 index 00000000..ea0977f6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/backslash.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'\\' + +expected_region_highlight=( + '1 1 unknown-token' # \\ +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-assign-array.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-assign-array.zsh new file mode 100644 index 00000000..a54cf2d0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-assign-array.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=(bar abaz) \! ls' + +expected_region_highlight=( + '1 5 assign' # foo=( + '5 5 reserved-word' # ( + '6 8 default' # bar + '10 13 default' # abaz + '14 14 assign' # ) + '14 14 reserved-word' # ) + '16 16 unknown-token' # \! + '18 19 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-assign-scalar.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-assign-scalar.zsh new file mode 100644 index 00000000..e9190500 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-assign-scalar.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=bar \! ls' + +expected_region_highlight=( + '1 7 assign' # foo=bar + '5 7 default' # bar + '9 9 unknown-token' # \! + '11 12 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-pipeline.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-pipeline.zsh new file mode 100644 index 00000000..fef25f10 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/bang-pipeline.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'\! ls | \! ls' + +expected_region_highlight=( + '1 1 reserved-word' # \! + '3 4 command' # ls + '6 6 commandseparator' # | + '8 8 unknown-token' # \! + '10 11 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/braces1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/braces1.zsh new file mode 100644 index 00000000..3c5b1f0f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/braces1.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'() { echo }\n}' +# no special setopts + +expected_region_highlight=( + '1 2 reserved-word' # () + '4 4 reserved-word' # { + '6 9 builtin' # echo + '11 11 reserved-word' # } + '12 12 commandseparator' # \n + '13 13 unknown-token' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/braces2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/braces2.zsh new file mode 100644 index 00000000..a3ea7c95 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/braces2.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'() { echo }\n}' +setopt ignorebraces + +expected_region_highlight=( + '1 2 reserved-word' # () + '4 4 reserved-word' # { + '6 9 builtin' # echo + '11 11 default' # } + '12 12 commandseparator' # \n + '13 13 reserved-word' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-matching1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-matching1.zsh new file mode 100644 index 00000000..7cc6de54 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-matching1.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='[[ -n foo ]]' + +expected_region_highlight=( + '1 2 reserved-word' # [[ + '4 5 single-hyphen-option' # -n + '7 9 default' # foo + '11 12 reserved-word' # ]] +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-matching2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-matching2.zsh new file mode 100644 index 00000000..19c7f0d7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-matching2.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='[ -n foo ]' + +expected_region_highlight=( + '1 1 builtin' # [ + '3 4 single-hyphen-option' # -n + '6 8 default' # foo + '10 10 builtin' # ] +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch1.zsh new file mode 100644 index 00000000..5e6e80f2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch1.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='() { echo foo )' + +expected_region_highlight=( + '1 2 reserved-word' # () + '4 4 reserved-word' # { + '6 9 builtin' # echo + '11 13 default' # foo + '15 15 unknown-token' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch10-if-negative.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch10-if-negative.zsh new file mode 100644 index 00000000..9d0b53c6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch10-if-negative.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='elif true; then echo two; fi' + +expected_region_highlight=( + '1 4 unknown-token' # elif + '6 9 builtin' # true + '10 10 commandseparator' # ; + '12 15 unknown-token' # then + '17 20 builtin' # echo + '22 24 default' # two + '25 25 commandseparator' # ; + '27 28 unknown-token' # fi +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch2.zsh new file mode 100644 index 00000000..2d98ac21 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch2.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='() ( echo foo }' + +expected_region_highlight=( + '1 2 reserved-word' # () + '4 4 reserved-word' # ( + '6 9 builtin' # echo + '11 13 default' # foo + '15 15 unknown-token' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch3.zsh new file mode 100644 index 00000000..e33040a8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch3.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo )' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 6 unknown-token' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch4.zsh new file mode 100644 index 00000000..a9b15dcd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch4.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo }' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 6 unknown-token' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch5.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch5.zsh new file mode 100644 index 00000000..21e8bb2b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch5.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo { }' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 6 default' # { + '8 8 unknown-token' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch6.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch6.zsh new file mode 100644 index 00000000..9df83883 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch6.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='(repeat 1; do)' + +expected_region_highlight=( + '1 1 reserved-word' # ( + '2 7 reserved-word' # repeat + '9 9 default' # 1 + '10 10 commandseparator' # ; + '12 13 reserved-word' # do + '14 14 unknown-token' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch7.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch7.zsh new file mode 100644 index 00000000..1caa936c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch7.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2012 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='for n in *; do echo $n; end' + +expected_region_highlight=( + '1 3 reserved-word' # for + '5 5 default' # n + '7 8 default' # in + '10 10 default' # * + '10 10 globbing' # * + '11 11 commandseparator' # ; + '13 14 reserved-word' # do + '16 19 builtin' # echo + '21 22 default' # $n + '23 23 commandseparator' # ; + '25 27 unknown-token' # end +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch8-if-positive.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch8-if-positive.zsh new file mode 100644 index 00000000..d6838f00 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch8-if-positive.zsh @@ -0,0 +1,53 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='if false; then echo one; elif true; then echo two; else echo three; fi' + +expected_region_highlight=( + '1 2 reserved-word' # if + '4 8 builtin' # false + '9 9 commandseparator' # ; + '11 14 reserved-word' # then + '16 19 builtin' # echo + '21 23 default' # one + '24 24 commandseparator' # ; + '26 29 reserved-word' # elif + '31 34 builtin' # true + '35 35 commandseparator' # ; + '37 40 reserved-word' # then + '42 45 builtin' # echo + '47 49 default' # two + '50 50 commandseparator' # ; + '52 55 reserved-word' # else + '57 60 builtin' # echo + '62 66 default' # three + '67 67 commandseparator' # ; + '69 70 reserved-word' # fi +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch8.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch8.zsh new file mode 100644 index 00000000..07a42e36 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch8.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='(ls&)' + +expected_region_highlight=( + '1 1 reserved-word' # ( + '2 3 command' # ls + '4 4 commandseparator' # & + '5 5 reserved-word' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch9-if-positive.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch9-if-positive.zsh new file mode 100644 index 00000000..87c1ba79 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-mismatch9-if-positive.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='if false; then echo one; fi' + +expected_region_highlight=( + '1 2 reserved-word' # if + '4 8 builtin' # false + '9 9 commandseparator' # ; + '11 14 reserved-word' # then + '16 19 builtin' # echo + '21 23 default' # one + '24 24 commandseparator' # ; + '26 27 reserved-word' # fi +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-premature-termination.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-premature-termination.zsh new file mode 100644 index 00000000..fa813da9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/brackets-premature-termination.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='[[ -n foo; echo ]]' + +expected_region_highlight=( + '1 2 reserved-word' # [[ + '4 5 single-hyphen-option' # -n + '7 9 default' # foo + '10 10 unknown-token' # ; + '12 15 builtin' # echo + '17 18 default' # ]] +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cdpath-abspath.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cdpath-abspath.zsh new file mode 100644 index 00000000..64707b2f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cdpath-abspath.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +cdpath=( $PWD ) +mkdir foo foo/bar + +BUFFER="/foo" + +expected_region_highlight=( + '1 4 unknown-token' # x (/) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cmdpos-elision-partial.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cmdpos-elision-partial.zsh new file mode 100644 index 00000000..6eda0d74 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cmdpos-elision-partial.zsh @@ -0,0 +1,44 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Test elision of some, but not all of the words +# See issue #667 for the case of eliding all words +local -a x; x=(sudo "") + +sudo(){} +BUFFER=$'$x -u phy1729 ls' + +expected_region_highlight=( + '1 2 precommand' # $x + # The "" is elided. If it weren't elided, the «ls» would be highlighted as an ordinary argument. + '4 5 single-hyphen-option' # -u + '7 13 default' # phy1729 + '15 16 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-adjacent.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-adjacent.zsh new file mode 100644 index 00000000..3d5c0b9e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-adjacent.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo "$(echo)$(echo)' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 20 default' # "$(echo)$(echo) + '6 6 double-quoted-argument-unclosed' # " + '7 13 command-substitution-quoted' # $(echo) + '7 8 command-substitution-delimiter-quoted' # $( + '9 12 builtin' # echo + '13 13 command-substitution-delimiter-quoted' # ) + '14 20 command-substitution-quoted' # $(echo) + '14 15 command-substitution-delimiter-quoted' # $( + '16 19 builtin' # echo + '20 20 command-substitution-delimiter-quoted' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-in-assignment.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-in-assignment.zsh new file mode 100644 index 00000000..fafda49c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-in-assignment.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=$(echo bar) :' + +expected_region_highlight=( + '1 15 assign' # foo=$(echo bar) + '5 15 default' # $(echo bar) + '5 15 command-substitution-unquoted' # $(echo bar) + '5 6 command-substitution-delimiter-unquoted' # $( + '7 10 builtin' # echo + '12 14 default' # bar + '15 15 command-substitution-delimiter-unquoted' # ) + '17 17 builtin' # : +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-unclosed.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-unclosed.zsh new file mode 100644 index 00000000..3229dfcf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/command-substitution-unclosed.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': foo$(echo bar' + +expected_region_highlight=( + '1 1 builtin' # : + '3 15 default' # foo$(echo bar + '6 15 command-substitution-unquoted' # $(echo bar + '6 7 command-substitution-delimiter-unquoted' # $( + '8 11 builtin' # echo + '13 15 default' # bar +) + +if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug + expected_region_highlight[2]='3 16 default' # foo$(echo bar + expected_region_highlight[3]='6 16 command-substitution-unquoted' # $(echo bar +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/commandseparator.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/commandseparator.zsh new file mode 100644 index 00000000..f504847c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/commandseparator.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=':; pwd &! ls' + +expected_region_highlight=( + "1 1 builtin" # : + "2 2 commandseparator" # ; + "4 6 builtin" # pwd + "8 9 commandseparator" # &! + "11 12 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-followed.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-followed.zsh new file mode 100644 index 00000000..044f2830 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-followed.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# see alias-comment1.zsh +setopt interactivecomments +BUFFER=$'# foo\ntrue' + +expected_region_highlight=( + '1 5 comment' # # foo + '6 6 commandseparator' # \n + '7 10 builtin' # true +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-leading.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-leading.zsh new file mode 100644 index 00000000..b4c99105 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-leading.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt interactive_comments + +BUFFER='# echo foo' + +expected_region_highlight=( + "1 10 comment" # # echo foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-off.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-off.zsh new file mode 100644 index 00000000..0381bdb0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comment-off.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsetopt interactive_comments + +BUFFER='# echo foo' + +expected_region_highlight=( + "1 1 unknown-token" # # + "3 6 default" # " echo foo" + "8 10 default" # " echo foo" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comments.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comments.zsh new file mode 100644 index 00000000..f3cc57e4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/comments.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt interactive_comments + +BUFFER='echo "foo #bar" #baz # quux' + +expected_region_highlight=( + "1 4 builtin" # echo + "6 15 default" # "foo #bar" + "6 15 double-quoted-argument" # "foo #bar" + "17 27 comment" # #baz # quux +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/commmand-parameter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/commmand-parameter.zsh new file mode 100644 index 00000000..48d20ba8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/commmand-parameter.zsh @@ -0,0 +1,45 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +local x=/usr/bin/env +local y=sudo +local -a z; z=(zsh -f) +sudo(){} + +BUFFER='$x "argument"; $y; $z' + +expected_region_highlight=( + "1 2 command" # $x + "4 13 default" # "argument" + "4 13 double-quoted-argument" # "argument" + "14 14 commandseparator" # ; + "16 17 precommand" # $y (sudo) + "18 18 unknown-token" # ; + "20 21 command" # $z - 'zsh' being the command +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow.zsh new file mode 100644 index 00000000..a610bdc3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow.zsh @@ -0,0 +1,57 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='while if echo Hello; then ls /; else ls; fi; do stat "x"; done; repeat 10 ls' + +expected_region_highlight+=( + "1 5 reserved-word" # while + "7 8 reserved-word" # if + "10 13 builtin" # echo + "15 19 default" # Hello + "20 20 commandseparator" # ; + "22 25 reserved-word" # then + "27 28 command" # ls + "30 30 path" # / + "31 31 commandseparator" # ; + "33 36 reserved-word" # else + "38 39 command" # ls + "40 40 commandseparator" # ; + "42 43 reserved-word" # fi + "44 44 commandseparator" # ; + "46 47 reserved-word" # do + "49 52 command" # stat + "54 56 default" # "x" + "54 56 double-quoted-argument" # "x" + "57 57 commandseparator" # ; + "59 62 reserved-word" # done + "63 63 commandseparator" # ; + "65 70 reserved-word" # repeat + "72 73 default" # 10 + "75 76 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow2.zsh new file mode 100644 index 00000000..acf99e1d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow2.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='repeat 42; do ls; done' + +expected_region_highlight+=( + "1 6 reserved-word" # repeat + "8 9 default" # 42 + "10 10 commandseparator" # ; + "12 13 reserved-word" # do + "15 16 command" # ls + "17 17 commandseparator" # ; + "19 22 reserved-word" # done +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow3.zsh new file mode 100644 index 00000000..58f507f9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/control-flow3.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='repeat 42; ls; pwd' + +expected_region_highlight+=( + "1 6 reserved-word" # repeat + "8 9 default" # 42 + "10 10 commandseparator" # ; + "12 13 command" # ls + "14 14 commandseparator" # ; + "16 18 builtin" # pwd +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cthulhu.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cthulhu.zsh new file mode 100644 index 00000000..c8119a84 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/cthulhu.zsh @@ -0,0 +1,70 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# 0000000 0 01111111111222222 222233333 3 333344 4 4 444444555555555 5 6 6666 6 6 6667777777777888 8 8 88888999 9 9999 9 9 00 00 0000001111 +# 1234567 8 90123456789012345 678901234 5 678901 2 3 456789012345678 9 0 1234 5 6 7890123456789012 3 4 56789012 3 4567 8 9 01 23 4567890123 +BUFFER=$'echo Ph\\\'ng`echo lui "mg"\\`echo lw\\\'nafh \\\\\\`echo Cthu"lhu\\\\\\` R\\\\\'ly$(echo eh wag\\\\\\`echo h\\\'nag\\\\\\`\'l\' fht)agn`' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 113 default' # Ph\'ng`echo lui "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn` + '12 113 back-quoted-argument' # `echo lui "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn` + '12 12 back-quoted-argument-delimiter' # ` + '13 16 builtin' # echo + '18 20 default' # lui + '22 112 default' # "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn + '22 25 double-quoted-argument' # "mg" + '26 112 back-quoted-argument-unclosed' # \`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn + '26 27 back-quoted-argument-delimiter' # \` + '28 31 builtin' # echo + '33 40 default' # lw\'nafh + '42 62 default' # \\\`echo Cthu"lhu\\\` + '42 62 back-quoted-argument' # \\\`echo Cthu"lhu\\\` + '42 45 back-quoted-argument-delimiter' # \\\` + '46 49 builtin' # echo + '51 58 default' # Cthu"lhu + '55 58 double-quoted-argument-unclosed' # "lhu + '59 62 back-quoted-argument-delimiter' # \\\` + '64 112 default' # R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn + '70 109 command-substitution-unquoted' # $(echo eh wag\\\`echo h\'nag\\\`'l' fht) + '70 71 command-substitution-delimiter-unquoted' # $( + '72 75 builtin' # echo + '77 78 default' # eh + '80 104 default' # wag\\\`echo h\'nag\\\`'l' + '83 101 back-quoted-argument' # \\\`echo h\'nag\\\` + '83 86 back-quoted-argument-delimiter' # \\\` + '87 90 builtin' # echo + '92 97 default' # h\'nag + '98 101 back-quoted-argument-delimiter' # \\\` + '102 104 single-quoted-argument' # 'l' + '106 108 default' # fht + '109 109 command-substitution-delimiter-unquoted' # ) + '113 113 unknown-token' # ` +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dinbrack1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dinbrack1.zsh new file mode 100644 index 00000000..e2279d6b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dinbrack1.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'[[ foo && bar || baz ]]' + +expected_region_highlight=( + '1 2 reserved-word' # [[ + '4 6 default' # foo + '8 9 default' # && + '11 13 default' # bar + '15 16 default' # || + '18 20 default' # baz + '22 23 reserved-word' # ]] +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dirs_blacklist.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dirs_blacklist.zsh new file mode 100644 index 00000000..2d0222f0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dirs_blacklist.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +mkdir foo +touch foo/bar +BUFFER=": foo/bar $PWD/foo foo/b" +ZSH_HIGHLIGHT_DIRS_BLACKLIST=($PWD/foo $PWD/bar) + +expected_region_highlight=( + '1 1 builtin' # : + '3 9 default' # foo/bar + "11 $(( 14 + $#PWD )) default" # $PWD/foo + "$(( 16 + $#PWD )) $(( 20 + $#PWD )) default" # foo/b +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-dollar.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-dollar.zsh new file mode 100644 index 00000000..e3f387ce --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-dollar.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': "$$ $$foo"' + +expected_region_highlight=( + '1 1 builtin' # : + '3 12 default' # "$$ $$foo" + '3 12 double-quoted-argument' # "$$ $$foo" + '4 5 dollar-double-quoted-argument' # $$ + '7 8 dollar-double-quoted-argument' # $$ +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-noise.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-noise.zsh new file mode 100644 index 00000000..9bb11bd8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-noise.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': "$- $# $* $@ $?"' + +expected_region_highlight=( + '1 1 builtin' # : + '3 18 default' # "$- $# $* $@ $?" + '3 18 double-quoted-argument' # "$- $# $* $@ $?" + '4 5 dollar-double-quoted-argument' # $- + '7 8 dollar-double-quoted-argument' # $# + '10 11 dollar-double-quoted-argument' # $* + '13 14 dollar-double-quoted-argument' # $@ + '16 17 dollar-double-quoted-argument' # $? +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-paren.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-paren.zsh new file mode 100644 index 00000000..2bbcef18 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-paren.zsh @@ -0,0 +1,49 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': "$(:)" "foo$(:)bar' + +expected_region_highlight=( + '1 1 builtin' # : + '3 8 default' # "$(:)" + '3 3 double-quoted-argument' # "$(:)" + '8 8 double-quoted-argument' # "$(:)" + '4 7 command-substitution-quoted' # $(:) + '4 5 command-substitution-delimiter-quoted' # $( + '6 6 builtin' # : + '7 7 command-substitution-delimiter-quoted' # ) + '10 20 default' # "foo$(:)bar + '10 13 double-quoted-argument-unclosed' # "foo + '18 20 double-quoted-argument-unclosed' # bar + '14 17 command-substitution-quoted' # $(:) + '14 15 command-substitution-delimiter-quoted' # $( + '16 16 builtin' # : + '17 17 command-substitution-delimiter-quoted' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted.zsh new file mode 100644 index 00000000..081a365b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=": \$'*' 'foo'" + +expected_region_highlight=( + "1 1 builtin" # : + "3 6 default" # $'*' + "3 6 dollar-quoted-argument" # $'*' - not a glob + "8 12 default" # 'foo' + "8 12 single-quoted-argument" # 'foo' +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted2.zsh new file mode 100644 index 00000000..ed7428bd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted2.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=": \$'foo\xbar\udeadbeef\uzzzz'" + +expected_region_highlight=( + "1 1 builtin" # : + "3 29 default" # $'foo\xbar\udeadbeef\uzzzz' + "3 29 dollar-quoted-argument" # $'foo\xbar\udeadbeef\uzzzz' + "8 11 back-dollar-quoted-argument" # \xba + "13 18 back-dollar-quoted-argument" # \dead + "23 24 unknown-token" # \u +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted3.zsh new file mode 100644 index 00000000..365f3519 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/dollar-quoted3.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Similar to double-quoted2.zsh +# This test checks that the '1' gets highlighted correctly. Do not append to the BUFFER. +BUFFER=": \$'\xa1" + +expected_region_highlight=( + "1 1 builtin" # : + "3 8 default" # $'\xa1 + "3 8 dollar-quoted-argument-unclosed" # $'\xa1 + "5 8 back-dollar-quoted-argument" # \xa1 +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-hyphen-option.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-hyphen-option.zsh new file mode 100644 index 00000000..e5cacd37 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-hyphen-option.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='hello --world' + +expected_region_highlight=( + "1 5 unknown-token" # hello + "7 13 double-hyphen-option" # --world +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted.zsh new file mode 100644 index 00000000..0a4336ca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': "foo$bar:\`:\":\$:' +BUFFER+=\\\\:\" + +expected_region_highlight=( + "1 1 builtin" # : + "3 24 default" # "foo$bar:\`:\":\$:\\:" + "3 24 double-quoted-argument" # "foo$bar:\`:\":\$:\\:" + "7 10 dollar-double-quoted-argument" # $bar + "12 13 back-double-quoted-argument" # \` + "15 16 back-double-quoted-argument" # \$ + "18 19 back-double-quoted-argument" # \" + "21 22 back-double-quoted-argument" # \\ +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted2.zsh new file mode 100644 index 00000000..c400e543 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted2.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Similar to dollar-quoted3.zsh +# This test checks that the 'r' gets highlighted correctly. Do not append to the BUFFER. +BUFFER=': "foo$bar' + +expected_region_highlight=( + "1 1 builtin" # : + "3 10 default" # "foo$bar + "3 10 double-quoted-argument-unclosed" # "foo$bar + "7 10 dollar-double-quoted-argument" # $bar +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted3.zsh new file mode 100644 index 00000000..86e3ced6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted3.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': "$" "$42foo"' +BUFFER+=\ \"\\\'\\x\" + +expected_region_highlight=( + "1 1 builtin" # : + "3 5 default" # "$" + "3 5 double-quoted-argument" # "$" + "7 14 default" # "$42foo" + "7 14 double-quoted-argument" # "$42foo" + "8 10 dollar-double-quoted-argument" # $42 + "16 21 default" # "\'\x" + "16 21 double-quoted-argument" # "\'\x" - \' and \x are not escape sequences +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted4.zsh new file mode 100644 index 00000000..c59d5d8e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/double-quoted4.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': "${foo}bar"' + +expected_region_highlight=( + "1 1 builtin" # : + "3 13 default" # "${foo}bar" + "3 13 double-quoted-argument" # "${foo}bar" + "4 9 dollar-double-quoted-argument" # ${foo} +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command-newline.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command-newline.zsh new file mode 100644 index 00000000..4b7b35c6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command-newline.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Newline after semicolon isn't unknown-token +BUFFER=$':;\n:' + +expected_region_highlight=( + '1 1 builtin' # : + '2 2 commandseparator' # ; + '3 3 commandseparator' # \n + '4 4 builtin' # : +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command.zsh new file mode 100644 index 00000000..5831464d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo; ;' + +expected_region_highlight=( + "1 4 builtin" # echo + "5 5 commandseparator" # ; + "7 7 unknown-token" # ; +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command2.zsh new file mode 100644 index 00000000..dcb4e6f7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-command2.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Same test data and expectations as empty-command.zsh; the only difference is: +touch ';' + +BUFFER='echo; ;' + +expected_region_highlight=( + "1 4 builtin" # echo + "5 5 commandseparator" # ; + "7 7 unknown-token" # ; +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-line.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-line.zsh new file mode 100644 index 00000000..a4d6685b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/empty-line.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'\\\n; ls' + +expected_region_highlight=( + '3 3 unknown-token' # ; + '5 6 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals1.zsh new file mode 100644 index 00000000..77f46e8d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals1.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': =ls' + +expected_region_highlight=( + '1 1 builtin' # : + '3 5 path' # =ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals2.zsh new file mode 100644 index 00000000..bd59ff75 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals2.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsetopt equals + +BUFFER=$': =nosuchcommand' + +expected_region_highlight=( + '1 1 builtin' # : + '3 16 default' # =nosuchcommand +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals3.zsh new file mode 100644 index 00000000..8c107890 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals3.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': =nosuchcommand' + +expected_region_highlight=( + '1 1 builtin' # : + '3 16 unknown-token' # =nosuchcommand +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals4.zsh new file mode 100644 index 00000000..28bc2148 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/equals4.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': =' + +expected_region_highlight=( + '1 1 builtin' # : + '3 3 default' # = +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/escaped-single-quote.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/escaped-single-quote.zsh new file mode 100644 index 00000000..4b2fe4bc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/escaped-single-quote.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': \'foo\'\\\'\'bar\'' # <<<: 'foo'\''bar'>>> + +expected_region_highlight=( + '1 1 builtin' # : + '3 14 default' # 'foo'\''bar' + '3 7 single-quoted-argument' # 'foo' + '10 14 single-quoted-argument' # 'bar' +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/exec-redirection1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/exec-redirection1.zsh new file mode 100644 index 00000000..78a0c623 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/exec-redirection1.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='exec {foo}>&/tmp ls' + +expected_region_highlight=( + "1 4 precommand" # exec + "6 10 named-fd" # {foo} + "11 12 redirection" # >& + "13 16 path" # /tmp + "18 19 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/fd-target-not-filename.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/fd-target-not-filename.zsh new file mode 100644 index 00000000..5c3cd089 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/fd-target-not-filename.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch 2 + +BUFFER=$'echo foo>&2' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 8 default' # foo + '9 10 redirection' # >& + '11 11 numeric-fd' # 2 (not path) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-altsyntax.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-altsyntax.zsh new file mode 100644 index 00000000..0f9a8339 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-altsyntax.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Define named and anonymous function using the alternative syntax +BUFFER=$'function f { pwd }; function { pwd }' + +expected_region_highlight=( + '1 8 reserved-word' # function + '10 10 default' # f + '12 12 reserved-word "issue #237"' # { + '14 16 command "issue #237"' # pwd + '18 18 reserved-word "issue #237"' # } + '19 19 commandseparator' # ; + '21 28 reserved-word' # function + '30 30 reserved-word "issue #237"' # { + '32 34 command "issue #237"' # pwd + '36 36 reserved-word "issue #237"' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-named1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-named1.zsh new file mode 100644 index 00000000..c962ddbb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-named1.zsh @@ -0,0 +1,44 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='f() pwd; f() { balanced braces }' + +expected_region_highlight=( + '1 1 TBD "issue #223"' # f + '2 3 reserved-word' # () + '5 7 builtin' # pwd + '8 8 commandseparator' # ; + '10 10 TBD "issue #223"' # f + '11 12 reserved-word' # () + '14 14 reserved-word' # { + '16 23 unknown-token' # balanced + '25 30 default' # braces + '32 32 reserved-word' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-named2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-named2.zsh new file mode 100644 index 00000000..e12fce6a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function-named2.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='f g h () pwd' + +expected_region_highlight=( + '1 1 TBD "issue #223"' # f + '3 3 TBD "issue #223"' # g + '5 5 TBD "issue #223"' # h + '7 8 reserved-word' # () + '10 12 builtin' # pwd +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function.zsh new file mode 100644 index 00000000..b1be8539 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/function.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +cd() { + builtin cd "$@" +} +ls() { + command ls "$@" +} +BUFFER='cd;ls' + +expected_region_highlight=( + "1 2 function" # cd + "3 3 commandseparator" # ; + "4 5 function" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/glob.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/glob.zsh new file mode 100644 index 00000000..2ff1022e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/glob.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': foo* bar? *baz qux\?' + +expected_region_highlight=( + "1 1 builtin" # : + "3 6 default" # foo* + "6 6 globbing" # * + "8 11 default" # bar? + "11 11 globbing" # ? + "13 16 default" # *baz + "13 13 globbing" # * + "18 22 default" # qux\? +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/global-alias1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/global-alias1.zsh new file mode 100644 index 00000000..0022de3c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/global-alias1.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias -g foo=bar + +BUFFER=$'foo foo' + +expected_region_highlight=( + '1 3 global-alias' # foo + '5 7 global-alias' # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/globs-with-quoting.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/globs-with-quoting.zsh new file mode 100644 index 00000000..d7d74bc4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/globs-with-quoting.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': "foo"*\'bar\'?"baz?"<17-29>"qu*ux"' + +expected_region_highlight=( + '1 1 builtin' # : + '3 34 default' # "foo"*'bar'?"baz?"<17-29>"qu*ux" + '3 7 double-quoted-argument' # "foo" + '8 8 globbing' # * + '9 13 single-quoted-argument' # 'bar' + '14 14 globbing' # ? + '15 20 double-quoted-argument' # "baz?" + '21 27 globbing' # <17-29> + '28 34 double-quoted-argument' # "qu*ux" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/hashed-command.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/hashed-command.zsh new file mode 100644 index 00000000..2983ef8d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/hashed-command.zsh @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +hash zsh_syntax_highlighting_hash=/doesnotexist +BUFFER='zsh_syntax_highlighting_hash' + +expected_region_highlight=( + "1 28 hashed-command 'zsh/parameter cannot distinguish between hashed and command'" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-escaped.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-escaped.zsh new file mode 100644 index 00000000..7807cc06 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-escaped.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo "Hello\!"' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 14 default' # "Hello\!" + '6 14 double-quoted-argument' # "Hello\!" + '12 13 back-double-quoted-argument' # \! +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-followed.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-followed.zsh new file mode 100644 index 00000000..6421ceda --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-followed.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': !!= "!!="' + +expected_region_highlight=( + '1 1 builtin' # : + '3 4 history-expansion "issue #713"' # !! + '7 11 default' # "!!=" + '7 11 double-quoted-argument' # "!!=" + '8 9 history-expansion "issue #713' # !! +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-no.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-no.zsh new file mode 100644 index 00000000..e082dbcf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-no.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo "foo != bar !{baz}"' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 24 default' # "foo != bar !{baz}" + '6 24 double-quoted-argument' # "foo != bar !{baz}" - no history expansions +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-unescaped.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-unescaped.zsh new file mode 100644 index 00000000..cfe6a11d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-unescaped.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo "Hello!"' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 13 default' # "Hello!" + '6 13 double-quoted-argument' # "Hello!" + '12 12 history-expansion' # ! +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-yes.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-yes.zsh new file mode 100644 index 00000000..e963c3b9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-double-quoted-yes.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='echo "foo !bar"' + +expected_region_highlight=( + '1 4 builtin' # echo + '6 15 default' # "foo !bar" + '6 15 double-quoted-argument' # "foo !bar" + '11 11 history-expansion' # ! +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-expansion.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-expansion.zsh new file mode 100644 index 00000000..05e20fc1 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-expansion.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='!foo bar !baz ! ; !' + +expected_region_highlight=( + "1 4 history-expansion" # !foo + "6 8 default" # bar + "10 13 history-expansion" # !baz + "15 15 default" # ! + "17 17 commandseparator" # ; + "19 19 reserved-word" # ! +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-expansion2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-expansion2.zsh new file mode 100644 index 00000000..386d0df9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/history-expansion2.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='^foo^bar' + +expected_region_highlight=( + "1 8 history-expansion" # ^foo^bar +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/inheritance.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/inheritance.zsh new file mode 100644 index 00000000..e851ca3e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/inheritance.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +_zsh_highlight_add_highlight() +{ + region_highlight+=("$1 $2 ${(j.,.)argv[3,-1]}") +} + +BUFFER='type' + +expected_region_highlight=( + '1 4 builtin,arg0' # type +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/jobsubst-isnt-glob.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/jobsubst-isnt-glob.zsh new file mode 100644 index 00000000..3a7e325a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/jobsubst-isnt-glob.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018.9958 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': %? %?foo' + +expected_region_highlight=( + '1 1 builtin' # : + '3 4 default' # %? + '6 10 default' # %?foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/jobsubst-isnt-glob2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/jobsubst-isnt-glob2.zsh new file mode 100644 index 00000000..51930bfb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/jobsubst-isnt-glob2.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': foo%?bar' + +expected_region_highlight=( + '1 1 builtin' # : + '3 10 default' # foo%?bar + '7 7 globbing' # ? +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/loop-newline.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/loop-newline.zsh new file mode 100644 index 00000000..d39ee112 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/loop-newline.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'for i in \\\n; do done' + +expected_region_highlight=( + '1 3 reserved-word' # for + '5 5 default' # i + '7 8 default' # in + '12 12 commandseparator' # ; + '14 15 reserved-word' # do + '17 20 reserved-word' # done +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/meta-no-eval1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/meta-no-eval1.zsh new file mode 100644 index 00000000..bb040777 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/meta-no-eval1.zsh @@ -0,0 +1,49 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $(kill -9 $$) ${:-$(kill -9 $$)}' + +expected_region_highlight=( + '1 1 builtin' # : + '3 15 default' # $(kill -9 $$) + '3 15 command-substitution-unquoted' # $(kill -9 $$) + '3 4 command-substitution-delimiter-unquoted' # $( + '5 8 builtin' # kill + '10 11 single-hyphen-option' # -9 + '13 14 default' # $$ + '15 15 command-substitution-delimiter-unquoted' # ) + '17 34 default' # ${:-$(kill -9 $$)} + '21 33 command-substitution-unquoted' # $(kill -9 $$) + '21 22 command-substitution-delimiter-unquoted' # $( + '23 26 builtin' # kill + '28 29 single-hyphen-option' # -9 + '31 32 default' # $$ + '33 33 command-substitution-delimiter-unquoted' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/meta-no-eval2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/meta-no-eval2.zsh new file mode 100644 index 00000000..61ef0892 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/meta-no-eval2.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# We aren't testing how this is highlighted; we're testing that it's not +# evaluated. If it gets evaluated, the test suite will die. +BUFFER=$': /(e*exit 42*)' + +expected_region_highlight=( + '1 1 builtin' # : + '3 15 default' # /(e*exit 42*) + '6 6 globbing' # * + '14 14 globbing' # * +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-array-assignment1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-array-assignment1.zsh new file mode 100644 index 00000000..8906cfde --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-array-assignment1.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'foo=(\nbar) env' + +expected_region_highlight=( + '1 5 assign' # foo=( + '5 5 reserved-word' # ( + '6 6 commandseparator' # \n + '7 9 default' # bar + '10 10 assign' # ) + '10 10 reserved-word' # ) + '12 14 precommand' # env +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-string.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-string.zsh new file mode 100644 index 00000000..0127b4bf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-string.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +PREBUFFER=$'echo "foo1\n' +BUFFER='foo2" ./' + +expected_region_highlight=( + "1 5 default" # 'foo2"' + "1 5 double-quoted-argument" # 'foo2"' + "7 8 path" # './' +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-string2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-string2.zsh new file mode 100644 index 00000000..3a90dce8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiline-string2.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'echo \'foo1\n' + +expected_region_highlight=( + "1 4 builtin" # echo + "6 11 default" # 'foo1\n + "6 11 single-quoted-argument-unclosed" # 'foo1\n +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multios-negates-globbing.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multios-negates-globbing.zsh new file mode 100644 index 00000000..7ece6708 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multios-negates-globbing.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +unsetopt multios + +BUFFER=$'cat < *' + +expected_region_highlight=( + '1 3 command' # cat + '5 5 redirection' # < + '7 7 default' # * - not globbing +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multios-negates-globbing2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multios-negates-globbing2.zsh new file mode 100644 index 00000000..b6db983d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multios-negates-globbing2.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'cat < *' + +expected_region_highlight=( + '1 3 command' # cat + '5 5 redirection' # < + '7 7 default' # * + '7 7 globbing' # * +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiple-quotes.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiple-quotes.zsh new file mode 100644 index 00000000..dabf70c8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiple-quotes.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': \'foo\'bar"baz$quux/foo\\\\bar"baz$\'quux\\nfoo\\001bar\'baz' + +expected_region_highlight=( + "1 1 builtin" # : + "3 54 default" # 'foo'bar"baz$quux/foo\\bar"baz$'quux\nfoo\001'baz + "3 7 single-quoted-argument" # 'foo' + "11 29 double-quoted-argument" #"baz + "15 19 dollar-double-quoted-argument" # $quux + "24 25 back-double-quoted-argument" # \\ + "33 51 dollar-quoted-argument" # $'quux\nfoo\001bar' + "39 40 back-dollar-quoted-argument" # \n + "44 47 back-dollar-quoted-argument" # \001 +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiple-redirections.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiple-redirections.zsh new file mode 100644 index 00000000..778e7129 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/multiple-redirections.zsh @@ -0,0 +1,46 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ps aux | grep java | sort | uniq | tail | head' + +expected_region_highlight=( + "1 2 command" # ps + "4 6 default" # aux + "8 8 commandseparator" # | + "10 13 command" # grep + "15 18 default" # java + "20 20 commandseparator" # | + "22 25 command" # sort + "27 27 commandseparator" # | + "29 32 command" # uniq + "34 34 commandseparator" # | + "36 39 command" # tail + "41 41 commandseparator" # | + "43 46 command" # head +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob-alias.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob-alias.zsh new file mode 100644 index 00000000..2f96445e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob-alias.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias x=command +BUFFER='x ls' + +expected_region_highlight=( + "1 1 alias" # x + "3 4 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob-always.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob-always.zsh new file mode 100644 index 00000000..6d550489 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob-always.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'{ noglob echo * } always { echo * }' + +expected_region_highlight=( + '1 1 reserved-word' # { + '3 8 precommand' # noglob + '10 13 builtin' # echo + '15 15 default' # * + '17 17 reserved-word' # } + '19 24 reserved-word' # always + '26 26 reserved-word' # { + '28 31 builtin' # echo + '33 33 default' # * + '33 33 globbing' # * + '35 35 reserved-word' # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob1.zsh new file mode 100644 index 00000000..1857db0c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob1.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=':; noglob echo *' + +expected_region_highlight=( + "1 1 builtin" # : + "2 2 commandseparator" # ; + "4 9 precommand" # noglob + "11 14 builtin" # echo + "16 16 default" # * +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob2.zsh new file mode 100644 index 00000000..3b4fcd76 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob2.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='noglob echo *; echo *' + +expected_region_highlight=( + "1 6 precommand" # noglob + "8 11 builtin" # echo + "13 13 default" # * + "14 14 commandseparator" # ; + "16 19 builtin" # echo + "21 21 default" # * + "21 21 globbing" # * +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob3.zsh new file mode 100644 index 00000000..c404aaac --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob3.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch \* + +BUFFER='noglob echo *' + +expected_region_highlight=( + "1 6 precommand" # noglob + "8 11 builtin" # echo + "13 13 path" # * +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob4.zsh new file mode 100644 index 00000000..cc7065f5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/noglob4.zsh @@ -0,0 +1,45 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'noglob cat <(print -r -- *)' + +expected_region_highlight=( + '1 6 precommand' # noglob + '8 10 command' # cat + '12 27 default' # <(print -r -- *) + '12 27 process-substitution' # <(print -r -- *) + '12 13 process-substitution-delimiter' # <( + '14 18 builtin' # print + '20 21 single-hyphen-option' # -r + '23 24 double-hyphen-option' # -- + '26 26 default' # * + '26 26 globbing' # * + '27 27 process-substitution-delimiter' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/null-exec.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/null-exec.zsh new file mode 100644 index 00000000..be1e3064 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/null-exec.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'exec >/dev/null;' + +expected_region_highlight=( + '1 4 precommand' # exec + '6 6 redirection' # > + '7 15 path' # /dev/null + '16 16 commandseparator' # ; +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/number_range-glob.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/number_range-glob.zsh new file mode 100644 index 00000000..c8409510 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/number_range-glob.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='print <-> x<->y ' + +expected_region_highlight=( + '1 5 builtin' # print + '7 9 default' # <-> + '7 9 globbing' # <-> + '11 15 default' # x<->y + '12 14 globbing' # <-> + '17 17 redirection' # < + '18 23 default' # foo2-3 (the filename) + '24 24 redirection' # > +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/off-by-one.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/off-by-one.zsh new file mode 100644 index 00000000..872143af --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/off-by-one.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +alias a=: +f() {} + +BUFFER='a;f;' + +expected_region_highlight=( + "1 1 alias" # a + "2 2 commandseparator" # ; + "3 3 function" # f + "4 4 commandseparator" # ; +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/opt-shwordsplit1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/opt-shwordsplit1.zsh new file mode 100644 index 00000000..74557855 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/opt-shwordsplit1.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt shwordsplit +local EDITOR='ed -s' + +ed() { command ed "$@" } + +BUFFER=$'$EDITOR' + +expected_region_highlight=( + '1 7 function "issue #687"' # $EDITOR +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/optimized-cmdsubst-input.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/optimized-cmdsubst-input.zsh new file mode 100644 index 00000000..ca55ef83 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/optimized-cmdsubst-input.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# See getoutput() and getoutputfile() in zsh's C source code. + +BUFFER=$': $(<*)' + +expected_region_highlight=( + '1 1 builtin' # : + '3 7 default' # $(<*) + '3 7 command-substitution-unquoted' # $(<*) + '3 4 command-substitution-delimiter-unquoted' # $( + '5 5 redirection' # < + '6 6 default' # * - not globbing! + '7 7 command-substitution-delimiter-unquoted' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-dollar-quote-isnt-filename.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-dollar-quote-isnt-filename.zsh new file mode 100644 index 00000000..897a02e6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-dollar-quote-isnt-filename.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': -$\'n\'' + +touch ./-n + +expected_region_highlight=( + '1 1 builtin' # : + '3 7 single-hyphen-option' # -$'n' + '4 7 dollar-quoted-argument' # $'n' +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-path_dirs.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-path_dirs.zsh new file mode 100644 index 00000000..0300c7e5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-path_dirs.zsh @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +if [[ $OSTYPE == msys ]]; then + skip_test='Cannot chmod +x in msys2' +else + setopt PATH_DIRS + mkdir -p foo/bar + touch foo/bar/testing-issue-228 + chmod +x foo/bar/testing-issue-228 + path+=( "$PWD"/foo ) + + BUFFER='bar/testing-issue-228' + + expected_region_highlight=( + "1 21 command" # bar/testing-issue-228 + ) +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-with-quotes.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-with-quotes.zsh new file mode 100644 index 00000000..6286f034 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/option-with-quotes.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': --user="phy1729"' + +expected_region_highlight=( + '1 1 builtin' # : + '3 18 double-hyphen-option' # --user="phy1729" + '10 18 double-quoted-argument' # "phy1729" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/order-path-after-dollar.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/order-path-after-dollar.zsh new file mode 100644 index 00000000..773c1838 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/order-path-after-dollar.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch '$foo' +BUFFER=': $foo \$foo' + +expected_region_highlight=( + '1 1 builtin' # : + '3 6 default' # $foo - if we add a "unquoted parameter expansion" style then this expectation should change + '8 12 path' # \$foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/order-path-before-globbing.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/order-path-before-globbing.zsh new file mode 100644 index 00000000..8456b181 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/order-path-before-globbing.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch '*' +BUFFER=': * \*' + +expected_region_highlight=( + '1 1 builtin' # : + '3 3 default' # * + '3 3 globbing' # * + '5 6 path' # \* +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-positional-in-array-append.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-positional-in-array-append.zsh new file mode 100644 index 00000000..bd39e021 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-positional-in-array-append.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# This used to be an infinite loop. + +BUFFER=$'l+=( $1' + +expected_region_highlight=( + '1 4 assign' # l+=( + '4 4 reserved-word' # ( + '6 7 default' # $1 +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-precommand-option-argument1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-precommand-option-argument1.zsh new file mode 100644 index 00000000..84cf03ac --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-precommand-option-argument1.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# See also alias-precommand-option-argument1.zsh +local -a sudo_u; sudo_u=(sudo -u) +sudo(){} + +BUFFER='$sudo_u phy1729 echo foo' + +expected_region_highlight=( + '1 7 precommand' # $sudo_u + '9 15 default' # phy1729 + '18 20 command "issue #540"' # echo (not builtin) + '22 24 default' # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-precommand-option-argument3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-precommand-option-argument3.zsh new file mode 100644 index 00000000..9a8dde28 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/param-precommand-option-argument3.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# See also alias-precommand-option-argument3.zsh +local -a sudo_u; sudo_u=(sudo -u) +sudo(){} + +BUFFER='$sudo_u phy1729 ls foo' + +expected_region_highlight=( + '1 7 precommand' # sudo_u + '9 15 default' # phy1729 + '17 18 command' # ls + '20 22 default' # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-elision-command-word.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-elision-command-word.zsh new file mode 100644 index 00000000..25f649a2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-elision-command-word.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='$x ls' + +expected_region_highlight=( + '1 2 comment' # $x + '4 5 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-expansion-untokenized1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-expansion-untokenized1.zsh new file mode 100644 index 00000000..8b8b5e4c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-expansion-untokenized1.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +local x="()" + +BUFFER=$'$x ls' + +expected_region_highlight=( + '1 2 unknown-token' # $x + '4 5 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-expansion-untokenized2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-expansion-untokenized2.zsh new file mode 100644 index 00000000..d23a1f21 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-expansion-untokenized2.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +local x="^foo^bar" + +BUFFER=$'$x ls' + +expected_region_highlight=( + '1 2 unknown-token' # $x + '4 5 default' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-star.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-star.zsh new file mode 100644 index 00000000..2311be07 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-star.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='() { : $* }' + +# This tests that $* isn't highlighted as a glob. +# If we ever add a "unquoted parameter" style, the expectation may change. +expected_region_highlight=( + "1 2 reserved-word" # () + "4 4 reserved-word" # { + "6 6 builtin" # : + "8 9 default" # $* + "11 11 reserved-word" # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-to-global-alias.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-to-global-alias.zsh new file mode 100644 index 00000000..cd2283bf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-to-global-alias.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +if type x >/dev/null; then + skip_test="Test is written on the assumption that 'x' is not a valid command name, but that assumption does not hold" + return 0 +fi +alias -g x=y +local s=x + +BUFFER=$'$s' + +expected_region_highlight=( + '1 2 unknown-token' # $s +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-value-contains-command-position1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-value-contains-command-position1.zsh new file mode 100644 index 00000000..05ea1bfa --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-value-contains-command-position1.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +local foobar='x=$(ls)' + +BUFFER=$'$foobar' + +expected_region_highlight=( + # Used to highlight the "ba" as 'command' because the 'ls' showed through; issues #670 and #674 + '1 7 unknown-token' # $foobar (not an assignment) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-value-contains-command-position2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-value-contains-command-position2.zsh new file mode 100644 index 00000000..5042e899 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/parameter-value-contains-command-position2.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +local y='x=$(ls)' + +BUFFER=$'$y' + +expected_region_highlight=( + # Used to trigger a "BUG" message on stderr - issues #670 and #674 + '1 2 unknown-token' # $y (not an assignment) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/pasted-quotes.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/pasted-quotes.zsh new file mode 100644 index 00000000..f37f21b3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/pasted-quotes.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2013 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': \'foo\'bar"baz"' + +expected_region_highlight=( + '1 1 builtin' # : + '3 15 default' # \'foo\'bar"baz" + '3 7 single-quoted-argument' # \'foo\' + '11 15 double-quoted-argument' # "baz" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-broken-symlink.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-broken-symlink.zsh new file mode 100644 index 00000000..baebee36 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-broken-symlink.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +if [[ $OSTYPE == msys ]]; then + skip_test='Cannot create symlinks in msys2' +else + ln -s /nonexistent broken-symlink + BUFFER=': broken-symlink' + CURSOR=5 # to make path_prefix ineligible + + expected_region_highlight=( + "1 1 builtin" # : + "3 16 path" # broken-symlink + ) +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word.zsh new file mode 100644 index 00000000..99055da9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word.zsh @@ -0,0 +1,45 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +if [[ $OSTYPE == msys ]]; then + skip_test='Cannot chmod +x in msys2' # cargo culted from option-path_dirs.zsh +else + mkdir kappa + touch kappa.exe + chmod +x kappa.exe + cd kappa + + BUFFER='$PWD.exe; ${PWD}.exe' + + expected_region_highlight=( + "1 8 unknown-token" # $PWD.exe - not eval'd; issue #328 + "9 9 commandseparator" # ; + "11 20 unknown-token" # ${PWD}.exe + ) +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word2.zsh new file mode 100644 index 00000000..f404d5d0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word2.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +local lambda="''" +touch \$lambda +BUFFER=': \$lambda' + +expected_region_highlight=( + "1 1 builtin" # : + "3 10 path" # \$lambda +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word3.zsh new file mode 100644 index 00000000..ec981b1e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word3.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# «/usr» at this point would be highlighted as path_prefix; so should +# a parameter that expands to an equivalent string be highlighted. +# +# More complicated parameter substitutions aren't eval'd; issue #328. +BUFFER='$PWD; ${PWD}' + +expected_region_highlight=( + "1 4 unknown-token" # $PWD (without AUTO_CD) + "5 5 commandseparator" # ; + "7 12 path_prefix" # ${PWD} +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word3b.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word3b.zsh new file mode 100644 index 00000000..72a2f7c4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word3b.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt autocd +BUFFER=$'$PWD; ${PWD}' + +expected_region_highlight=( + '1 4 autodirectory' # $PWD + '5 5 commandseparator' # ; + '7 12 autodirectory' # ${PWD} +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word4.zsh new file mode 100644 index 00000000..e29182cc --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-dollared-word4.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# This tests for a regression during development of issue #328: an interim version +# of that branch failed that test with "Bail out! output on stderr". +BUFFER='${' + +expected_region_highlight=( + "1 2 unknown-token" # ${ +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-mixed-quoting.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-mixed-quoting.zsh new file mode 100644 index 00000000..cbd0b38e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-mixed-quoting.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch foo + +BUFFER=$': \'f\'oo' + +expected_region_highlight=( + '1 1 builtin' # : + '3 7 path' # \'f\'oo + '3 5 single-quoted-argument' # \'f\' +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-separators.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-separators.zsh new file mode 100644 index 00000000..52749b79 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-separators.zsh @@ -0,0 +1,53 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# ZSH_HIGHLIGHT_STYLES is empty in tests. The path-separator code however compares its values. +# Make sure the relevant ones are set to something. +ZSH_HIGHLIGHT_STYLES[path_pathseparator]=set +ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]=set + +mkdir A +touch A/mu +BUFFER='ls /bin/ / A/mu A/m' + +expected_region_highlight=( + "1 2 command" # ls + "4 8 path" # /bin/ + "4 4 path_pathseparator" # / + "8 8 path_pathseparator" # / + + "10 10 path" # / + "10 10 path_pathseparator" # / + + "12 15 path" # A/mu + "13 13 path_pathseparator" # / + + "17 19 path_prefix" # A/m + "18 18 path_prefix_pathseparator" # / +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-separators2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-separators2.zsh new file mode 100644 index 00000000..bc885a06 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-separators2.zsh @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# ZSH_HIGHLIGHT_STYLES is empty in tests. The path-separator code however compares its values. +# For this test, make sure both these styles are set and identical: +ZSH_HIGHLIGHT_STYLES[path]=value +ZSH_HIGHLIGHT_STYLES[path_pathseparator]=value + +BUFFER='ls /bin/' + +expected_region_highlight=( + "1 2 command" # ls + "4 8 path" # /bin/ +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-space.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-space.zsh new file mode 100644 index 00000000..87cc22f9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-space.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +mkdir A +touch "A/mu with spaces" +BUFFER='ls A/mu\ with\ spaces' + +expected_region_highlight=( + "1 2 command" # ls + "4 21 path" # A/mu\ with\ spaces +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home.zsh new file mode 100644 index 00000000..8b1c6805 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +HOME="." +BUFFER='ls ~' + +expected_region_highlight=( + "1 2 command" # ls + "4 4 path" # ~ +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home2.zsh new file mode 100644 index 00000000..3f7b8200 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home2.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +HOME="/nonexistent" +BUFFER='ls ~' + +expected_region_highlight=( + "1 2 command" # ls + "4 4 default" # ~ +) + diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home3.zsh new file mode 100644 index 00000000..5c076e88 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-home3.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +HOME="." +BUFFER='ls \~' + +expected_region_highlight=( + "1 2 command" # ls + "4 5 default" # \~ +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-named.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-named.zsh new file mode 100644 index 00000000..335b3fdf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path-tilde-named.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +mkdir mydir +touch mydir/path-tilde-named.test +hash -d D=mydir + +BUFFER='ls ~D/path-tilde-named.test' + +expected_region_highlight=( + "1 2 command" # ls + "4 27 path" # ~D/path-tilde-named.test +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path.zsh new file mode 100644 index 00000000..d387eff3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +mkdir A +touch A/mu +BUFFER='ls A/mu' + +expected_region_highlight=( + "1 2 command" # ls + "4 7 path" # A/mu +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix.zsh new file mode 100644 index 00000000..3303bfb4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Assumes that '/bin/sh' exists and '/bin/s' does not exist. +# Related to path_prefix2.zsh + +BUFFER='ls /bin/s' + +expected_region_highlight=( + "1 2 command" # ls + "4 9 path_prefix" # /bin/s +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix2.zsh new file mode 100644 index 00000000..4f40f7e9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix2.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Assumes that '/bin/sh' exists and '/bin/s' does not exist. +# Related to path_prefix.zsh + +BUFFER='ls /bin/s' +WIDGET=zle-line-finish + +expected_region_highlight=( + "1 2 command" # ls + "4 9 default" # /bin/s +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix3.zsh new file mode 100644 index 00000000..9f34f943 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/path_prefix3.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Assumes that '/bin/sh' exists and '/bin/s' does not exist. +# Related to path_prefix.zsh + +PREBUFFER=$'ls \\\n' +BUFFER='/bin/s' + +expected_region_highlight=( + '1 6 path_prefix' # /bin/s +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/plain-file-in-command-position.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/plain-file-in-command-position.zsh new file mode 100644 index 00000000..141fface --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/plain-file-in-command-position.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch foo +chmod -x foo +BUFFER=$'./foo; ./foo' + +expected_region_highlight=( + '1 5 unknown-token' # ./foo (in middle) + '6 6 commandseparator' # ; + '8 12 unknown-token' # ./foo (at end) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-killing1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-killing1.zsh new file mode 100644 index 00000000..75983460 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-killing1.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +hash sudo=false +touch foo + +BUFFER='sudo -e ./foo' + +expected_region_highlight=( + '1 4 precommand' # sudo + '6 7 single-hyphen-option' # -e + '9 13 path' # ./foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-killing2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-killing2.zsh new file mode 100644 index 00000000..bc6fc866 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-killing2.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +hash sudo=false + +BUFFER='sudo -e /does/not/exist' + +expected_region_highlight=( + '1 4 precommand' # sudo + '6 7 single-hyphen-option' # -e + '9 23 default' # /does/not/exist +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-then-assignment.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-then-assignment.zsh new file mode 100644 index 00000000..f0bb75ff --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-then-assignment.zsh @@ -0,0 +1,37 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'nice x=y ls' + +expected_region_highlight=( + '1 4 precommand' # nice + '6 8 unknown-token "issue #641.5"' # x=y + '10 11 default "issue #641.5 (fallout)"' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type1.zsh new file mode 100644 index 00000000..4ce817c2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type1.zsh @@ -0,0 +1,61 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Test the behaviour of a builtin that exists as a command as well. +# The spaces in $BUFFER are to align precommand-type*.zsh test files. +BUFFER=$'test ; builtin test ; builtin command test ; nice test ' + +# Our expectations assumes that a 'test' external command exists (in addition +# to the 'test' builtin). Let's verify that, using the EQUALS option (which +# is on by default). If there's no 'test' command, the expansion will fail, +# diagnose a message on stdout, and the harness will detect a failure. +# +# This seems to work on all platforms, insofar as no one ever reported a bug +# about their system not having a 'test' binary in PATH. That said, if someone +# ever does see this test fail for this reason, we should explicitly create +# a 'test' executable in cwd and 'rehash'. +: =test + +expected_region_highlight=( + '1 4 builtin' # test + '7 7 commandseparator' # ; + + '9 15 precommand' # builtin + '17 20 builtin' # test + '23 23 commandseparator' # ; + + '25 31 precommand' # builtin + '33 39 precommand' # command + '41 44 command "issue #608"' # test + '47 47 commandseparator' # ; + + '49 52 precommand' # nice + '54 57 command "issue #608"' # test +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type2.zsh new file mode 100644 index 00000000..bf75f4b5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type2.zsh @@ -0,0 +1,55 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Test the behaviour of a builtin that does not exist as a command. +# The spaces in $BUFFER are to align precommand-type*.zsh test files. +BUFFER=$'zstyle; builtin zstyle; builtin command zstyle; nice zstyle' + +# Verify that no $^path/zstyle(N) binary exists. +if (disable zstyle; type zstyle >/dev/null); then + echo >&2 "precommand-type2: error: 'zstyle' exists not only as a builtin" +fi + +expected_region_highlight=( + '1 6 builtin' # zstyle + '7 7 commandseparator' # ; + + '9 15 precommand' # builtin + '17 22 builtin' # zstyle + '23 23 commandseparator' # ; + + '25 31 precommand' # builtin + '33 39 precommand' # command + '41 46 unknown-token "issue #608"' # zstyle + '47 47 commandseparator' # ; + + '49 52 precommand' # nice + '54 59 unknown-token "issue #608"' # zstyle +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type3.zsh new file mode 100644 index 00000000..7fc7e4c5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-type3.zsh @@ -0,0 +1,55 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Test an external command that does not exist as a builtin. +# The spaces in $BUFFER are to align precommand-type*.zsh test files. +BUFFER=$'ls ; builtin ls ; builtin command ls ; nice ls ' + +# Verify that the 'ls' command isn't shadowed. +if [[ $(type -w ls) != "ls: command" ]]; then + echo >&2 "precommand-type3: error: the 'ls' command is shadowed (or possibly missing altogether)" +fi + +expected_region_highlight=( + '1 2 command' # ls + '7 7 commandseparator' # ; + + '9 15 precommand' # builtin + '17 18 unknown-token "issue #608"' # ls + '23 23 commandseparator' # ; + + '25 31 precommand' # builtin + '33 39 precommand' # command + '41 42 command' # ls + '47 47 commandseparator' # ; + + '49 52 precommand' # nice + '54 55 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-uninstalled.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-uninstalled.zsh new file mode 100644 index 00000000..03c8a75a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-uninstalled.zsh @@ -0,0 +1,44 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Simulate sudo not being installed. +# +# The 'hash' step is because, if sudo _really_ isn't installed, 'unhash sudo' +# would error out and break the test. +hash sudo=/usr/bin/env && unhash sudo + +local PATH + +BUFFER=$'sudo ls' + +expected_region_highlight=( + '1 4 unknown-token' # sudo + '6 7 default' # ls - not 'command', since sudo isn't installed +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-unknown-option.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-unknown-option.zsh new file mode 100644 index 00000000..6baf9ff5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand-unknown-option.zsh @@ -0,0 +1,43 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +sudo(){} + +BUFFER='sudo -ux ls; sudo -x ls' + +expected_region_highlight=( + '1 4 precommand' # sudo + '6 8 single-hyphen-option' # -ux + '10 11 command' # ls + '12 12 commandseparator' # ; + '14 17 precommand' # sudo + '19 20 single-hyphen-option' # -x + '22 23 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand.zsh new file mode 100644 index 00000000..a03b3317 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': command zzzzzz' + +expected_region_highlight=( + "1 1 builtin" # : + "3 9 default" # not precommand + "11 16 default" # not unknown-token (since 'zzzzzz' is not a command) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand2.zsh new file mode 100644 index 00000000..75dceabe --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand2.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='command -v ls' + +expected_region_highlight=( + "1 7 precommand" # command + "9 10 single-hyphen-option" # -v + "12 13 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand3.zsh new file mode 100644 index 00000000..f8b0c780 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand3.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='nice -n10 ls; nice -n 10 ls' + +expected_region_highlight=( + "1 4 precommand" # nice + "6 9 single-hyphen-option" # -n10 + "11 12 command" # ls + "13 13 commandseparator" # ; + "15 18 precommand" # nice + "20 21 single-hyphen-option" # -n + "23 24 default" # 10 + "26 27 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand4.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand4.zsh new file mode 100644 index 00000000..b9e6119d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/precommand4.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +doas(){} +BUFFER=$'doas -nu phy1729 ls' + +expected_region_highlight=( + '1 4 precommand' # doas + '6 8 single-hyphen-option' # -nu + '10 16 default' # phy1729 + '18 19 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/prefix-redirection.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/prefix-redirection.zsh new file mode 100644 index 00000000..a0f0ed5a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/prefix-redirection.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='>/tmp >/tmp command echo >/tmp foo' + +expected_region_highlight=( + "1 1 redirection" # > + "2 5 path" # /tmp + "7 7 redirection" # > + "8 11 path" # /tmp + "13 19 precommand" # command + "21 24 builtin" # echo + "26 26 redirection" # > + "27 30 path" # /tmp + "32 34 default" # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/process-substitution-after-redirection.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/process-substitution-after-redirection.zsh new file mode 100644 index 00000000..2d58016f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/process-substitution-after-redirection.zsh @@ -0,0 +1,46 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017, 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'< <(pwd) > >(nl)' + +expected_region_highlight=( + '1 1 redirection' # < + '3 8 default' # <(pwd) + '3 8 process-substitution' # <(pwd) + '3 4 process-substitution-delimiter' # <( + '5 7 builtin' # pwd + '8 8 process-substitution-delimiter' # ) + '10 10 redirection' # > + '12 16 default' # >(nl) + '12 16 process-substitution' # >(nl) + '12 13 process-substitution-delimiter' # >( + '14 15 command' # nl + '16 16 process-substitution-delimiter' # ) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/process-substitution-redirection-isnt-globbing.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/process-substitution-redirection-isnt-globbing.zsh new file mode 100644 index 00000000..f8dbd6ba --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/process-substitution-redirection-isnt-globbing.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': =(" foo ls' + +expected_region_highlight=( + '1 3 unknown-token' # ">" - not "redirection" + '5 7 default' # foo + '9 10 default' # ls - not "command" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/rc-quotes.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/rc-quotes.zsh new file mode 100644 index 00000000..8cd427ae --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/rc-quotes.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt RC_QUOTES + +BUFFER=": 'foo''bar'baz" + +expected_region_highlight=( + "1 1 builtin" # : + "3 15 default" # 'foo''bar'baz + "3 12 single-quoted-argument" # 'foo''bar' + "7 8 rc-quote" # '' +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-comment.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-comment.zsh new file mode 100644 index 00000000..a019100c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-comment.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +setopt interactive_comments + +BUFFER=': <<#foo' + +expected_region_highlight=( + "1 1 builtin" # : + "3 4 redirection" # << + "5 8 comment" # #foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-from-param.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-from-param.zsh new file mode 100644 index 00000000..42ae6380 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-from-param.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +touch file +local fn=$PWD/file + +BUFFER=$'<$fn cat' + +expected_region_highlight=( + '1 1 redirection' # < + '2 4 path' # $fn + '6 8 command' # cat +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-in-cmdsubst.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-in-cmdsubst.zsh new file mode 100644 index 00000000..ed5eaef8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-in-cmdsubst.zsh @@ -0,0 +1,41 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$': $( -x >> --yy' + +expected_region_highlight=( + '1 1 builtin' # : + '3 3 redirection' # > + '5 6 default' # -x + '8 9 redirection' # >> + '11 14 default' # --yy +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-special-cases.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-special-cases.zsh new file mode 100644 index 00000000..733cf6bd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection-special-cases.zsh @@ -0,0 +1,44 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# See xpandredir() in the zsh source. + +BUFFER=$'cat <&p; exec {myfd}>&-' + +expected_region_highlight=( + '1 3 command' # cat + '5 6 redirection' # <& + '7 7 redirection' # p + '8 8 commandseparator' # ; + '10 13 precommand' # exec + '15 20 named-fd' # {myfd} + '21 22 redirection' # >& + '23 23 redirection' # - +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection.zsh new file mode 100644 index 00000000..6a25971a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Redirection before and after the command word are implemented differently; test both. +BUFFER='<<>&!bar' + +expected_region_highlight=( + "1 3 redirection" # <<< + "4 6 default" # foo + "8 11 builtin" # echo + "13 16 redirection" # >>&! + "17 19 default" # bar +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection2.zsh new file mode 100644 index 00000000..d44c8e7a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection2.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ls >(wc) | nl' + +expected_region_highlight=( + "1 2 command" # ls + "4 8 default" # >(wc) + "4 8 process-substitution" # >(wc) + "4 5 process-substitution-delimiter" # >( + "6 7 command" # wc + "8 8 process-substitution-delimiter" # ) + "10 10 commandseparator" # | + "12 13 command" # nl +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection3.zsh new file mode 100644 index 00000000..bf062cfb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/redirection3.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=': >>>; : <>\<<<> + "5 5 unknown-token" # > + "6 6 commandseparator" # ; + "8 8 builtin" # : + "10 11 redirection" # <> + "12 13 default" # \< + "14 16 redirection" # <<< + "17 19 default" # EOF +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/reserved-word.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/reserved-word.zsh new file mode 100644 index 00000000..aca3796d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/reserved-word.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='repeat "1" do done' + +expected_region_highlight=( + "1 6 reserved-word" # repeat + "8 10 default" # "1" + "8 10 double-quoted-argument" # "1" + "12 13 reserved-word" # do + "15 18 reserved-word" # done +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/simple-command.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/simple-command.zsh new file mode 100644 index 00000000..8bb41fd0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/simple-command.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ls' + +expected_region_highlight=( + "1 2 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/simple-redirection.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/simple-redirection.zsh new file mode 100644 index 00000000..e8c25e55 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/simple-redirection.zsh @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ps aux | grep java' + +expected_region_highlight=( + "1 2 command" # ps + "4 6 default" # aux + "8 8 commandseparator" # | + "10 13 command" # grep + "15 18 default" # java +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/subshell.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/subshell.zsh new file mode 100644 index 00000000..c068013e --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/subshell.zsh @@ -0,0 +1,51 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='tar cf - * | (cd /target; tar xfp -) | { cat }' + +expected_region_highlight=( + "1 3 command" # tar + "5 6 default" # cf + "8 8 single-hyphen-option" # - + "10 10 default" # * + "10 10 globbing" # * + "12 12 commandseparator" # | + "14 14 reserved-word" # ( + "15 16 builtin" # cd + "18 24 default" # /target + "25 25 commandseparator" # ; + "27 29 command" # tar + "31 33 default" # xfp + "35 35 single-hyphen-option" # - + "36 36 reserved-word" # ) + "38 38 commandseparator" # | + "40 40 reserved-word" # { + "42 44 command" # cat + "46 46 reserved-word" # } +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-command.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-command.zsh new file mode 100644 index 00000000..941349a0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-command.zsh @@ -0,0 +1,54 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +sudo(){} + +# Tests three codepaths: +# * -i (no argument) +# * -C3 (pasted argument) +# * -u otheruser (non-pasted argument) +BUFFER='sudo -C3 -u otheruser -i ls /; sudo ; sudo -u ; sudo notacommand' + +expected_region_highlight=( + "1 4 precommand" # sudo + "6 8 single-hyphen-option" # -C3 + "10 11 single-hyphen-option" # -u + "13 21 default" # otheruser + "23 24 single-hyphen-option" # -i + "26 27 command" # ls + "29 29 path" # / + "30 30 commandseparator" # ; + "32 35 precommand" # sudo + "37 37 unknown-token" # ;, error because empty command + "39 42 precommand" # sudo + "44 45 single-hyphen-option" # -u + "47 47 unknown-token" # ;, error because incomplete command + "49 52 precommand" # sudo + "54 64 unknown-token" # notacommand - doesn't falls back to "not a command word" codepath +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-comment.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-comment.zsh new file mode 100644 index 00000000..74cd905a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-comment.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +sudo(){} + +setopt interactive_comments +BUFFER='sudo -u # comment' + +expected_region_highlight=( + "1 4 precommand" # sudo + "6 7 single-hyphen-option" # -u + "9 17 unknown-token" # "# comment" - error because argument missed +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-longopt.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-longopt.zsh new file mode 100644 index 00000000..ef768bfb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-longopt.zsh @@ -0,0 +1,38 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +hash sudo='false' +BUFFER='sudo --askpass ls' + +expected_region_highlight=( + '1 4 precommand' # sudo + '6 14 double-hyphen-option' # --askpass + '16 17 command' # ls (we don't know whether --askpass takes an argument) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection.zsh new file mode 100644 index 00000000..c675d7d2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection.zsh @@ -0,0 +1,48 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +sudo(){} + +BUFFER='sudo -u >/tmp otheruser ls; sudo ls; sudo -i ls' + +expected_region_highlight=( + "1 4 precommand" # sudo + "6 7 single-hyphen-option" # -u + "9 9 redirection" # > + "10 13 path" # /tmp + "15 23 default" # otheruser + "25 26 command" # ls + "27 27 commandseparator" # ; + "29 32 precommand" # sudo + "34 35 command" # ls + "36 36 commandseparator" # ; + "38 41 precommand" # sudo + "43 44 single-hyphen-option" # -i + "46 47 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection2.zsh new file mode 100644 index 00000000..23ada53c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection2.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +sudo(){} + +BUFFER='sudo >/tmp -u otheruser ls' + +expected_region_highlight=( + "1 4 precommand" # sudo + "6 6 redirection" # > + "7 10 path" # /tmp + "12 13 single-hyphen-option" # -u + "15 23 default" # otheruser + "25 26 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection3.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection3.zsh new file mode 100644 index 00000000..80e55b55 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/sudo-redirection3.zsh @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +sudo(){} + +BUFFER='sudo 2>./. -u otheruser ls' + +expected_region_highlight=( + "1 4 precommand" # sudo + "6 7 redirection" # 2> + "8 10 path" # ./. # a 3-character path, for alignment with sudo-redirection2.zsh + "12 13 single-hyphen-option" # -u + "15 23 default" # otheruser + "25 26 command" # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/tilde-command-word.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/tilde-command-word.zsh new file mode 100644 index 00000000..67c996c9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/tilde-command-word.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +hash -d D=/usr/bin + +BUFFER='~D/env foo' + +expected_region_highlight=( + "1 6 command" # ~D/env [= /usr/bin/env + "8 10 default" # foo +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/time-and-nocorrect1.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/time-and-nocorrect1.zsh new file mode 100644 index 00000000..fb398edf --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/time-and-nocorrect1.zsh @@ -0,0 +1,39 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'time ls; nocorrect ls' + +expected_region_highlight=( + '1 4 reserved-word' # time + '6 7 command' # ls + '8 8 commandseparator' # ; + '10 18 reserved-word' # nocorrect + '20 21 command' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/time-and-nocorrect2.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/time-and-nocorrect2.zsh new file mode 100644 index 00000000..5549ee92 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/time-and-nocorrect2.zsh @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2019 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER=$'time ls; nocorrect ls' +alias time=':' nocorrect=':' + +expected_region_highlight=( + '1 4 alias' # time + '6 7 default' # ls + '8 8 commandseparator' # ; + '10 18 alias' # nocorrect + '20 21 default' # ls +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/unbackslash.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/unbackslash.zsh new file mode 100644 index 00000000..c8dfbd4c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/unbackslash.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='\sh' + +expected_region_highlight=( + "1 3 command" # \sh (runs 'sh', bypassing aliases) +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/unknown-command.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/unknown-command.zsh new file mode 100644 index 00000000..e71faec5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/unknown-command.zsh @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='azertyuiop' + +expected_region_highlight=( + "1 10 unknown-token" # azertyuiop +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/vanilla-newline.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/vanilla-newline.zsh new file mode 100644 index 00000000..bd60ad4c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/vanilla-newline.zsh @@ -0,0 +1,39 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +PREBUFFER=$'echo foo; echo bar\n\n\n' +BUFFER=' echo baz; echo qux' + +expected_region_highlight=( + "2 5 builtin" # echo + "7 9 default" # baz + "10 10 commandseparator" # semicolon + "12 15 builtin" # echo + "17 19 default" # qux +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/vi-linewise-mode.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/vi-linewise-mode.zsh new file mode 100644 index 00000000..7003c49c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/exact_test-data/vi-linewise-mode.zsh @@ -0,0 +1,43 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# See issue #267 for the magic numbers +BUFFER=$'foo foo\nbar bar' +REGION_ACTIVE=2 +CURSOR=4 +MARK=12 + +expected_region_highlight=( + "1 3 unknown-token" # foo + "5 7 default" # foo + "8 8 commandseparator" # \n + "9 11 unknown-token" # bar + "13 15 default" # bar + "1 15 standout" # foo foo\nbar bar +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/main-highlighter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/main-highlighter.zsh new file mode 100644 index 00000000..4ea3f344 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/main-highlighter.zsh @@ -0,0 +1,1837 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[default]:=none} +: ${ZSH_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold} +: ${ZSH_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[suffix-alias]:=fg=green,underline} +: ${ZSH_HIGHLIGHT_STYLES[global-alias]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[precommand]:=fg=green,underline} +: ${ZSH_HIGHLIGHT_STYLES[commandseparator]:=none} +: ${ZSH_HIGHLIGHT_STYLES[autodirectory]:=fg=green,underline} +: ${ZSH_HIGHLIGHT_STYLES[path]:=underline} +: ${ZSH_HIGHLIGHT_STYLES[path_pathseparator]:=} +: ${ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=} +: ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue} +: ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue} +: ${ZSH_HIGHLIGHT_STYLES[command-substitution]:=none} +: ${ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]:=fg=magenta} +: ${ZSH_HIGHLIGHT_STYLES[process-substitution]:=none} +: ${ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]:=fg=magenta} +: ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none} +: ${ZSH_HIGHLIGHT_STYLES[double-hyphen-option]:=none} +: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument]:=none} +: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]:=fg=magenta} +: ${ZSH_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[rc-quote]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[assign]:=none} +: ${ZSH_HIGHLIGHT_STYLES[redirection]:=fg=yellow} +: ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold} +: ${ZSH_HIGHLIGHT_STYLES[named-fd]:=none} +: ${ZSH_HIGHLIGHT_STYLES[numeric-fd]:=none} +: ${ZSH_HIGHLIGHT_STYLES[arg0]:=fg=green} + +# Whether the highlighter should be called or not. +_zsh_highlight_highlighter_main_predicate() +{ + # may need to remove path_prefix highlighting when the line ends + [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified +} + +# Helper to deal with tokens crossing line boundaries. +_zsh_highlight_main_add_region_highlight() { + integer start=$1 end=$2 + shift 2 + + if (( $#in_alias )); then + [[ $1 == unknown-token ]] && alias_style=unknown-token + return + fi + if (( in_param )); then + if [[ $1 == unknown-token ]]; then + param_style=unknown-token + fi + if [[ -n $param_style ]]; then + return + fi + param_style=$1 + return + fi + + # The calculation was relative to $buf but region_highlight is relative to $BUFFER. + (( start += buf_offset )) + (( end += buf_offset )) + + list_highlights+=($start $end $1) +} + +_zsh_highlight_main_add_many_region_highlights() { + for 1 2 3; do + _zsh_highlight_main_add_region_highlight $1 $2 $3 + done +} + +_zsh_highlight_main_calculate_fallback() { + local -A fallback_of; fallback_of=( + alias arg0 + suffix-alias arg0 + global-alias dollar-double-quoted-argument + builtin arg0 + function arg0 + command arg0 + precommand arg0 + hashed-command arg0 + autodirectory arg0 + arg0_\* arg0 + + # TODO: Maybe these? — + # named-fd file-descriptor + # numeric-fd file-descriptor + + path_prefix path + # The path separator fallback won't ever be used, due to the optimisation + # in _zsh_highlight_main_highlighter_highlight_path_separators(). + path_pathseparator path + path_prefix_pathseparator path_prefix + + single-quoted-argument{-unclosed,} + double-quoted-argument{-unclosed,} + dollar-quoted-argument{-unclosed,} + back-quoted-argument{-unclosed,} + + command-substitution{-quoted,,-unquoted,} + command-substitution-delimiter{-quoted,,-unquoted,} + + command-substitution{-delimiter,} + process-substitution{-delimiter,} + back-quoted-argument{-delimiter,} + ) + local needle=$1 value + reply=($1) + while [[ -n ${value::=$fallback_of[(k)$needle]} ]]; do + unset "fallback_of[$needle]" # paranoia against infinite loops + reply+=($value) + needle=$value + done +} + +# Get the type of a command. +# +# Uses the zsh/parameter module if available to avoid forks, and a +# wrapper around 'type -w' as fallback. +# +# If $2 is 0, do not consider aliases. +# +# The result will be stored in REPLY. +_zsh_highlight_main__type() { + integer -r aliases_allowed=${2-1} + # We won't cache replies of anything that exists as an alias at all, to + # ensure the cached value is correct regardless of $aliases_allowed. + # + # ### We probably _should_ cache them in a cache that's keyed on the value of + # ### $aliases_allowed, on the assumption that aliases are the common case. + integer may_cache=1 + + # Cache lookup + if (( $+_zsh_highlight_main__command_type_cache )); then + REPLY=$_zsh_highlight_main__command_type_cache[(e)$1] + if [[ -n "$REPLY" ]]; then + return + fi + fi + + # Main logic + if (( $#options_to_set )); then + setopt localoptions $options_to_set; + fi + unset REPLY + if zmodload -e zsh/parameter; then + if (( $+aliases[(e)$1] )); then + may_cache=0 + fi + if (( ${+galiases[(e)$1]} )) && (( aliases_allowed )); then + REPLY='global alias' + elif (( $+aliases[(e)$1] )) && (( aliases_allowed )); then + REPLY=alias + elif [[ $1 == *.* && -n ${1%.*} ]] && (( $+saliases[(e)${1##*.}] )); then + REPLY='suffix alias' + elif (( $reswords[(Ie)$1] )); then + REPLY=reserved + elif (( $+functions[(e)$1] )); then + REPLY=function + elif (( $+builtins[(e)$1] )); then + REPLY=builtin + elif (( $+commands[(e)$1] )); then + REPLY=command + # None of the special hashes had a match, so fall back to 'type -w', for + # forward compatibility with future versions of zsh that may add new command + # types. + # + # zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly + # runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo + # exists and is in $PATH). Avoid triggering the bug, at the expense of + # falling through to the $() below, incurring a fork. (Issue #354.) + # + # The first disjunct mimics the isrelative() C call from the zsh bug. + elif { [[ $1 != */* ]] || is-at-least 5.3 } && + # Add a subshell to avoid a zsh upstream bug; see issue #606. + # ### Remove the subshell when we stop supporting zsh 5.7.1 (I assume 5.8 will have the bugfix). + ! (builtin type -w -- "$1") >/dev/null 2>&1; then + REPLY=none + fi + fi + if ! (( $+REPLY )); then + # zsh/parameter not available or had no matches. + # + # Note that 'type -w' will run 'rehash' implicitly. + # + # We 'unalias' in a subshell, so the parent shell is not affected. + # + # The colon command is there just to avoid a command substitution that + # starts with an arithmetic expression [«((…))» as the first thing inside + # «$(…)»], which is area that has had some parsing bugs before 5.6 + # (approximately). + REPLY="${$(:; (( aliases_allowed )) || unalias -- "$1" 2>/dev/null; LC_ALL=C builtin type -w -- "$1" 2>/dev/null)##*: }" + if [[ $REPLY == 'alias' ]]; then + may_cache=0 + fi + fi + + # Cache population + if (( may_cache )) && (( $+_zsh_highlight_main__command_type_cache )); then + _zsh_highlight_main__command_type_cache[(e)$1]=$REPLY + fi + [[ -n $REPLY ]] + return $? +} + +# Checks whether $1 is something that can be run. +# +# Return 0 if runnable, 1 if not runnable, 2 if trouble. +_zsh_highlight_main__is_runnable() { + if _zsh_highlight_main__type "$1"; then + [[ $REPLY != none ]] + else + return 2 + fi +} + +# Check whether the first argument is a redirection operator token. +# Report result via the exit code. +_zsh_highlight_main__is_redirection() { + # A redirection operator token: + # - starts with an optional single-digit number; + # - then, has a '<' or '>' character; + # - is not a process substitution [<(...) or >(...)]. + # - is not a numeric glob <-> + [[ $1 == (<0-9>|)(\<|\>)* ]] && [[ $1 != (\<|\>)$'\x28'* ]] && [[ $1 != *'<'*'-'*'>'* ]] +} + +# Resolve alias. +# +# Takes a single argument. +# +# The result will be stored in REPLY. +_zsh_highlight_main__resolve_alias() { + if zmodload -e zsh/parameter; then + REPLY=${aliases[$arg]} + else + REPLY="${"$(alias -- $arg)"#*=}" + fi +} + +# Return true iff $1 is a global alias +_zsh_highlight_main__is_global_alias() { + if zmodload -e zsh/parameter; then + (( ${+galiases[$arg]} )) + elif [[ $arg == '='* ]]; then + # avoid running into «alias -L '=foo'» erroring out with 'bad assignment' + return 1 + else + alias -L -g -- "$1" >/dev/null + fi +} + +# Check that the top of $braces_stack has the expected value. If it does, set +# the style according to $2; otherwise, set style=unknown-token. +# +# $1: character expected to be at the top of $braces_stack +# $2: optional assignment to style it if matches +# return value is 0 if there is a match else 1 +_zsh_highlight_main__stack_pop() { + if [[ $braces_stack[1] == $1 ]]; then + braces_stack=${braces_stack:1} + if (( $+2 )); then + style=$2 + fi + return 0 + else + style=unknown-token + return 1 + fi +} + +# Main syntax highlighting function. +_zsh_highlight_highlighter_main_paint() +{ + setopt localoptions extendedglob + + # At the PS3 prompt and in vared, highlight nothing. + # + # (We can't check this in _zsh_highlight_highlighter_main_predicate because + # if the predicate returns false, the previous value of region_highlight + # would be reused.) + if [[ $CONTEXT == (select|vared) ]]; then + return + fi + + typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR + typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW + local -a options_to_set reply # used in callees + local REPLY + + # $flags_with_argument is a set of letters, corresponding to the option letters + # that would be followed by a colon in a getopts specification. + local flags_with_argument + # $flags_sans_argument is a set of letters, corresponding to the option letters + # that wouldn't be followed by a colon in a getopts specification. + local flags_sans_argument + # $flags_solo is a set of letters, corresponding to option letters that, if + # present, mean the precommand will not be acting as a precommand, i.e., will + # not be followed by a :start: word. + local flags_solo + # $precommand_options maps precommand name to values of $flags_with_argument, + # $flags_sans_argument, and flags_solo for that precommand, joined by a + # colon. (The value is NOT a getopt(3) spec, although it resembles one.) + # + # Currently, setting $flags_sans_argument is only important for commands that + # have a non-empty $flags_with_argument; see test-data/precommand4.zsh. + local -A precommand_options + precommand_options=( + # Precommand modifiers as of zsh 5.6.2 cf. zshmisc(1). + '-' '' + 'builtin' '' + 'command' :pvV + 'exec' a:cl + 'noglob' '' + # 'time' and 'nocorrect' shouldn't be added here; they're reserved words, not precommands. + + 'doas' aCu:Lns # as of OpenBSD's doas(1) dated September 4, 2016 + 'nice' n: # as of current POSIX spec + 'pkexec' '' # doesn't take short options; immune to #121 because it's usually not passed --option flags + # Not listed: -h, which has two different meanings. + 'sudo' Cgprtu:AEHPSbilns:eKkVv # as of sudo 1.8.21p2 + 'stdbuf' ioe: + 'eatmydata' '' + 'catchsegv' '' + 'nohup' '' + 'setsid' :wc + 'env' u:i + 'ionice' cn:t:pPu # util-linux 2.33.1-0.1 + 'strace' IbeaosXPpEuOS:ACdfhikqrtTvVxyDc # strace 4.26-0.2 + + # As of OpenSSH 8.1p1 + 'ssh-agent' aEPt:csDd:k + # suckless-tools v44 + # Argumentless flags that can't be followed by a command: -v + 'tabbed' gnprtTuU:cdfhs + + # moreutils 0.62-1 + 'chronic' :ev + 'ifne' :n + + ) + # Commands that would need to skip one positional argument: + # flock + # ssh + + if [[ $zsyh_user_options[ignorebraces] == on || ${zsyh_user_options[ignoreclosebraces]:-off} == on ]]; then + local right_brace_is_recognised_everywhere=false + else + local right_brace_is_recognised_everywhere=true + fi + + if [[ $zsyh_user_options[pathdirs] == on ]]; then + options_to_set+=( PATH_DIRS ) + fi + + ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=( + '|' '||' ';' '&' '&&' + $'\n' # ${(z)} returns ';' but we convert it to $'\n' + '|&' + '&!' '&|' + # ### 'case' syntax, but followed by a pattern, not by a command + # ';;' ';&' ';|' + ) + + # Tokens that, at (naively-determined) "command position", are followed by + # a de jure command position. All of these are reserved words. + ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW=( + $'\x7b' # block + $'\x28' # subshell + '()' # anonymous function + 'while' + 'until' + 'if' + 'then' + 'elif' + 'else' + 'do' + 'time' + 'coproc' + '!' # reserved word; unrelated to $histchars[1] + ) + + if (( $+X_ZSH_HIGHLIGHT_DIRS_BLACKLIST )); then + print >&2 'zsh-syntax-highlighting: X_ZSH_HIGHLIGHT_DIRS_BLACKLIST is deprecated. Please use ZSH_HIGHLIGHT_DIRS_BLACKLIST.' + ZSH_HIGHLIGHT_DIRS_BLACKLIST=($X_ZSH_HIGHLIGHT_DIRS_BLACKLIST) + unset X_ZSH_HIGHLIGHT_DIRS_BLACKLIST + fi + + _zsh_highlight_main_highlighter_highlight_list -$#PREBUFFER '' 1 "$PREBUFFER$BUFFER" + + # end is a reserved word + local start end_ style + for start end_ style in $reply; do + (( start >= end_ )) && { print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_highlighter_main_paint: start($start) >= end($end_)"; return } + (( end_ <= 0 )) && continue + (( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings + _zsh_highlight_main_calculate_fallback $style + _zsh_highlight_add_highlight $start $end_ $reply + done +} + +# Try to expand $1, if it's possible to do so safely. +# +# Uses two parameters from the caller: $parameter_name_pattern and $res. +# +# If expansion was done, set $reply to the expansion and return true. +# Otherwise, return false. +_zsh_highlight_main_highlighter__try_expand_parameter() +{ + local arg="$1" + unset reply + { + # ### For now, expand just '$foo' or '${foo}', possibly with braces, but with + # ### no other features of the parameter expansion syntax. (No ${(x)foo}, + # ### no ${foo[x]}, no ${foo:-x}.) + { + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + local parameter_name + local -a words + if [[ $arg[1] != '$' ]]; then + return 1 + fi + if [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then + parameter_name=${${arg:2}%?} + else + parameter_name=${arg:1} + fi + if [[ $res == none ]] && + [[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] && + [[ ${(tP)MATCH} != *special* ]] + then + # Set $arg and update $res. + case ${(tP)MATCH} in + (*array*|*assoc*) + words=( ${(P)MATCH} ) + ;; + ("") + # not set + words=( ) + ;; + (*) + # scalar, presumably + words=( ${(P)MATCH} ) + ;; + esac + reply=( "${words[@]}" ) + else + return 1 + fi + } + } +} + +# $1 is the offset of $4 from the parent buffer. Added to the returned highlights. +# $2 is the initial braces_stack (for a closing paren). +# $3 is 1 if $4 contains the end of $BUFFER, else 0. +# $4 is the buffer to highlight. +# Returns: +# $REPLY: $buf[REPLY] is the last character parsed. +# $reply is an array of region_highlight additions. +# exit code is 0 if the braces_stack is empty, 1 otherwise. +_zsh_highlight_main_highlighter_highlight_list() +{ + integer start_pos end_pos=0 buf_offset=$1 has_end=$3 + # alias_style is the style to apply to an alias once $#in_alias == 0 + # Usually 'alias' but set to 'unknown-token' if any word expanded from + # the alias would be highlighted as unknown-token + # param_style is analogous for parameter expansions + local alias_style param_style last_arg arg buf=$4 highlight_glob=true saw_assignment=false style + local in_array_assignment=false # true between 'a=(' and the matching ')' + # in_alias is an array of integers with each element equal to the number + # of shifts needed until arg=args[1] pops an arg from the next level up + # alias or from BUFFER. + # in_param is analogous for parameter expansions + integer in_param=0 len=$#buf + local -a in_alias match mbegin mend list_highlights + # seen_alias is a map of aliases already seen to avoid loops like alias a=b b=a + local -A seen_alias + # Pattern for parameter names + readonly parameter_name_pattern='([A-Za-z_][A-Za-z0-9_]*|[0-9]+)' + list_highlights=() + + # "R" for round + # "Q" for square + # "Y" for curly + # "T" for [[ ]] + # "S" for $( ), =( ), <( ), >( ) + # "D" for do/done + # "$" for 'end' (matches 'foreach' always; also used with cshjunkiequotes in repeat/while) + # "?" for 'if'/'fi'; also checked by 'elif'/'else' + # ":" for 'then' + local braces_stack=$2 + + # State machine + # + # The states are: + # - :start: Command word + # - :start_of_pipeline: Start of a 'pipeline' as defined in zshmisc(1). + # Only valid when :start: is present + # - :sudo_opt: A leading-dash option to a precommand, whether it takes an + # argument or not. (Example: sudo's "-u" or "-i".) + # - :sudo_arg: The argument to a precommand's leading-dash option, + # when given as a separate word; i.e., "foo" in "-u foo" (two + # words) but not in "-ufoo" (one word). + # Note: :sudo_opt: and :sudo_arg: are used for any precommand + # declared in ${precommand_options}, not just for sudo(8). + # The naming is historical. + # - :regular: "Not a command word", and command delimiters are permitted. + # Mainly used to detect premature termination of commands. + # - :always: The word 'always' in the «{ foo } always { bar }» syntax. + # + # When the kind of a word is not yet known, $this_word / $next_word may contain + # multiple states. For example, after "sudo -i", the next word may be either + # another --flag or a command name, hence the state would include both ':start:' + # and ':sudo_opt:'. + # + # The tokens are always added with both leading and trailing colons to serve as + # word delimiters (an improvised array); [[ $x == *':foo:'* ]] and x=${x//:foo:/} + # will DTRT regardless of how many elements or repetitions $x has. + # + # Handling of redirections: upon seeing a redirection token, we must stall + # the current state --- that is, the value of $this_word --- for two iterations + # (one for the redirection operator, one for the word following it representing + # the redirection target). Therefore, we set $in_redirection to 2 upon seeing a + # redirection operator, decrement it each iteration, and stall the current state + # when it is non-zero. Thus, upon reaching the next word (the one that follows + # the redirection operator and target), $this_word will still contain values + # appropriate for the word immediately following the word that preceded the + # redirection operator. + # + # The "the previous word was a redirection operator" state is not communicated + # to the next iteration via $next_word/$this_word as usual, but via + # $in_redirection. The value of $next_word from the iteration that processed + # the operator is discarded. + # + # $in_redirection is currently used for: + # - comments + # - aliases + # - redirections + # - parameter elision in command position + # - 'repeat' loops + # + local this_word next_word=':start::start_of_pipeline:' + integer in_redirection + # Processing buffer + local proc_buf="$buf" + local -a args + if [[ $zsyh_user_options[interactivecomments] == on ]]; then + args=(${(zZ+c+)buf}) + else + args=(${(z)buf}) + fi + + # Special case: $(<*) isn't globbing. + if [[ $braces_stack == 'S' ]] && (( $+args[3] && ! $+args[4] )) && [[ $args[3] == $'\x29' ]] && + [[ $args[1] == *'<'* ]] && _zsh_highlight_main__is_redirection $args[1]; then + highlight_glob=false + fi + + while (( $#args )); do + last_arg=$arg + arg=$args[1] + shift args + if (( $#in_alias )); then + (( in_alias[1]-- )) + # Remove leading 0 entries + in_alias=($in_alias[$in_alias[(i)<1->],-1]) + (){ + local alias_name + for alias_name in ${(k)seen_alias[(R)<$#in_alias->]}; do + unset "seen_alias[$alias_name]" + done + } + if (( $#in_alias == 0 )); then + seen_alias=() + # start_pos and end_pos are of the alias (previous $arg) here + _zsh_highlight_main_add_region_highlight $start_pos $end_pos $alias_style + fi + fi + if (( in_param )); then + (( in_param-- )) + if (( in_param == 0 )); then + # start_pos and end_pos are of the '$foo' word (previous $arg) here + _zsh_highlight_main_add_region_highlight $start_pos $end_pos $param_style + param_style="" + fi + fi + + # Initialize this_word and next_word. + if (( in_redirection == 0 )); then + this_word=$next_word + next_word=':regular:' + elif (( !in_param )); then + # Stall $next_word. + (( --in_redirection )) + fi + + # Initialize per-"simple command" [zshmisc(1)] variables: + # + # $style how to highlight $arg + # $in_array_assignment boolean flag for "between '(' and ')' of array assignment" + # $highlight_glob boolean flag for "'noglob' is in effect" + # $saw_assignment boolean flag for "was preceded by an assignment" + # + style=unknown-token + if [[ $this_word == *':start:'* ]]; then + in_array_assignment=false + if [[ $arg == 'noglob' ]]; then + highlight_glob=false + fi + fi + + if (( $#in_alias == 0 && in_param == 0 )); then + # Compute the new $start_pos and $end_pos, skipping over whitespace in $buf. + [[ "$proc_buf" = (#b)(#s)(([ $'\t']|[\\]$'\n')#)(?|)* ]] + # The first, outer parenthesis + integer offset="${#match[1]}" + (( start_pos = end_pos + offset )) + (( end_pos = start_pos + $#arg )) + + # The zsh lexer considers ';' and newline to be the same token, so + # ${(z)} converts all newlines to semicolons. Convert them back here to + # make later processing simpler. + [[ $arg == ';' && ${match[3]} == $'\n' ]] && arg=$'\n' + + # Compute the new $proc_buf. We advance it + # (chop off characters from the beginning) + # beyond what end_pos points to, by skipping + # as many characters as end_pos was advanced. + # + # end_pos was advanced by $offset (via start_pos) + # and by $#arg. Note the `start_pos=$end_pos` + # below. + # + # As for the [,len]. We could use [,len-start_pos+offset] + # here, but to make it easier on eyes, we use len and + # rely on the fact that Zsh simply handles that. The + # length of proc_buf is len-start_pos+offset because + # we're chopping it to match current start_pos, so its + # length matches the previous value of start_pos. + # + # Why [,-1] is slower than [,length] isn't clear. + proc_buf="${proc_buf[offset + $#arg + 1,len]}" + fi + + # Handle the INTERACTIVE_COMMENTS option. + # + # We use the (Z+c+) flag so the entire comment is presented as one token in $arg. + if [[ $zsyh_user_options[interactivecomments] == on && $arg[1] == $histchars[3] ]]; then + if [[ $this_word == *(':regular:'|':start:')* ]]; then + style=comment + else + style=unknown-token # prematurely terminated + fi + _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style + # Stall this arg + in_redirection=1 + continue + fi + + if [[ $this_word == *':start:'* ]] && ! (( in_redirection )); then + # Expand aliases. + # An alias is ineligible for expansion while it's being expanded (see #652/#653). + _zsh_highlight_main__type "$arg" "$(( ! ${+seen_alias[$arg]} ))" + local res="$REPLY" + if [[ $res == "alias" ]]; then + # Mark insane aliases as unknown-token (cf. #263). + if [[ $arg == ?*=* ]]; then + _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token + continue + fi + seen_alias[$arg]=$#in_alias + _zsh_highlight_main__resolve_alias $arg + local -a alias_args + # Elision is desired in case alias x='' + if [[ $zsyh_user_options[interactivecomments] == on ]]; then + alias_args=(${(zZ+c+)REPLY}) + else + alias_args=(${(z)REPLY}) + fi + args=( $alias_args $args ) + if (( $#in_alias == 0 )); then + alias_style=alias + else + # Transfer the count of this arg to the new element about to be appended. + (( in_alias[1]-- )) + fi + # Add one because we will in_alias[1]-- on the next loop iteration so + # this iteration should be considered in in_alias as well + in_alias=( $(($#alias_args + 1)) $in_alias ) + (( in_redirection++ )) # Stall this arg + continue + else + _zsh_highlight_main_highlighter_expand_path $arg + _zsh_highlight_main__type "$REPLY" 0 + res="$REPLY" + fi + fi + + # Analyse the current word. + if _zsh_highlight_main__is_redirection $arg ; then + if (( in_redirection == 1 )); then + # Two consecuive redirection operators is an error. + _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token + else + in_redirection=2 + _zsh_highlight_main_add_region_highlight $start_pos $end_pos redirection + fi + continue + elif [[ $arg == '{'${~parameter_name_pattern}'}' ]] && _zsh_highlight_main__is_redirection $args[1]; then + # named file descriptor: {foo}>&2 + in_redirection=3 + _zsh_highlight_main_add_region_highlight $start_pos $end_pos named-fd + continue + fi + + # Expand parameters. + if (( ! in_param )) && _zsh_highlight_main_highlighter__try_expand_parameter "$arg"; then + # That's not entirely correct --- if the parameter's value happens to be a reserved + # word, the parameter expansion will be highlighted as a reserved word --- but that + # incorrectness is outweighed by the usability improvement of permitting the use of + # parameters that refer to commands, functions, and builtins. + () { + local -a words; words=( "${reply[@]}" ) + if (( $#words == 0 )) && (( ! in_redirection )); then + # Parameter elision is happening + (( ++in_redirection )) + _zsh_highlight_main_add_region_highlight $start_pos $end_pos comment + continue + else + (( in_param = 1 + $#words )) + args=( $words $args ) + arg=$args[1] + _zsh_highlight_main__type "$arg" 0 + res=$REPLY + fi + } + fi + + # Parse the sudo command line + if (( ! in_redirection )); then + if [[ $this_word == *':sudo_opt:'* ]]; then + if [[ -n $flags_with_argument ]] && + { + # Trenary + if [[ -n $flags_sans_argument ]] + then [[ $arg == '-'[$flags_sans_argument]#[$flags_with_argument] ]] + else [[ $arg == '-'[$flags_with_argument] ]] + fi + } then + # Flag that requires an argument + this_word=${this_word//:start:/} + next_word=':sudo_arg:' + elif [[ -n $flags_with_argument ]] && + { + # Trenary + if [[ -n $flags_sans_argument ]] + then [[ $arg == '-'[$flags_sans_argument]#[$flags_with_argument]* ]] + else [[ $arg == '-'[$flags_with_argument]* ]] + fi + } then + # Argument attached in the same word + this_word=${this_word//:start:/} + next_word+=':start:' + next_word+=':sudo_opt:' + elif [[ -n $flags_sans_argument ]] && + [[ $arg == '-'[$flags_sans_argument]# ]]; then + # Flag that requires no argument + this_word=':sudo_opt:' + next_word+=':start:' + next_word+=':sudo_opt:' + elif [[ -n $flags_solo ]] && + { + # Trenary + if [[ -n $flags_sans_argument ]] + then [[ $arg == '-'[$flags_sans_argument]#[$flags_solo]* ]] + else [[ $arg == '-'[$flags_solo]* ]] + fi + } then + # Solo flags + this_word=':sudo_opt:' + next_word=':regular:' # no :start:, nor :sudo_opt: since we don't know whether the solo flag takes an argument or not + elif [[ $arg == '-'* ]]; then + # Unknown flag. We don't know whether it takes an argument or not, + # so modify $next_word as we do for flags that require no argument. + # With that behaviour, if the flag in fact takes no argument we'll + # highlight the inner command word correctly, and if it does take an + # argument we'll highlight the command word correctly if the argument + # was given in the same shell word as the flag (as in '-uphy1729' or + # '--user=phy1729' without spaces). + this_word=':sudo_opt:' + next_word+=':start:' + next_word+=':sudo_opt:' + else + # Not an option flag; nothing to do. (If the command line is + # syntactically valid, ${this_word//:sudo_opt:/} should be + # non-empty now.) + this_word=${this_word//:sudo_opt:/} + fi + elif [[ $this_word == *':sudo_arg:'* ]]; then + next_word+=':sudo_opt:' + next_word+=':start:' + fi + fi + + # The Great Fork: is this a command word? Is this a non-command word? + if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]] && + [[ $braces_stack != *T* || $arg != ('||'|'&&') ]]; then + + # First, determine the style of the command separator itself. + if _zsh_highlight_main__stack_pop T || _zsh_highlight_main__stack_pop Q; then + # Missing closing square bracket(s) + style=unknown-token + elif $in_array_assignment; then + case $arg in + # Literal newlines are just fine. + ($'\n') style=commandseparator;; + # Semicolons are parsed the same way as literal newlines. Nevertheless, + # highlight them as errors since they're probably unintended. Compare + # issue #691. + (';') style=unknown-token;; + # Other command separators aren't allowed. + (*) style=unknown-token;; + esac + elif [[ $this_word == *':regular:'* ]]; then + style=commandseparator + elif [[ $this_word == *':start:'* ]] && [[ $arg == $'\n' ]]; then + style=commandseparator + elif [[ $this_word == *':start:'* ]] && [[ $arg == ';' ]] && (( $#in_alias )); then + style=commandseparator + else + # Empty commands (semicolon follows nothing) are valid syntax. + # However, in interactive use they are likely to be erroneous; + # therefore, we highlight them as errors. + # + # Alias definitions are exempted from this check to allow multiline aliases + # with explicit (redundant) semicolons: «alias foo=$'bar;\nbaz'» (issue #677). + # + # See also #691 about possibly changing the style used here. + style=unknown-token + fi + + # Second, determine the style of next_word. + if [[ $arg == $'\n' ]] && $in_array_assignment; then + # literal newline inside an array assignment + next_word=':regular:' + elif [[ $arg == ';' ]] && $in_array_assignment; then + # literal semicolon inside an array assignment + next_word=':regular:' + else + next_word=':start:' + highlight_glob=true + saw_assignment=false + (){ + local alias_name + for alias_name in ${(k)seen_alias[(R)<$#in_alias->]}; do + unset "seen_alias[$alias_name]" + done + } + if [[ $arg != '|' && $arg != '|&' ]]; then + next_word+=':start_of_pipeline:' + fi + fi + + elif ! (( in_redirection)) && [[ $this_word == *':always:'* && $arg == 'always' ]]; then + # try-always construct + style=reserved-word # de facto a reserved word, although not de jure + highlight_glob=true + saw_assignment=false + next_word=':start::start_of_pipeline:' # only left brace is allowed, apparently + elif ! (( in_redirection)) && [[ $this_word == *':start:'* ]]; then # $arg is the command word + if (( ${+precommand_options[$arg]} )) && _zsh_highlight_main__is_runnable $arg; then + style=precommand + () { + set -- "${(@s.:.)precommand_options[$arg]}" + flags_with_argument=$1 + flags_sans_argument=$2 + flags_solo=$3 + } + next_word=${next_word//:regular:/} + next_word+=':sudo_opt:' + next_word+=':start:' + if [[ $arg == 'exec' ]]; then + # To allow "exec 2>&1;" where there's no command word + next_word+=':regular:' + fi + else + case $res in + (reserved) # reserved word + style=reserved-word + # Match braces and handle special cases. + case $arg in + (time|nocorrect) + next_word=${next_word//:regular:/} + next_word+=':start:' + ;; + ($'\x7b') + braces_stack='Y'"$braces_stack" + ;; + ($'\x7d') + # We're at command word, so no need to check $right_brace_is_recognised_everywhere + _zsh_highlight_main__stack_pop 'Y' reserved-word + if [[ $style == reserved-word ]]; then + next_word+=':always:' + fi + ;; + ($'\x5b\x5b') + braces_stack='T'"$braces_stack" + ;; + ('do') + braces_stack='D'"$braces_stack" + ;; + ('done') + _zsh_highlight_main__stack_pop 'D' reserved-word + ;; + ('if') + braces_stack=':?'"$braces_stack" + ;; + ('then') + _zsh_highlight_main__stack_pop ':' reserved-word + ;; + ('elif') + if [[ ${braces_stack[1]} == '?' ]]; then + braces_stack=':'"$braces_stack" + else + style=unknown-token + fi + ;; + ('else') + if [[ ${braces_stack[1]} == '?' ]]; then + : + else + style=unknown-token + fi + ;; + ('fi') + _zsh_highlight_main__stack_pop '?' + ;; + ('foreach') + braces_stack='$'"$braces_stack" + ;; + ('end') + _zsh_highlight_main__stack_pop '$' reserved-word + ;; + ('repeat') + # skip the repeat-count word + in_redirection=2 + # The redirection mechanism assumes $this_word describes the word + # following the redirection. Make it so. + # + # That word can be a command word with shortloops (`repeat 2 ls`) + # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`). + # + # The repeat-count word will be handled like a redirection target. + this_word=':start::regular:' + ;; + ('!') + if [[ $this_word != *':start_of_pipeline:'* ]]; then + style=unknown-token + else + # '!' reserved word at start of pipeline; style already set above + fi + ;; + esac + if $saw_assignment && [[ $style != unknown-token ]]; then + style=unknown-token + fi + ;; + ('suffix alias') + style=suffix-alias + ;; + ('global alias') + style=global-alias + ;; + (alias) :;; + (builtin) style=builtin + [[ $arg == $'\x5b' ]] && braces_stack='Q'"$braces_stack" + ;; + (function) style=function;; + (command) style=command;; + (hashed) style=hashed-command;; + (none) if (( ! in_param )) && _zsh_highlight_main_highlighter_check_assign; then + _zsh_highlight_main_add_region_highlight $start_pos $end_pos assign + local i=$(( arg[(i)=] + 1 )) + saw_assignment=true + if [[ $arg[i] == '(' ]]; then + in_array_assignment=true + _zsh_highlight_main_add_region_highlight start_pos+i-1 start_pos+i reserved-word + else + # assignment to a scalar parameter. + # (For array assignments, the command doesn't start until the ")" token.) + # + # Discard :start_of_pipeline:, if present, as '!' is not valid + # after assignments. + next_word+=':start:' + if (( i <= $#arg )); then + () { + local highlight_glob=false + [[ $zsyh_user_options[globassign] == on ]] && highlight_glob=true + _zsh_highlight_main_highlighter_highlight_argument $i + } + fi + fi + continue + elif (( ! in_param )) && + [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then + style=history-expansion + elif (( ! in_param )) && + [[ $arg[0,1] == $histchars[2,2] ]]; then + style=history-expansion + elif (( ! in_param )) && + ! $saw_assignment && + [[ $arg[1,2] == '((' ]]; then + # Arithmetic evaluation. + # + # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...} + # splitter would only output the '((' token if the matching '))' had + # been typed. Therefore, under those versions of zsh, BUFFER="(( 42" + # would be highlighted as an error until the matching "))" are typed. + # + # We highlight just the opening parentheses, as a reserved word; this + # is how [[ ... ]] is highlighted, too. + _zsh_highlight_main_add_region_highlight $start_pos $((start_pos + 2)) reserved-word + if [[ $arg[-2,-1] == '))' ]]; then + _zsh_highlight_main_add_region_highlight $((end_pos - 2)) $end_pos reserved-word + fi + continue + elif (( ! in_param )) && + [[ $arg == '()' ]]; then + # anonymous function + style=reserved-word + elif (( ! in_param )) && + ! $saw_assignment && + [[ $arg == $'\x28' ]]; then + # subshell + style=reserved-word + braces_stack='R'"$braces_stack" + elif (( ! in_param )) && + [[ $arg == $'\x29' ]]; then + # end of subshell or command substitution + if _zsh_highlight_main__stack_pop 'S'; then + REPLY=$start_pos + reply=($list_highlights) + return 0 + fi + _zsh_highlight_main__stack_pop 'R' reserved-word + else + if _zsh_highlight_main_highlighter_check_path $arg 1; then + style=$REPLY + else + style=unknown-token + fi + fi + ;; + (*) _zsh_highlight_main_add_region_highlight $start_pos $end_pos arg0_$res + continue + ;; + esac + fi + if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} ]]; then + next_word=':start::start_of_pipeline:' + fi + elif _zsh_highlight_main__is_global_alias "$arg"; then # $arg is a global alias that isn't in command position + style=global-alias + else # $arg is a non-command word + case $arg in + ($'\x29') + # subshell or end of array assignment + if $in_array_assignment; then + _zsh_highlight_main_add_region_highlight $start_pos $end_pos assign + _zsh_highlight_main_add_region_highlight $start_pos $end_pos reserved-word + in_array_assignment=false + next_word+=':start:' + continue + elif (( in_redirection )); then + style=unknown-token + else + if _zsh_highlight_main__stack_pop 'S'; then + REPLY=$start_pos + reply=($list_highlights) + return 0 + fi + _zsh_highlight_main__stack_pop 'R' reserved-word + fi + ;; + ($'\x28\x29') + # possibly a function definition + if (( in_redirection )) || $in_array_assignment; then + style=unknown-token + else + if [[ $zsyh_user_options[multifuncdef] == on ]] || false # TODO: or if the previous word was a command word + then + next_word+=':start::start_of_pipeline:' + fi + style=reserved-word + fi + ;; + (*) if false; then + elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then + # Parsing rule: { + # + # Additionally, `tt(})' is recognized in any position if neither the + # tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set. + if (( in_redirection )) || $in_array_assignment; then + style=unknown-token + else + _zsh_highlight_main__stack_pop 'Y' reserved-word + if [[ $style == reserved-word ]]; then + next_word+=':always:' + fi + fi + elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then + style=history-expansion + elif [[ $arg == $'\x5d\x5d' ]] && _zsh_highlight_main__stack_pop 'T' reserved-word; then + : + elif [[ $arg == $'\x5d' ]] && _zsh_highlight_main__stack_pop 'Q' builtin; then + : + else + _zsh_highlight_main_highlighter_highlight_argument 1 $(( 1 != in_redirection )) + continue + fi + ;; + esac + fi + _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style + done + (( $#in_alias )) && in_alias=() _zsh_highlight_main_add_region_highlight $start_pos $end_pos $alias_style + (( in_param == 1 )) && in_param=0 _zsh_highlight_main_add_region_highlight $start_pos $end_pos $param_style + [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\$'\n')#) ]] + REPLY=$(( end_pos + ${#match[1]} - 1 )) + reply=($list_highlights) + return $(( $#braces_stack > 0 )) +} + +# Check if $arg is variable assignment +_zsh_highlight_main_highlighter_check_assign() +{ + setopt localoptions extended_glob + [[ $arg == [[:alpha:]_][[:alnum:]_]#(|\[*\])(|[+])=* ]] || + [[ $arg == [0-9]##(|[+])=* ]] +} + +_zsh_highlight_main_highlighter_highlight_path_separators() +{ + local pos style_pathsep + style_pathsep=$1_pathseparator + reply=() + [[ -z "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" || "$ZSH_HIGHLIGHT_STYLES[$1]" == "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" ]] && return 0 + for (( pos = start_pos; $pos <= end_pos; pos++ )) ; do + if [[ $BUFFER[pos] == / ]]; then + reply+=($((pos - 1)) $pos $style_pathsep) + fi + done +} + +# Check if $1 is a path. +# If yes, return 0 and in $REPLY the style to use. +# Else, return non-zero (and the contents of $REPLY is undefined). +# +# $2 should be non-zero iff we're in command position. +_zsh_highlight_main_highlighter_check_path() +{ + _zsh_highlight_main_highlighter_expand_path "$1" + local expanded_path="$REPLY" tmp_path + integer in_command_position=$2 + + if [[ $zsyh_user_options[autocd] == on ]]; then + integer autocd=1 + else + integer autocd=0 + fi + + if (( in_command_position )); then + # ### Currently, this value is never returned: either it's overwritten + # ### below, or the return code is non-zero + REPLY=arg0 + else + REPLY=path + fi + + if [[ ${1[1]} == '=' && $1 == ??* && ${1[2]} != $'\x28' && $zsyh_user_options[equals] == 'on' && $expanded_path[1] != '/' ]]; then + REPLY=unknown-token # will error out if executed + return 0 + fi + + [[ -z $expanded_path ]] && return 1 + + # Check if this is a blacklisted path + if [[ $expanded_path[1] == / ]]; then + tmp_path=$expanded_path + else + tmp_path=$PWD/$expanded_path + fi + tmp_path=$tmp_path:a + + while [[ $tmp_path != / ]]; do + [[ -n ${(M)ZSH_HIGHLIGHT_DIRS_BLACKLIST:#$tmp_path} ]] && return 1 + tmp_path=$tmp_path:h + done + + if (( in_command_position )); then + if [[ -x $expanded_path ]]; then + if (( autocd )); then + if [[ -d $expanded_path ]]; then + REPLY=autodirectory + fi + return 0 + elif [[ ! -d $expanded_path ]]; then + # ### This seems unreachable for the current callers + return 0 + fi + fi + else + if [[ -L $expanded_path || -e $expanded_path ]]; then + return 0 + fi + fi + + # Search the path in CDPATH + if [[ $expanded_path != /* ]] && (( autocd || ! in_command_position )); then + # TODO: When we've dropped support for pre-5.0.6 zsh, use the *(Y1) glob qualifier here. + local cdpath_dir + for cdpath_dir in $cdpath ; do + if [[ -d "$cdpath_dir/$expanded_path" && -x "$cdpath_dir/$expanded_path" ]]; then + if (( in_command_position && autocd )); then + REPLY=autodirectory + fi + return 0 + fi + done + fi + + # If dirname($1) doesn't exist, neither does $1. + [[ ! -d ${expanded_path:h} ]] && return 1 + + # If this word ends the buffer, check if it's the prefix of a valid path. + if (( has_end && (len == end_pos) )) && + (( ! $#in_alias )) && + [[ $WIDGET != zle-line-finish ]]; then + # TODO: When we've dropped support for pre-5.0.6 zsh, use the *(Y1) glob qualifier here. + local -a tmp + if (( in_command_position )); then + # We include directories even when autocd is enabled, because those + # directories might contain executable files: e.g., BUFFER="/bi" en route + # to typing "/bin/sh". + tmp=( ${expanded_path}*(N-*,N-/) ) + else + tmp=( ${expanded_path}*(N) ) + fi + (( ${+tmp[1]} )) && REPLY=path_prefix && return 0 + fi + + # It's not a path. + return 1 +} + +# Highlight an argument and possibly special chars in quotes starting at $1 in $arg +# This command will at least highlight $1 to end_pos with the default style +# If $2 is set to 0, the argument cannot be highlighted as an option. +# +# This function currently assumes it's never called for the command word. +_zsh_highlight_main_highlighter_highlight_argument() +{ + local base_style=default i=$1 option_eligible=${2:-1} path_eligible=1 ret start style + local -a highlights + + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + + case "$arg[i]" in + '%') + if [[ $arg[i+1] == '?' ]]; then + (( i += 2 )) + fi + ;; + '-') + if (( option_eligible )); then + if [[ $arg[i+1] == - ]]; then + base_style=double-hyphen-option + else + base_style=single-hyphen-option + fi + path_eligible=0 + fi + ;; + '=') + if [[ $arg[i+1] == $'\x28' ]]; then + (( i += 2 )) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1] + ret=$? + (( i += REPLY )) + highlights+=( + $(( start_pos + $1 - 1 )) $(( start_pos + i )) process-substitution + $(( start_pos + $1 - 1 )) $(( start_pos + $1 + 1 )) process-substitution-delimiter + $reply + ) + if (( ret == 0 )); then + highlights+=($(( start_pos + i - 1 )) $(( start_pos + i )) process-substitution-delimiter) + fi + fi + esac + + # This loop is a hot path. Keep it fast! + (( --i )) + while (( ++i <= $#arg )); do + i=${arg[(ib.i.)[\\\'\"\`\$\<\>\*\?]]} + case "$arg[$i]" in + "") break;; + "\\") (( i += 1 )); continue;; + "'") + _zsh_highlight_main_highlighter_highlight_single_quote $i + (( i = REPLY )) + highlights+=($reply) + ;; + '"') + _zsh_highlight_main_highlighter_highlight_double_quote $i + (( i = REPLY )) + highlights+=($reply) + ;; + '`') + _zsh_highlight_main_highlighter_highlight_backtick $i + (( i = REPLY )) + highlights+=($reply) + ;; + '$') + if [[ $arg[i+1] != "'" ]]; then + path_eligible=0 + fi + if [[ $arg[i+1] == "'" ]]; then + _zsh_highlight_main_highlighter_highlight_dollar_quote $i + (( i = REPLY )) + highlights+=($reply) + continue + elif [[ $arg[i+1] == $'\x28' ]]; then + if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then + # Arithmetic expansion + (( i = REPLY )) + highlights+=($reply) + continue + fi + start=$i + (( i += 2 )) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1] + ret=$? + (( i += REPLY )) + highlights+=( + $(( start_pos + start - 1)) $(( start_pos + i )) command-substitution-unquoted + $(( start_pos + start - 1)) $(( start_pos + start + 1)) command-substitution-delimiter-unquoted + $reply + ) + if (( ret == 0 )); then + highlights+=($(( start_pos + i - 1)) $(( start_pos + i )) command-substitution-delimiter-unquoted) + fi + continue + fi + while [[ $arg[i+1] == [=~#+'^'] ]]; do + (( i += 1 )) + done + if [[ $arg[i+1] == [*@#?$!-] ]]; then + (( i += 1 )) + fi;; + [\<\>]) + if [[ $arg[i+1] == $'\x28' ]]; then # \x28 = open paren + start=$i + (( i += 2 )) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1] + ret=$? + (( i += REPLY )) + highlights+=( + $(( start_pos + start - 1)) $(( start_pos + i )) process-substitution + $(( start_pos + start - 1)) $(( start_pos + start + 1 )) process-substitution-delimiter + $reply + ) + if (( ret == 0 )); then + highlights+=($(( start_pos + i - 1)) $(( start_pos + i )) process-substitution-delimiter) + fi + continue + fi + ;| + *) + if $highlight_glob && + [[ $zsyh_user_options[multios] == on || $in_redirection -eq 0 ]] && + [[ ${arg[$i]} =~ ^[*?] || ${arg:$i-1} =~ ^\<[0-9]*-[0-9]*\> ]]; then + highlights+=($(( start_pos + i - 1 )) $(( start_pos + i + $#MATCH - 1)) globbing) + (( i += $#MATCH - 1 )) + path_eligible=0 + else + continue + fi + ;; + esac + done + + if (( path_eligible )); then + if (( in_redirection )) && [[ $last_arg == *['<>']['&'] && $arg[$1,-1] == (<0->|p|-) ]]; then + if [[ $arg[$1,-1] == (p|-) ]]; then + base_style=redirection + else + base_style=numeric-fd + fi + # This function is currently never called for the command word, so $2 is hard-coded as 0. + elif _zsh_highlight_main_highlighter_check_path $arg[$1,-1] 0; then + base_style=$REPLY + _zsh_highlight_main_highlighter_highlight_path_separators $base_style + highlights+=($reply) + fi + fi + + highlights=($(( start_pos + $1 - 1 )) $end_pos $base_style $highlights) + _zsh_highlight_main_add_many_region_highlights $highlights +} + +# Quote Helper Functions +# +# $arg is expected to be set to the current argument +# $start_pos is expected to be set to the start of $arg in $BUFFER +# $1 is the index in $arg which starts the quote +# $REPLY is returned as the end of quote index in $arg +# $reply is returned as an array of region_highlight additions + +# Highlight single-quoted strings +_zsh_highlight_main_highlighter_highlight_single_quote() +{ + local arg1=$1 i q=\' style + i=$arg[(ib:arg1+1:)$q] + reply=() + + if [[ $zsyh_user_options[rcquotes] == on ]]; then + while [[ $arg[i+1] == "'" ]]; do + reply+=($(( start_pos + i - 1 )) $(( start_pos + i + 1 )) rc-quote) + (( i++ )) + i=$arg[(ib:i+1:)$q] + done + fi + + if [[ $arg[i] == "'" ]]; then + style=single-quoted-argument + else + # If unclosed, i points past the end + (( i-- )) + style=single-quoted-argument-unclosed + fi + reply=($(( start_pos + arg1 - 1 )) $(( start_pos + i )) $style $reply) + REPLY=$i +} + +# Highlight special chars inside double-quoted strings +_zsh_highlight_main_highlighter_highlight_double_quote() +{ + local -a breaks match mbegin mend saved_reply + local MATCH; integer last_break=$(( start_pos + $1 - 1 )) MBEGIN MEND + local i j k ret style + reply=() + + for (( i = $1 + 1 ; i <= $#arg ; i += 1 )) ; do + (( j = i + start_pos - 1 )) + (( k = j + 1 )) + case "$arg[$i]" in + ('"') break;; + ('`') saved_reply=($reply) + _zsh_highlight_main_highlighter_highlight_backtick $i + (( i = REPLY )) + reply=($saved_reply $reply) + continue + ;; + ('$') style=dollar-double-quoted-argument + # Look for an alphanumeric parameter name. + if [[ ${arg:$i} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+) ]] ; then + (( k += $#MATCH )) # highlight the parameter name + (( i += $#MATCH )) # skip past it + elif [[ ${arg:$i} =~ ^[{]([A-Za-z_][A-Za-z0-9_]*|[0-9]+)[}] ]] ; then + (( k += $#MATCH )) # highlight the parameter name and braces + (( i += $#MATCH )) # skip past it + elif [[ $arg[i+1] == '$' ]]; then + # $$ - pid + (( k += 1 )) # highlight both dollar signs + (( i += 1 )) # don't consider the second one as introducing another parameter expansion + elif [[ $arg[i+1] == [-#*@?] ]]; then + # $#, $*, $@, $?, $- - like $$ above + (( k += 1 )) # highlight both dollar signs + (( i += 1 )) # don't consider the second one as introducing another parameter expansion + elif [[ $arg[i+1] == $'\x28' ]]; then + saved_reply=($reply) + if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then + # Arithmetic expansion + (( i = REPLY )) + reply=($saved_reply $reply) + continue + fi + + breaks+=( $last_break $(( start_pos + i - 1 )) ) + (( i += 2 )) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1] + ret=$? + (( i += REPLY )) + last_break=$(( start_pos + i )) + reply=( + $saved_reply + $j $(( start_pos + i )) command-substitution-quoted + $j $(( j + 2 )) command-substitution-delimiter-quoted + $reply + ) + if (( ret == 0 )); then + reply+=($(( start_pos + i - 1 )) $(( start_pos + i )) command-substitution-delimiter-quoted) + fi + continue + else + continue + fi + ;; + "\\") style=back-double-quoted-argument + if [[ \\\`\"\$${histchars[1]} == *$arg[$i+1]* ]]; then + (( k += 1 )) # Color following char too. + (( i += 1 )) # Skip parsing the escaped char. + else + continue + fi + ;; + ($histchars[1]) # ! - may be a history expansion + if [[ $arg[i+1] != ('='|$'\x28'|$'\x7b'|[[:blank:]]) ]]; then + style=history-expansion + else + continue + fi + ;; + *) continue ;; + + esac + reply+=($j $k $style) + done + + if [[ $arg[i] == '"' ]]; then + style=double-quoted-argument + else + # If unclosed, i points past the end + (( i-- )) + style=double-quoted-argument-unclosed + fi + (( last_break != start_pos + i )) && breaks+=( $last_break $(( start_pos + i )) ) + saved_reply=($reply) + reply=() + for 1 2 in $breaks; do + (( $1 != $2 )) && reply+=($1 $2 $style) + done + reply+=($saved_reply) + REPLY=$i +} + +# Highlight special chars inside dollar-quoted strings +_zsh_highlight_main_highlighter_highlight_dollar_quote() +{ + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + local i j k style + local AA + integer c + reply=() + + for (( i = $1 + 2 ; i <= $#arg ; i += 1 )) ; do + (( j = i + start_pos - 1 )) + (( k = j + 1 )) + case "$arg[$i]" in + "'") break;; + "\\") style=back-dollar-quoted-argument + for (( c = i + 1 ; c <= $#arg ; c += 1 )); do + [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break + done + AA=$arg[$i+1,$c-1] + # Matching for HEX and OCT values like \0xA6, \xA6 or \012 + if [[ "$AA" =~ "^(x|X)[0-9a-fA-F]{1,2}" + || "$AA" =~ "^[0-7]{1,3}" + || "$AA" =~ "^u[0-9a-fA-F]{1,4}" + || "$AA" =~ "^U[0-9a-fA-F]{1,8}" + ]]; then + (( k += $#MATCH )) + (( i += $#MATCH )) + else + if (( $#arg > $i+1 )) && [[ $arg[$i+1] == [xXuU] ]]; then + # \x not followed by hex digits is probably an error + style=unknown-token + fi + (( k += 1 )) # Color following char too. + (( i += 1 )) # Skip parsing the escaped char. + fi + ;; + *) continue ;; + + esac + reply+=($j $k $style) + done + + if [[ $arg[i] == "'" ]]; then + style=dollar-quoted-argument + else + # If unclosed, i points past the end + (( i-- )) + style=dollar-quoted-argument-unclosed + fi + reply=($(( start_pos + $1 - 1 )) $(( start_pos + i )) $style $reply) + REPLY=$i +} + +# Highlight backtick substitutions +_zsh_highlight_main_highlighter_highlight_backtick() +{ + # buf is the contents of the backticks with a layer of backslashes removed. + # last is the index of arg for the start of the string to be copied into buf. + # It is either one past the beginning backtick or one past the last backslash. + # offset is a count of consumed \ (the delta between buf and arg). + # offsets is an array indexed by buf offset of when the delta between buf and arg changes. + # It is sparse, so search backwards to the last value + local buf highlight style=back-quoted-argument-unclosed style_end + local -i arg1=$1 end_ i=$1 last offset=0 start subshell_has_end=0 + local -a highlight_zone highlights offsets + reply=() + + last=$(( arg1 + 1 )) + # Remove one layer of backslashes and find the end + while i=$arg[(ib:i+1:)[\\\\\`]]; do # find the next \ or ` + if (( i > $#arg )); then + buf=$buf$arg[last,i] + offsets[i-arg1-offset]='' # So we never index past the end + (( i-- )) + subshell_has_end=$(( has_end && (start_pos + i == len) )) + break + fi + + if [[ $arg[i] == '\' ]]; then + (( i++ )) + # POSIX XCU 2.6.3 + if [[ $arg[i] == ('$'|'`'|'\') ]]; then + buf=$buf$arg[last,i-2] + (( offset++ )) + # offsets is relative to buf, so adjust by -arg1 + offsets[i-arg1-offset]=$offset + else + buf=$buf$arg[last,i-1] + fi + else # it's an unquoted ` and this is the end + style=back-quoted-argument + style_end=back-quoted-argument-delimiter + buf=$buf$arg[last,i-1] + offsets[i-arg1-offset]='' # So we never index past the end + break + fi + last=$i + done + + _zsh_highlight_main_highlighter_highlight_list 0 '' $subshell_has_end $buf + + # Munge the reply to account for removed backslashes + for start end_ highlight in $reply; do + start=$(( start_pos + arg1 + start + offsets[(Rb:start:)?*] )) + end_=$(( start_pos + arg1 + end_ + offsets[(Rb:end_:)?*] )) + highlights+=($start $end_ $highlight) + if [[ $highlight == back-quoted-argument-unclosed && $style == back-quoted-argument ]]; then + # An inner backtick command substitution is unclosed, but this level is closed + style_end=unknown-token + fi + done + + reply=( + $(( start_pos + arg1 - 1 )) $(( start_pos + i )) $style + $(( start_pos + arg1 - 1 )) $(( start_pos + arg1 )) back-quoted-argument-delimiter + $highlights + ) + if (( $#style_end )); then + reply+=($(( start_pos + i - 1)) $(( start_pos + i )) $style_end) + fi + REPLY=$i +} + +# Highlight special chars inside arithmetic expansions +_zsh_highlight_main_highlighter_highlight_arithmetic() +{ + local -a saved_reply + local style + integer i j k paren_depth ret + reply=() + + for (( i = $1 + 3 ; i <= end_pos - start_pos ; i += 1 )) ; do + (( j = i + start_pos - 1 )) + (( k = j + 1 )) + case "$arg[$i]" in + [\'\"\\@{}]) + style=unknown-token + ;; + '(') + (( paren_depth++ )) + continue + ;; + ')') + if (( paren_depth )); then + (( paren_depth-- )) + continue + fi + [[ $arg[i+1] == ')' ]] && { (( i++ )); break; } + # Special case ) at the end of the buffer to avoid flashing command substitution for a character + (( has_end && (len == k) )) && break + # This is a single paren and there are no open parens, so this isn't an arithmetic expansion + return 1 + ;; + '`') + saved_reply=($reply) + _zsh_highlight_main_highlighter_highlight_backtick $i + (( i = REPLY )) + reply=($saved_reply $reply) + continue + ;; + '$' ) + if [[ $arg[i+1] == $'\x28' ]]; then + saved_reply=($reply) + if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then + # Arithmetic expansion + (( i = REPLY )) + reply=($saved_reply $reply) + continue + fi + + (( i += 2 )) + _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,end_pos] + ret=$? + (( i += REPLY )) + reply=( + $saved_reply + $j $(( start_pos + i )) command-substitution-quoted + $j $(( j + 2 )) command-substitution-delimiter-quoted + $reply + ) + if (( ret == 0 )); then + reply+=($(( start_pos + i - 1 )) $(( start_pos + i )) command-substitution-delimiter) + fi + continue + else + continue + fi + ;; + ($histchars[1]) # ! - may be a history expansion + if [[ $arg[i+1] != ('='|$'\x28'|$'\x7b'|[[:blank:]]) ]]; then + style=history-expansion + else + continue + fi + ;; + *) + continue + ;; + + esac + reply+=($j $k $style) + done + + if [[ $arg[i] != ')' ]]; then + # If unclosed, i points past the end + (( i-- )) + fi + style=arithmetic-expansion + reply=($(( start_pos + $1 - 1)) $(( start_pos + i )) arithmetic-expansion $reply) + REPLY=$i +} + + +# Called with a single positional argument. +# Perform filename expansion (tilde expansion) on the argument and set $REPLY to the expanded value. +# +# Does not perform filename generation (globbing). +_zsh_highlight_main_highlighter_expand_path() +{ + (( $# == 1 )) || print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_main_highlighter_expand_path: called without argument" + + # The $~1 syntax normally performs filename generation, but not when it's on the right-hand side of ${x:=y}. + setopt localoptions nonomatch + unset REPLY + : ${REPLY:=${(Q)${~1}}} +} + +# ------------------------------------------------------------------------------------------------- +# Main highlighter initialization +# ------------------------------------------------------------------------------------------------- + +_zsh_highlight_main__precmd_hook() { + # Unset the WARN_NESTED_VAR option, taking care not to error if the option + # doesn't exist (zsh older than zsh-5.3.1-test-2). + setopt localoptions + if eval '[[ -o warnnestedvar ]]' 2>/dev/null; then + unsetopt warnnestedvar + fi + + _zsh_highlight_main__command_type_cache=() +} + +autoload -Uz add-zsh-hook +if add-zsh-hook precmd _zsh_highlight_main__precmd_hook 2>/dev/null; then + # Initialize command type cache + typeset -gA _zsh_highlight_main__command_type_cache +else + print -r -- >&2 'zsh-syntax-highlighting: Failed to load add-zsh-hook. Some speed optimizations will not be used.' + # Make sure the cache is unset + unset _zsh_highlight_main__command_type_cache +fi +typeset -ga ZSH_HIGHLIGHT_DIRS_BLACKLIST diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/symlink_README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/symlink_README.md new file mode 100644 index 00000000..03547318 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_main/symlink_README.md @@ -0,0 +1 @@ +../../docs/highlighters/main.md \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/exact_test-data/rm-rf.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/exact_test-data/rm-rf.zsh new file mode 100644 index 00000000..2f769294 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/exact_test-data/rm-rf.zsh @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') + +BUFFER='rm -rf /' + +expected_region_highlight=( + "1 8 fg=white,bold,bg=red" # rm -rf / +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/pattern-highlighter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/pattern-highlighter.zsh new file mode 100644 index 00000000..e0422d08 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/pattern-highlighter.zsh @@ -0,0 +1,60 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# List of keyword and color pairs. +typeset -gA ZSH_HIGHLIGHT_PATTERNS + +# Whether the pattern highlighter should be called or not. +_zsh_highlight_highlighter_pattern_predicate() +{ + _zsh_highlight_buffer_modified +} + +# Pattern syntax highlighting function. +_zsh_highlight_highlighter_pattern_paint() +{ + setopt localoptions extendedglob + local pattern + for pattern in ${(k)ZSH_HIGHLIGHT_PATTERNS}; do + _zsh_highlight_pattern_highlighter_loop "$BUFFER" "$pattern" + done +} + +_zsh_highlight_pattern_highlighter_loop() +{ + # This does *not* do its job syntactically, sorry. + local buf="$1" pat="$2" + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + if [[ "$buf" == (#b)(*)(${~pat})* ]]; then + region_highlight+=("$((mbegin[2] - 1)) $mend[2] $ZSH_HIGHLIGHT_PATTERNS[$pat], memo=zsh-syntax-highlighting") + "$0" "$match[1]" "$pat"; return $? + fi +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/symlink_README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/symlink_README.md new file mode 100644 index 00000000..5ff00e64 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_pattern/symlink_README.md @@ -0,0 +1 @@ +../../docs/highlighters/pattern.md \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/complex.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/complex.zsh new file mode 100644 index 00000000..4e0089b9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/complex.zsh @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +ZSH_HIGHLIGHT_REGEXP+=('[0-9\+\-]+' 'fg=white,bold,bg=red') + +BUFFER='echo 1+9-3 7+2' + +expected_region_highlight=( + "6 10 fg=white,bold,bg=red" + "12 14 fg=white,bold,bg=red" +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/subexpression.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/subexpression.zsh new file mode 100644 index 00000000..308cb413 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/subexpression.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ls foo' +ZSH_HIGHLIGHT_REGEXP=('(^| )(ls|cd)($| )' 'fg=green') + +expected_region_highlight=( + '1 3 fg=green' # "ls " +) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/word-boundary.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/word-boundary.zsh new file mode 100644 index 00000000..1f4f6665 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/exact_test-data/word-boundary.zsh @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +if zmodload zsh/pcre 2>/dev/null; then + setopt RE_MATCH_PCRE + + ZSH_HIGHLIGHT_REGEXP+=('\bsudo\b' 'fg=white,bold,bg=red') + + BUFFER='sudo ls' + + expected_region_highlight=( + "1 4 fg=white,bold,bg=red" + ) +else + skip_test='Test requires zsh/pcre' +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/regexp-highlighter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/regexp-highlighter.zsh new file mode 100644 index 00000000..0d43aacd --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/regexp-highlighter.zsh @@ -0,0 +1,62 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# List of keyword and color pairs. +typeset -gA ZSH_HIGHLIGHT_REGEXP + +# Whether the pattern highlighter should be called or not. +_zsh_highlight_highlighter_regexp_predicate() +{ + _zsh_highlight_buffer_modified +} + +# Pattern syntax highlighting function. +_zsh_highlight_highlighter_regexp_paint() +{ + setopt localoptions extendedglob + local pattern + for pattern in ${(k)ZSH_HIGHLIGHT_REGEXP}; do + _zsh_highlight_regexp_highlighter_loop "$BUFFER" "$pattern" + done +} + +_zsh_highlight_regexp_highlighter_loop() +{ + local buf="$1" pat="$2" + integer OFFSET=0 + local MATCH; integer MBEGIN MEND + local -a match mbegin mend + while true; do + [[ "$buf" =~ "$pat" ]] || return; + region_highlight+=("$((MBEGIN - 1 + OFFSET)) $((MEND + OFFSET)) $ZSH_HIGHLIGHT_REGEXP[$pat], memo=zsh-syntax-highlighting") + buf="$buf[$(($MEND+1)),-1]" + OFFSET=$((MEND+OFFSET)); + done +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/symlink_README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/symlink_README.md new file mode 100644 index 00000000..9f2522d5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_regexp/symlink_README.md @@ -0,0 +1 @@ +../../docs/highlighters/regexp.md \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_root/root-highlighter.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_root/root-highlighter.zsh new file mode 100644 index 00000000..3718c449 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_root/root-highlighter.zsh @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------------------------------- +# 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Define default styles. +: ${ZSH_HIGHLIGHT_STYLES[root]:=standout} + +# Whether the root highlighter should be called or not. +_zsh_highlight_highlighter_root_predicate() +{ + _zsh_highlight_buffer_modified +} + +# root highlighting function. +_zsh_highlight_highlighter_root_paint() +{ + if (( EUID == 0 )) { _zsh_highlight_add_highlight 0 $#BUFFER root } +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_root/symlink_README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_root/symlink_README.md new file mode 100644 index 00000000..ca6799d6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_highlighters/exact_root/symlink_README.md @@ -0,0 +1 @@ +../../docs/highlighters/root.md \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/after1-smaller.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/after1-smaller.png new file mode 100644 index 0000000000000000000000000000000000000000..768294c3b3cdee1b8bb60849faad86aaa05b4ab9 GIT binary patch literal 2517 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 Gp$P!J#f60c literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/after1.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/after1.png new file mode 100644 index 0000000000000000000000000000000000000000..ea378d3efbcf363e727d6c0689702d02ebd9700a GIT binary patch literal 5842 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/after2-smaller.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/after2-smaller.png new file mode 100644 index 0000000000000000000000000000000000000000..8b5b1f8f21d923c80a7d4c787e66774f4d9a170f GIT binary patch literal 4386 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/after3-smaller.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/after3-smaller.png new file mode 100644 index 0000000000000000000000000000000000000000..d6aaa7bdf30aea607d98d8fa23f715534cb3bea7 GIT binary patch literal 1673 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�UI$EDE9<9C2>~#Ll>GL+*ugtryr`M(Z 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 aGSez?YuFLa`+|Xifx*+&&t;ucLK6V--rW8G literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before1.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before1.png new file mode 100644 index 0000000000000000000000000000000000000000..80c6f54ff5941aad6244aa9f3be3cb4d4d0311ec GIT binary patch literal 2636 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 S^S%Hz6Fpu1T-G@yGywq2gzV7( literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before2-smaller.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before2-smaller.png new file mode 100644 index 0000000000000000000000000000000000000000..991a716d54186b242ea0a09c13b5533f5719d6bf GIT binary patch literal 2605 zcmeAS@N?(olHy`uVBq!ia0y~yVA#ySz@W^*!oa{#TK(CYfq{V~-O<;Pfnj4m_n$;o z1_lO&WRD zmbgK;wrPfG-@#?({ajia&lUQGrBVWFE9Q6}k;r5hU3T}uqI%6{rcLub4WG&+2Mc^; ztZ@FJYg^eI=wjSB)3Hs`;@pOM>!`=Z{@VDA$o_I4_uAObkkS5c`&Sc(#!L9a>^5P7?do%RHuem zp9Jr9##vrLR(J-}DY*)s9e(l?2g>N1*M3uWUcIT>aj(63*8IQ;&(e%pPU4Nob5 znU*Kkm%HJUh@!|U8D62R^^;%ewp3-dTwn>!+7U2=YpR-wTWglu6_3hU&yqG*{hodA z;@e%$#ic&AtpR%kxGuI!X^E_y{7R!`oA%L*hdg8hS1wyIPoV3fr0wd?Q&;p%iz1DK z%Oh*+|K45c;$CZQ?{~I(+DpbO$*rf?o3}7sk~nCv?^#rWg!E5-hDaU81at4kqB23| zo-{$#1BGG}o?X|y(ZpgE=%s&;QDJ_8)#YBLq{gJUXJrq9qBfo@{KtJH@PGu@4jzjG zsy+#f=0WEwri)4!+R9xaLW=nK$oBq{zc+$`bd1bZM_Ulag)u$IM>QwJ9`F11Zo8X}}S)cTl3Hr@kZCzRNJd+uGP9+uhO{}18-_wiz@wo_r!{p=&_@}D2y9;!OWsxP9bW9_#a zpN`syO{m{@x5Rbsa?6(G5$E^rIs5nd?Wx5M8(dr7^UB$&%{;1ObH8s+vPkKltbc_M zmREiL-jv_?Y*~!ZhdF5u9KPquzucF6^Re~NQJ+-nmmPW~50*Cg@;$vCBX^-^-Or|2P}+Yyu$B`$X95eNM&oToFAzc5r1T3gU+<#)``k94(?7d zyd7gZ;Xu*7=|Oq1N1wRy60Hp8z?O*vsjvJCwO$N&6STYV}} zR=k)ox?%l{6WR_My_R98{Yp8kCC(X?ZMf!N|8~Rc+dnrRXJ7Da*0Pkpe%&!~B8y7` z9*eA8_{%A`Mejm&)Y`aL>v(hpW-T~e6{3~#m1eN)`-eB^}g68 z#P}mRG=JOc+dm6eW-459Vn4HJU+%JhnN|NUlq|fxCH$e2M$AMf;Sv|$mJ4jYB3{?K z-Tq7dJ*_{>yVRq-)X6*7w6Q*W(*$>G6R#Efysq53=;VC%O5oGXO?#XsMy-)pIL~V3 z>ey>B%R9sF$JejU09%yxO!6c9rOb08x2*0c#lG;j`}xFpg2n>&_cNcwr5W9k3s$o6 zV!3eH>i=C2@%?#+c!XZK6t@Luh1E&iQ%Kkc4qTUQT37%tq)D&KW_aR;MlMZA`s@iItIM5&HsPzMexI2odvo4VL8+ZD+(JIz zjIY;!u)ptDSzS!#yu*i8Hq2DF^sttn`t?qh-E_;}!fTeuhcjQ8B*v!}Za9nM!0Ce5 ziozUjn>(i8IJrC~$E|O33;T<6TJC@4Y!c2L5dO)rV?y;uhOZuG>UZ~9_+}q)cDDbM z>sq`(^WvMbp7ZDWjju%C{G=7O^VQmZk%yDR4{dRie`R+ztkIHZZ~XEtA>5@AlEOpC1F!gVFyGitHY>NWQRFHP3_T)*(_uMpQ;i*;N%k7jK* zd%^iMYqDj_*IeV081AWycmMrRzUo`nx}vo_IoH2GJ-+dtO^cHqi_ng~&^N_DRBdAX z!}}(kOix?FY|fDX$?(F|(~&F(&b~?KexN$jPh``n{>K#_N?UI62|w_v3O>ZPE8s{P z!yXx>R{ogWEyKx`vR<2>S@-^Q|NE-a zeNN);iseRqd0VqeQ~TeZ?%360*g@OvNUO_QmvAUQWHy38H@}J&2$Y7bd3x`3=FJ{O|6W~ pwG9lc3=AA+SyiBD$jwj5OsmAL!Qgn)5e5bZ22WQ%mvv4FO#p=IsK)>R literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before2.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before2.png new file mode 100644 index 0000000000000000000000000000000000000000..48cfc327a65b527fd73a8eaf144298e753e64357 GIT binary patch literal 2614 zcmeAS@N?(olHy`uVBq!ia0y~yU`%6RU~uDLU|?XlH7(JDfq{V~-O<;Pfnj4m_n$;o z1_lO&WRDI~ z{R&rBaE1szQg-z3Yi*vlV#yU1UtxI_w`kQP%^{amxQYx8uFAZ$_~H_|z{MT?4-7A= zEVoM%@zGXeJ-T?BMnZ>t-+69di(Y=(ee;g& zVaA(oIPI`)ZZ19k>4%VXOn+TXn8fZ_G~NPxz<-+_^%RD@%et*k*~}qUFTT2Q+b^6Wp(4Uk@0d12 zTaf8&9s7=)*PEOEzDnEoYsD`s!<70>Gg317lr>{5FYSEY!gT4+(T_2D3uO0;zsi4b zo-0?^p?UsaufzN=&Q^R4efxWjiSxhU&HMRGPQRV|qp-u@#b@JN`^__KBNkuUmnWa~ z|H}hr?tRX7A8WIeU)`Vg-N()J%tV{ByZ3KOv)#W)=$T>6Ry+1>XP(cyli~PNf5y3k zmu%)Oxv}t%MYZ9S2Y0j$`*k#&O#eTyKg1a%&(#xgwxpt5==%^jlF~j6=Cp_mx%ak|jOQIy08v zY;a5TlrZRin0YM3Zudm_*6(+ZMFq{(*t>l0g_@-c7A#o7w&Leh=d(p~p8wp>w(0DN z<3dl>4((5y`B%?(hV-(>?JVD>a@ug7PMK;qc?atnhPD5?Ai>)hA+mC<;c>>p9$G93 z?w#wHUd!;D>(swl6qCH8y_-=bKgVH}+APk0yFy5ddTcYmT%;*<<@@a9o#fP4rXZ$Yh zzHjo?@;Xd^{s<60yPunnPtGh`BtB0)WCdRid!%CKR6uB1L7_W_tnJm!an5(`)(0$34uzFW; zfM0nSp3G|&b09o5z(OjrX*J)^i3e)JP2L~ho^*D3*~N_IGh$6x(!ZlRFT8rM_%K>?`}EI?`${XOR|@Vfy{F2x`|iz* z(un01rYFBmG@5n&fZDC;35$Q5RL|bf&9jPQV%oOu{YLMTw|0kB%$ojiLG4YE6>oQK z{;+e(wO8*AmuTEN{WH*Y!Ony8WoH=jeC|6`b@+UfMSD|oMp4ARQyKGE3WX0YOWW=L zS$M-2<&_ql&z^tWUst-#;VE0&ew9l#9X6d8etR7CGWj03FID@W?$WKlqLp}(cJ39n z&$`i^lBeTRxcQ9J^H;Jf1eOJTTIIjtp~%hmHeaJzXU!De@l~Mw?d1L>UiA}2vz{-W z`DRnCp0`Q$^~C))3)V2+^^TTJ@omRts9E6gPdoG)j$7y z$NiAigeRc%9AY4tx>r(7a($8fY=P&$7K-lJc;Ubcx7_Bg6h^utq#$v{2J5Len@XS$7XUYBjIKxS4_@f^^+&%w_UBj z%a`ql3hTMb?d6)vB$#-&92j7q#|sOdAAq{6g<=l`nSs%~p#J}R_x?;Ls8GiLLj zec$H1$>*pho2&3+?)fuk`5d4AO^mzAEM~=O>;3cg=%k-{64TphJe_mi(fO;gG)`S8 zT6FNgr|HFwDkbNa{_>Vr{pDvI?v<+Ede}Pk+M&nA8_U;}sF@ip-mvY@=FsLV?=P%B zv0C?rVes;k_aoc2Uvp1-J8#pSd!6&EMfc{H74hZ&k5_12ULh+U^MAAO%#R-Bzbo>S z^{ngt|2aNh)OpDH$Gse@iWR)azn0$BDTpy!UFUDLY>6W>2OQrMjM z^uH8DAIC0dx4Nl|jl+KMZ)HDqLiUmHg|9}R+6yNBz1u48GV5?_mz<8c~vxSdwa$T$GwvlFDFYU}&amXrOCk5Mp3pWo&9?WUg&s lU}a$7ILoR6MMG|WN@iLmZVd*=OV0 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before3-smaller.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before3-smaller.png new file mode 100644 index 0000000000000000000000000000000000000000..e525c6d4b1478af025a32e29bed9c3883d5e9d2d GIT binary patch literal 763 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU=ZS9U|?YA_@olTz`($g?&#~tz_78O`%fY( z0|SFXvPY0F14ES>14Ba#1H&%{28MmEry73tF%YYuWfzcPQX-pLClf{}4Q&nY>o0e#Je$ceNp9ZkuNrA{coP!@jz53VWv|M^bBKRV<)wSxO5N%28-Kpq zdf>_-)}<$kdVkLdI8%|tw(#km(uo;md;$sVo3{AnGe;d#U^vpAG{H2=u4&^WdAZ^p zhx=5HemTP(nR;&O{qprD46&ELrd(ZYnp5!Wg1CSM6VIB(%cQ*)bm{+4%HG-^nBcKP|HOgny)u4>9V^+H&rI5JTcgwC7q|VKx3w*Tk*A(A zMoqA1K7Rk7l)}V%A-}^7&sh0ps4mnm2`o*U*U`KwVqL_U{dYSj6jrocos>OOAvy2x z%YV8G1``wC&aM3&cmE|b7n_~i=H|qMLe(1DwJZPTJ&Qh7AUU(X>4r|EwYVJ@rvMYV@aJrg6hM}O3O@P1*F>fT&IACcKkHVh1T zXEw|$)-8O?z`&qd;u=wsl30>zm0XmXSdz+MWMF8fYiOWrWDsItU}b7)Wo)W#U|?ln i@IsA|2}MJ0eoAIqC2kEft9R}LrD{)CKbLh*2~7a_*exXh literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before3.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/before3.png new file mode 100644 index 0000000000000000000000000000000000000000..40c360151a09b90ea2b449b4e8f07c9a16d5837d GIT binary patch literal 1461 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 M>FVdQ&MBb@0H49S#{d8T literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/preview-smaller.png b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_images/preview-smaller.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb84d18e545b56beef047eea45d7b03f9e50c05 GIT binary patch literal 5982 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 V=WLr>#=yY9;OXk;vd$@?2>^ +``` + +All tests may be run with + +```zsh +make test +``` + +which will run all highlighting tests and report results in [TAP format][TAP]. +By default, the results of all tests will be printed; to show only "interesting" +results (tests that failed but were expected to succeed, or vice-versa), run +`make quiet-test` (or `make test QUIET=y`). + +[TAP]: http://testanything.org/ + + +Performance test +---------------- + +[`test-perfs.zsh`](tests/test-perfs.zsh) measures the time spent doing the +highlighting. Usage: + +```zsh +zsh test-perfs.zsh +``` + +All tests may be run with + +```zsh +make perf +``` diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_edit-failed-tests b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_edit-failed-tests new file mode 100644 index 00000000..e3a76685 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_edit-failed-tests @@ -0,0 +1,40 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +type perl sponge >/dev/null || { print -ru2 -- "$0: This script requires perl(1) and sponge(1) [from moreutils]"; exit 1; } + +local editor=( "${(@Q)${(z)${VISUAL:-${EDITOR:-vi}}}}" ) +() { + > "$2" perl -nE '$highlighter = $1 if /^Running test (\S*)/; say "highlighters/${highlighter}/test-data/$1.zsh" if /^## (\S*)/' "$1" + >>"$2" echo "" + >>"$2" cat <"$1" + "${editor[@]}" -- "$2" +} =(${MAKE:-make} quiet-test) =(:) +# TODO: tee(1) the quiet-test output to /dev/tty as it's happening, with colors. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_generate.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_generate.zsh new file mode 100644 index 00000000..56960202 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_generate.zsh @@ -0,0 +1,117 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2016 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +emulate -LR zsh +setopt localoptions extendedglob + +# Required for add-zle-hook-widget. +zmodload zsh/zle + +# Argument parsing. +if (( $# * $# - 7 * $# + 12 )) || [[ $1 == -* ]]; then + print -r -- >&2 "$0: usage: $0 BUFFER HIGHLIGHTER BASENAME [PREAMBLE]" + print -r -- >&2 "" + print -r -- >&2 "Generate highlighters/HIGHLIGHTER/test-data/BASENAME.zsh based on the" + print -r -- >&2 "current highlighting of BUFFER, using the setup code PREAMBLE." + exit 1 +fi +buffer=$1 +ZSH_HIGHLIGHT_HIGHLIGHTERS=( $2 ) +fname=${0:A:h:h}/highlighters/$2/test-data/${3%.zsh}.zsh +preamble=${4:-""} + +# Load the main script. +. ${0:A:h:h}/zsh-syntax-highlighting.zsh + +# Overwrite _zsh_highlight_add_highlight so we get the key itself instead of the style +_zsh_highlight_add_highlight() +{ + region_highlight+=("$1 $2 $3") +} + + +# Copyright block +year="`LC_ALL=C date +%Y`" +if ! { read -q "?Set copyright year to $year? " } always { echo "" }; then + year="YYYY" +fi +<$0 sed -n -e '1,/^$/p' | sed -e "s/2[0-9][0-9][0-9]/${year}/" > $fname +# Assumes stdout is line-buffered +git add -- $fname +exec > >(tee -a $fname) + +# Preamble +if [[ -n $preamble ]]; then + print -rl -- "$preamble" "" +fi + +# Buffer +print -n 'BUFFER=' +if [[ $buffer != (#s)[$'\t -~']#(#e) ]]; then + print -r -- ${(qqqq)buffer} +else + print -r -- ${(qq)buffer} +fi +echo "" + +# Expectations +print 'expected_region_highlight=(' +() { + local i + local PREBUFFER + local BUFFER + + PREBUFFER="" + BUFFER="$buffer" + region_highlight=() + eval $( + exec 3>&1 >/dev/null + typeset -r __tests_tmpdir="$(mktemp -d)" + { + # Use a subshell to ensure $__tests_tmpdir, which is to be rm -rf'd, won't be modified. + (cd -- "$__tests_tmpdir" && eval $preamble && _zsh_highlight && typeset -p region_highlight >&3) + : # workaround zsh bug workers/45305 with respect to the $(…) subshell we're in + } always { + rm -rf -- ${__tests_tmpdir} + } + ) + + for ((i=1; i<=${#region_highlight}; i++)); do + local -a highlight_zone; highlight_zone=( ${(z)region_highlight[$i]} ) + integer start=$highlight_zone[1] end=$highlight_zone[2] + if (( start < end )) # region_highlight ranges are half-open + then + (( --end )) # convert to closed range, like expected_region_highlight + (( ++start, ++end )) # region_highlight is 0-indexed; expected_region_highlight is 1-indexed + fi + printf " %s # %s\n" ${(qq):-"$start $end $highlight_zone[3]"} ${${(qqqq)BUFFER[start,end]}[3,-2]} + done +} +print ')' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_tap-colorizer.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_tap-colorizer.zsh new file mode 100644 index 00000000..f3dc84e7 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_tap-colorizer.zsh @@ -0,0 +1,71 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015, 2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# This is a stdin-to-stdout filter that takes TAP output (such as 'make test') +# on stdin and passes it, colorized, to stdout. + +emulate -LR zsh + +if [[ ! -t 1 ]] ; then + exec cat +fi + +while read -r line; +do + case $line in + # comment (filename header) or plan + (#* | <->..<->) + print -nP %F{blue} + ;; + # SKIP + (*# SKIP*) + print -nP %F{yellow} + ;; + # XPASS + (ok*# TODO*) + print -nP %F{red} + ;; + # XFAIL + (not ok*# TODO*) + print -nP %F{yellow} + ;; + # FAIL + (not ok*) + print -nP %F{red} + ;; + # PASS + (ok*) + print -nP %F{green} + ;; + esac + print -nr - "$line" + print -nP %f + echo "" # newline +done diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_tap-filter b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_tap-filter new file mode 100644 index 00000000..f9aa6041 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_tap-filter @@ -0,0 +1,47 @@ +#!/usr/bin/env perl +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2015 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. +# ------------------------------------------------------------------------------------------------- +# vim: ft=perl sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# This is a stdin-to-stdout filter that takes TAP output (such as 'make test') +# on stdin and deletes lines pertaining to expected results. +# +# More specifically, if any of the test points in a test file either failed but +# was expected to pass, or passed but was expected to fail, then emit that test +# file's output; else, elide that test file's output. + +use v5.10.0; +use warnings; +use strict; + +undef $/; # slurp mode +print for + grep { /^ok.*# TODO/m or /^not ok(?!.*# TODO)/m or /^Bail out!/m } + # Split on plan lines and remove them from the output. (To keep them, + # use the lookahead syntax, «(?=…)», to make the match zero-length.) + split /^\d+\.\.\d+$/m, + ; diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-highlighting.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-highlighting.zsh new file mode 100644 index 00000000..8b564a8b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-highlighting.zsh @@ -0,0 +1,291 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2017 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +setopt NO_UNSET WARN_CREATE_GLOBAL + +# Required for add-zle-hook-widget. +zmodload zsh/zle + +local -r root=${0:h:h} +local -a anon_argv; anon_argv=("$@") + +(){ +set -- "${(@)anon_argv}" +# Check an highlighter was given as argument. +[[ -n "$1" ]] || { + echo >&2 "Bail out! You must provide the name of a valid highlighter as argument." + exit 2 +} + +# Check the highlighter is valid. +[[ -f $root/highlighters/$1/$1-highlighter.zsh ]] || { + echo >&2 "Bail out! Could not find highlighter ${(qq)1}." + exit 2 +} + +# Check the highlighter has test data. +[[ -d $root/highlighters/$1/test-data ]] || { + echo >&2 "Bail out! Highlighter ${(qq)1} has no test data." + exit 2 +} + +# Set up results_filter +local results_filter +if [[ ${QUIET-} == y ]]; then + if type -w perl >/dev/null; then + results_filter=$root/tests/tap-filter + else + echo >&2 "Bail out! quiet mode not supported: perl not found"; exit 2 + fi +else + results_filter=cat +fi +[[ -n $results_filter ]] || { echo >&2 "Bail out! BUG setting \$results_filter"; exit 2 } + +# Load the main script. +# While here, test that it doesn't eat aliases. +print > >($results_filter | $root/tests/tap-colorizer.zsh) -r -- "# global (driver) tests" +print > >($results_filter | $root/tests/tap-colorizer.zsh) -r -- "1..1" +alias -- +plus=plus +alias -- _other=other +local original_alias_dash_L_output="$(alias -L)" +. $root/zsh-syntax-highlighting.zsh +if [[ $original_alias_dash_L_output == $(alias -L) ]]; then + print -r -- "ok 1 # 'alias -- +foo=bar' is preserved" +else + print -r -- "not ok 1 # 'alias -- +foo=bar' is preserved" + exit 1 +fi > >($results_filter | $root/tests/tap-colorizer.zsh) + +# Overwrite _zsh_highlight_add_highlight so we get the key itself instead of the style +_zsh_highlight_add_highlight() +{ + region_highlight+=("$1 $2 $3") +} + +# Activate the highlighter. +ZSH_HIGHLIGHT_HIGHLIGHTERS=($1) + +# In zsh<5.3, 'typeset -p arrayvar' emits two lines, so we use this wrapper instead. +typeset_p() { + for 1 ; do + if [[ ${(tP)1} == *array* ]]; then + print -r -- "$1=( ${(@qqqqP)1} )" + else + print -r -- "$1=${(qqqqP)1}" + fi + done +} + +# Escape # as ♯ and newline as ↵ they are illegal in the 'description' part of TAP output +# The string to escape is «"$@"»; the result is returned in $REPLY. +tap_escape() { + local s="${(j. .)@}" + REPLY="${${s//'#'/♯}//$'\n'/↵}" +} + +# Runs a highlighting test +# $1: data file +run_test_internal() { + + local tests_tempdir="$1"; shift + local srcdir="$PWD" + builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! On ${(qq)1}: cd failed: $?"; return 1 } + + # Load the data and prepare checking it. + local BUFFER CURSOR MARK PENDING PREBUFFER REGION_ACTIVE WIDGET REPLY skip_test fail_test unsorted=0 + local expected_mismatch + local skip_mismatch + local -a expected_region_highlight region_highlight + + local ARG="$1" + local RETURN="" + () { + setopt localoptions + + # WARNING: The remainder of this anonymous function will run with the test's options in effect + if { ! . "$srcdir"/"$ARG" } || (( $#fail_test )); then + print -r -- "1..1" + print -r -- "## ${ARG:t:r}" + tap_escape $fail_test; fail_test=$REPLY + print -r -- "not ok 1 - failed setup: $fail_test" + return ${RETURN:=0} + fi + + (( $#skip_test )) && { + print -r -- "1..0 # SKIP $skip_test" + print -r -- "## ${ARG:t:r}" + return ${RETURN:=0} + } + + # Check the data declares $PREBUFFER or $BUFFER. + [[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! On ${(qq)ARG}: Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return ${RETURN:=1}; } + [[ $PREBUFFER == (''|*$'\n') ]] || { echo >&2 "Bail out! On ${(qq)ARG}: PREBUFFER=${(qqqq)PREBUFFER} doesn't end with a newline"; return ${RETURN:=1}; } + + # Set sane defaults for ZLE variables + : ${CURSOR=$#BUFFER} ${PENDING=0} ${WIDGET=z-sy-h-test-harness-test-widget} + + # Process the data. + _zsh_highlight + }; [[ -z $RETURN ]] || return $RETURN + unset ARG + + integer print_expected_and_actual=0 + + if (( unsorted )); then + region_highlight=("${(@n)region_highlight}") + expected_region_highlight=("${(@n)expected_region_highlight}") + fi + + # Print the plan line, and some comments for human readers + echo "1..$(( $#expected_region_highlight + 1))" + echo "## ${1:t:r}" # note: tests/edit-failed-tests looks for the "##" emitted by this line + [[ -n $PREBUFFER ]] && printf '# %s\n' "$(typeset_p PREBUFFER)" + [[ -n $BUFFER ]] && printf '# %s\n' "$(typeset_p BUFFER)" + + local i + for ((i=1; i<=$#expected_region_highlight; i++)); do + local -a expected_highlight_zone; expected_highlight_zone=( ${(z)expected_region_highlight[i]} ) + integer exp_start=$expected_highlight_zone[1] exp_end=$expected_highlight_zone[2] + local todo= + if (( $+expected_highlight_zone[4] )); then + todo="# TODO $expected_highlight_zone[4]" + skip_mismatch="cardinality check disabled whilst regular test points are expected to fail" + fi + if ! (( $+region_highlight[i] )); then + print -r -- "not ok $i - unmatched expectation ($exp_start $exp_end $expected_highlight_zone[3])" \ + "${skip_mismatch:+"# TODO ${(qqq)skip_mismatch}"}" + if [[ -z $skip_mismatch ]]; then (( ++print_expected_and_actual )); fi + continue + fi + local -a highlight_zone; highlight_zone=( ${(z)region_highlight[i]} ) + integer start=$(( highlight_zone[1] + 1 )) end=$highlight_zone[2] + local desc="[$start,$end] «${BUFFER[$start,$end]}»" + tap_escape $desc; desc=$REPLY + if + [[ $start != $exp_start ]] || + [[ $end != $exp_end ]] || + [[ ${highlight_zone[3]%,} != ${expected_highlight_zone[3]} ]] # remove the comma that's before the memo field + then + print -r -- "not ok $i - $desc - expected ($exp_start $exp_end ${(qqq)expected_highlight_zone[3]}), observed ($start $end ${(qqq)highlight_zone[3]}). $todo" + if [[ -z $todo ]]; then (( ++print_expected_and_actual )); fi + else + print -r -- "ok $i - $desc${todo:+ - }$todo" + fi + unset expected_highlight_zone + unset exp_start exp_end + unset todo + unset highlight_zone + unset start end + unset desc + done + + # If both $skip_mismatch and $expected_mismatch are set, that means the test + # has some XFail test points, _and_ explicitly sets $expected_mismatch as + # well. Explicit settings should have priority, so we ignore $skip_mismatch + # if $expected_mismatch is set. + if [[ -n $skip_mismatch && -z $expected_mismatch ]]; then + tap_escape $skip_mismatch; skip_mismatch=$REPLY + print "ok $i - cardinality check" "# SKIP $skip_mismatch" + else + local todo + if [[ -n $expected_mismatch ]]; then + tap_escape $expected_mismatch; expected_mismatch=$REPLY + todo="# TODO $expected_mismatch" + fi + if (( $#expected_region_highlight == $#region_highlight )); then + print -r -- "ok $i - cardinality check${todo:+ - }$todo" + else + local details + details+="have $#expected_region_highlight expectations and $#region_highlight region_highlight entries: " + details+="«$(typeset_p expected_region_highlight)» «$(typeset_p region_highlight)»" + tap_escape $details; details=$REPLY + print -r -- "not ok $i - cardinality check - $details${todo:+ - }$todo" + if [[ -z $todo ]]; then (( ++print_expected_and_actual )); fi + fi + fi + if (( print_expected_and_actual )); then + () { + local -a left_column right_column + left_column=( "expected_region_highlight" "${(qq)expected_region_highlight[@]}" ) + right_column=( "region_highlight" "${(qq)region_highlight[@]}" ) + integer difference=$(( $#right_column - $#left_column )) + repeat $difference do left_column+=(.); done + paste \ + =(print -rC1 -- $left_column) \ + =(print -rC1 -- $right_column) \ + | if type column >/dev/null; then column -t -s $'\t'; else cat; fi \ + | sed 's/^/# /' + } + fi +} + +# Run a single test file. The exit status is 1 if the test harness had +# an error and 0 otherwise. The exit status does not depend on whether +# test points succeeded or failed. +run_test() { + # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?. + local __tests_tempdir + __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || { + echo >&2 "Bail out! mktemp failed"; return 1 + } + typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on + + { + # Use a subshell to isolate tests from each other. + # (So tests can alter global shell state using 'cd', 'hash', etc) + { + # These braces are so multios don't come into play. + { (run_test_internal "$__tests_tempdir" "$@") 3>&1 >&2 2>&3 } | grep \^ + local ret=$pipestatus[1] stderr=$pipestatus[2] + if (( ! stderr )); then + # stdout will become stderr + echo "Bail out! On ${(qq)1}: output on stderr"; return 1 + else + return $ret + fi + } 3>&1 >&2 2>&3 + } always { + rm -rf -- "$__tests_tempdir" + } +} + +# Process each test data file in test data directory. +integer something_failed=0 +ZSH_HIGHLIGHT_STYLES=() +local data_file +for data_file in $root/highlighters/$1/test-data/*.zsh; do + run_test "$data_file" | tee >($results_filter | $root/tests/tap-colorizer.zsh) | grep -v '^not ok.*# TODO' | grep -Eq '^not ok|^ok.*# TODO' && (( something_failed=1 )) + (( $pipestatus[1] )) && exit 2 +done + +exit $something_failed +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-perfs.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-perfs.zsh new file mode 100644 index 00000000..aa139aad --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-perfs.zsh @@ -0,0 +1,103 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Required for add-zle-hook-widget. +zmodload zsh/zle + +# Check an highlighter was given as argument. +[[ -n "$1" ]] || { + echo >&2 "Bail out! You must provide the name of a valid highlighter as argument." + exit 2 +} + +# Check the highlighter is valid. +[[ -f ${0:h:h}/highlighters/$1/$1-highlighter.zsh ]] || { + echo >&2 "Bail out! Could not find highlighter ${(qq)1}." + exit 2 +} + +# Check the highlighter has test data. +[[ -d ${0:h:h}/highlighters/$1/test-data ]] || { + echo >&2 "Bail out! Highlighter ${(qq)1} has no test data." + exit 2 +} + +# Load the main script. +typeset -a region_highlight +. ${0:h:h}/zsh-syntax-highlighting.zsh + +# Activate the highlighter. +ZSH_HIGHLIGHT_HIGHLIGHTERS=($1) + +# Runs a highlighting test +# $1: data file +run_test_internal() { + local -a highlight_zone + + local tests_tempdir="$1"; shift + local srcdir="$PWD" + builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! cd failed: $?"; return 1 } + + # Load the data and prepare checking it. + PREBUFFER= BUFFER= ; + . "$srcdir"/"$1" + + # Check the data declares $PREBUFFER or $BUFFER. + [[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return 1; } + + # Set $? for _zsh_highlight + true && _zsh_highlight +} + +run_test() { + # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?. + local __tests_tempdir + __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || { + echo >&2 "Bail out! mktemp failed"; return 1 + } + typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on + + { + (run_test_internal "$__tests_tempdir" "$@") + } always { + rm -rf -- "$__tests_tempdir" + } +} + +# Process each test data file in test data directory. +local data_file +TIMEFMT="%*Es" +{ time (for data_file in ${0:h:h}/highlighters/$1/test-data/*.zsh; do + run_test "$data_file" + (( $pipestatus[1] )) && exit 2 +done) } 2>&1 || exit $? + +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-zprof.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-zprof.zsh new file mode 100644 index 00000000..ada16187 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/exact_tests/executable_test-zprof.zsh @@ -0,0 +1,78 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2015 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# Load the main script. +typeset -a region_highlight +. ${0:h:h}/zsh-syntax-highlighting.zsh + +# Activate the highlighter. +ZSH_HIGHLIGHT_HIGHLIGHTERS=(main) + +source_file=0.7.1:highlighters/$1/$1-highlighter.zsh + +# Runs a highlighting test +# $1: data file +run_test_internal() { + setopt interactivecomments + + local -a highlight_zone + + local tests_tempdir="$1"; shift + local srcdir="$PWD" + builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! cd failed: $?"; return 1 } + + # Load the data and prepare checking it. + PREBUFFER= + BUFFER=$(cd -- "$srcdir" && git cat-file blob $source_file) + expected_region_highlight=() + + zmodload zsh/zprof + zprof -c + # Set $? for _zsh_highlight + true && _zsh_highlight + zprof +} + +run_test() { + # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?. + local __tests_tempdir + __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || { + echo >&2 "Bail out! mktemp failed"; return 1 + } + typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on + + { + (run_test_internal "$__tests_tempdir" "$@") + } always { + rm -rf -- "$__tests_tempdir" + } +} + +run_test diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/release.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/release.md new file mode 100644 index 00000000..075f2213 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/release.md @@ -0,0 +1,20 @@ +# Release procedure (for developers): + +- For minor (A.B.0) releases: + - Check whether the release uses any not-yet-released zsh features +- Check open issues and outstanding pull requests +- Confirm `make test` passes + - check with multiple zsh versions + (easiest to check GitHub Actions: https://github.com/zsh-users/zsh-syntax-highlighting/actions) +- Update changelog.md + `tig --abbrev=12 --abbrev-commit 0.4.1..upstream/master` +- Make sure there are no local commits and that `git status` is clean; + Remove `-dev` suffix from `./.version`; + Commit that using `git commit -m "Tag version $(<.version)." .version`; + Tag it using `git tag -s -m "Tag version $(<.version)" $(<.version)`; + Increment `./.version` and restore the `-dev` suffix; + Commit that using `git commit -C b5c30ae52638e81a38fe5329081c5613d7bd6ca5 .version`. +- Push with `git push && git push --tags` +- Notify downstreams (OS packages) + - anitya should autodetect the tag +- Update /topic on IRC diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh new file mode 100644 index 00000000..f2456aec --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh @@ -0,0 +1,2 @@ +0=${(%):-%N} +source ${0:A:h}/zsh-syntax-highlighting.zsh diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/zsh-syntax-highlighting.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/zsh-syntax-highlighting.zsh new file mode 100644 index 00000000..d20dc5b2 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-syntax-highlighting/zsh-syntax-highlighting.zsh @@ -0,0 +1,597 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2020 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. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +# First of all, ensure predictable parsing. +typeset zsh_highlight__aliases="$(builtin alias -Lm '[^+]*')" +# In zsh <= 5.2, aliases that begin with a plus sign ('alias -- +foo=42') +# are emitted by `alias -L` without a '--' guard, so they don't round trip. +# +# Hence, we exclude them from unaliasing: +builtin unalias -m '[^+]*' + +# Set $0 to the expected value, regardless of functionargzero. +0=${(%):-%N} +if true; then + # $0 is reliable + typeset -g ZSH_HIGHLIGHT_VERSION=$(<"${0:A:h}"/.version) + typeset -g ZSH_HIGHLIGHT_REVISION=$(<"${0:A:h}"/.revision-hash) + if [[ $ZSH_HIGHLIGHT_REVISION == \$Format:* ]]; then + # When running from a source tree without 'make install', $ZSH_HIGHLIGHT_REVISION + # would be set to '$Format:%H$' literally. That's an invalid value, and obtaining + # the valid value (via `git rev-parse HEAD`, as Makefile does) might be costly, so: + ZSH_HIGHLIGHT_REVISION=HEAD + fi +fi + +# This function takes a single argument F and returns True iff F is an autoload stub. +_zsh_highlight__function_is_autoload_stub_p() { + if zmodload -e zsh/parameter; then + #(( ${+functions[$1]} )) && + [[ "$functions[$1]" == *"builtin autoload -X"* ]] + else + #[[ $(type -wa -- "$1") == *'function'* ]] && + [[ "${${(@f)"$(which -- "$1")"}[2]}" == $'\t'$histchars[3]' undefined' ]] + fi + # Do nothing here: return the exit code of the if. +} + +# Return True iff the argument denotes a function name. +_zsh_highlight__is_function_p() { + if zmodload -e zsh/parameter; then + (( ${+functions[$1]} )) + else + [[ $(type -wa -- "$1") == *'function'* ]] + fi +} + +# This function takes a single argument F and returns True iff F denotes the +# name of a callable function. A function is callable if it is fully defined +# or if it is marked for autoloading and autoloading it at the first call to it +# will succeed. In particular, if a function has been marked for autoloading +# but is not available in $fpath, then this function will return False therefor. +# +# See users/21671 http://www.zsh.org/cgi-bin/mla/redirect?USERNUMBER=21671 +_zsh_highlight__function_callable_p() { + if _zsh_highlight__is_function_p "$1" && + ! _zsh_highlight__function_is_autoload_stub_p "$1" + then + # Already fully loaded. + return 0 # true + else + # "$1" is either an autoload stub, or not a function at all. + # + # Use a subshell to avoid affecting the calling shell. + # + # 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 +} + +# ------------------------------------------------------------------------------------------------- +# Core highlighting update system +# ------------------------------------------------------------------------------------------------- + +# Use workaround for bug in ZSH? +# zsh-users/zsh@48cadf4 http://www.zsh.org/mla/workers//2017/msg00034.html +autoload -Uz is-at-least +if is-at-least 5.4; then + typeset -g zsh_highlight__pat_static_bug=false +else + typeset -g zsh_highlight__pat_static_bug=true +fi + +# Array declaring active highlighters names. +typeset -ga ZSH_HIGHLIGHT_HIGHLIGHTERS + +# Update ZLE buffer syntax highlighting. +# +# Invokes each highlighter that needs updating. +# This function is supposed to be called whenever the ZLE state changes. +_zsh_highlight() +{ + # Store the previous command return code to restore it whatever happens. + local ret=$? + # Make it read-only. Can't combine this with the previous line when POSIX_BUILTINS may be set. + typeset -r ret + + # $region_highlight should be predefined, either by zle or by the test suite's mock (non-special) array. + (( ${+region_highlight} )) || { + echo >&2 'zsh-syntax-highlighting: error: $region_highlight is not defined' + echo >&2 'zsh-syntax-highlighting: (Check whether zsh-syntax-highlighting was installed according to the instructions.)' + return $ret + } + + # Probe the memo= feature, once. + (( ${+zsh_highlight__memo_feature} )) || { + region_highlight+=( " 0 0 fg=red, memo=zsh-syntax-highlighting" ) + case ${region_highlight[-1]} in + ("0 0 fg=red") + # zsh 5.8 or earlier + integer -gr zsh_highlight__memo_feature=0 + ;; + ("0 0 fg=red memo=zsh-syntax-highlighting") + # zsh 5.9 or later + integer -gr zsh_highlight__memo_feature=1 + ;; + (" 0 0 fg=red, memo=zsh-syntax-highlighting") ;& + (*) + # We can get here in two ways: + # + # 1. When not running as a widget. In that case, $region_highlight is + # not a special variable (= one with custom getter/setter functions + # written in C) but an ordinary one, so the third case pattern matches + # and we fall through to this block. (The test suite uses this codepath.) + # + # 2. When running under a future version of zsh that will have changed + # the serialization of $region_highlight elements from their underlying + # C structs, so that none of the previous case patterns will match. + # + # In either case, fall back to a version check. + # + # The memo= feature was added to zsh in commit zsh-5.8-172-gdd6e702ee. + # The version number at the time was 5.8.0.2-dev (see Config/version.mk). + # Therefore, on 5.8.0.3 and newer the memo= feature is available. + # + # On zsh version 5.8.0.2 between the aforementioned commit and the + # first Config/version.mk bump after it (which, at the time of writing, + # is yet to come), this condition will false negative. + if is-at-least 5.8.0.3 $ZSH_VERSION.0.0; then + integer -gr zsh_highlight__memo_feature=1 + else + integer -gr zsh_highlight__memo_feature=0 + fi + ;; + esac + region_highlight[-1]=() + } + + # Reset region_highlight to build it from scratch + if (( zsh_highlight__memo_feature )); then + region_highlight=( "${(@)region_highlight:#*memo=zsh-syntax-highlighting*}" ) + else + # Legacy codepath. Not very interoperable with other plugins (issue #418). + region_highlight=() + fi + + # Remove all highlighting in isearch, so that only the underlining done by zsh itself remains. + # For details see FAQ entry 'Why does syntax highlighting not work while searching history?'. + # This disables highlighting during isearch (for reasons explained in README.md) unless zsh is new enough + # and doesn't have the pattern matching bug + if [[ $WIDGET == zle-isearch-update ]] && { $zsh_highlight__pat_static_bug || ! (( $+ISEARCHMATCH_ACTIVE )) }; then + return $ret + fi + + # Before we 'emulate -L', save the user's options + local -A zsyh_user_options + if zmodload -e zsh/parameter; then + zsyh_user_options=("${(kv)options[@]}") + else + local canonical_options onoff option raw_options + raw_options=(${(f)"$(emulate -R zsh; set -o)"}) + canonical_options=(${${${(M)raw_options:#*off}%% *}#no} ${${(M)raw_options:#*on}%% *}) + for option in "${canonical_options[@]}"; do + [[ -o $option ]] + case $? in + (0) zsyh_user_options+=($option on);; + (1) zsyh_user_options+=($option off);; + (*) # Can't happen, surely? + echo "zsh-syntax-highlighting: warning: '[[ -o $option ]]' returned $?" + ;; + esac + done + fi + typeset -r zsyh_user_options + + emulate -L zsh + setopt localoptions warncreateglobal nobashrematch + local REPLY # don't leak $REPLY into global scope + + # Do not highlight if there are more than 300 chars in the buffer. It's most + # likely a pasted command or a huge list of files in that case.. + [[ -n ${ZSH_HIGHLIGHT_MAXLENGTH:-} ]] && [[ $#BUFFER -gt $ZSH_HIGHLIGHT_MAXLENGTH ]] && return $ret + + # Do not highlight if there are pending inputs (copy/paste). + [[ $PENDING -gt 0 ]] && return $ret + + { + local cache_place + local -a region_highlight_copy + + # Select which highlighters in ZSH_HIGHLIGHT_HIGHLIGHTERS need to be invoked. + local highlighter; for highlighter in $ZSH_HIGHLIGHT_HIGHLIGHTERS; do + + # eval cache place for current highlighter and prepare it + cache_place="_zsh_highlight__highlighter_${highlighter}_cache" + typeset -ga ${cache_place} + + # If highlighter needs to be invoked + if ! type "_zsh_highlight_highlighter_${highlighter}_predicate" >&/dev/null; then + echo "zsh-syntax-highlighting: warning: disabling the ${(qq)highlighter} highlighter as it has not been loaded" >&2 + # TODO: use ${(b)} rather than ${(q)} if supported + ZSH_HIGHLIGHT_HIGHLIGHTERS=( ${ZSH_HIGHLIGHT_HIGHLIGHTERS:#${highlighter}} ) + elif "_zsh_highlight_highlighter_${highlighter}_predicate"; then + + # save a copy, and cleanup region_highlight + region_highlight_copy=("${region_highlight[@]}") + region_highlight=() + + # Execute highlighter and save result + { + "_zsh_highlight_highlighter_${highlighter}_paint" + } always { + : ${(AP)cache_place::="${region_highlight[@]}"} + } + + # Restore saved region_highlight + region_highlight=("${region_highlight_copy[@]}") + + fi + + # Use value form cache if any cached + region_highlight+=("${(@P)cache_place}") + + done + + # Re-apply zle_highlight settings + + # region + () { + (( REGION_ACTIVE )) || return + integer min max + if (( MARK > CURSOR )) ; then + min=$CURSOR max=$MARK + else + min=$MARK max=$CURSOR + fi + if (( REGION_ACTIVE == 1 )); then + [[ $KEYMAP = vicmd ]] && (( max++ )) + elif (( REGION_ACTIVE == 2 )); then + local needle=$'\n' + # CURSOR and MARK are 0 indexed between letters like region_highlight + # Do not include the newline in the highlight + (( min = ${BUFFER[(Ib:min:)$needle]} )) + (( max = ${BUFFER[(ib:max:)$needle]} - 1 )) + fi + _zsh_highlight_apply_zle_highlight region standout "$min" "$max" + } + + # yank / paste (zsh-5.1.1 and newer) + (( $+YANK_ACTIVE )) && (( YANK_ACTIVE )) && _zsh_highlight_apply_zle_highlight paste standout "$YANK_START" "$YANK_END" + + # isearch + (( $+ISEARCHMATCH_ACTIVE )) && (( ISEARCHMATCH_ACTIVE )) && _zsh_highlight_apply_zle_highlight isearch underline "$ISEARCHMATCH_START" "$ISEARCHMATCH_END" + + # suffix + (( $+SUFFIX_ACTIVE )) && (( SUFFIX_ACTIVE )) && _zsh_highlight_apply_zle_highlight suffix bold "$SUFFIX_START" "$SUFFIX_END" + + + return $ret + + + } always { + typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER="$BUFFER" + typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=$CURSOR + } +} + +# Apply highlighting based on entries in the zle_highlight array. +# This function takes four arguments: +# 1. The exact entry (no patterns) in the zle_highlight array: +# region, paste, isearch, or suffix +# 2. The default highlighting that should be applied if the entry is unset +# 3. and 4. Two integer values describing the beginning and end of the +# range. The order does not matter. +_zsh_highlight_apply_zle_highlight() { + local entry="$1" default="$2" + integer first="$3" second="$4" + + # read the relevant entry from zle_highlight + # + # ### In zsh≥5.0.8 we'd use ${(b)entry}, but we support older zsh's, so we don't + # ### add (b). The only effect is on the failure mode for callers that violate + # ### the precondition. + local region="${zle_highlight[(r)${entry}:*]-}" + + if [[ -z "$region" ]]; then + # entry not specified at all, use default value + region=$default + else + # strip prefix + region="${region#${entry}:}" + + # no highlighting when set to the empty string or to 'none' + if [[ -z "$region" ]] || [[ "$region" == none ]]; then + return + fi + fi + + integer start end + if (( first < second )); then + start=$first end=$second + else + start=$second end=$first + fi + region_highlight+=("$start $end $region, memo=zsh-syntax-highlighting") +} + + +# ------------------------------------------------------------------------------------------------- +# API/utility functions for highlighters +# ------------------------------------------------------------------------------------------------- + +# Array used by highlighters to declare user overridable styles. +typeset -gA ZSH_HIGHLIGHT_STYLES + +# Whether the command line buffer has been modified or not. +# +# Returns 0 if the buffer has changed since _zsh_highlight was last called. +_zsh_highlight_buffer_modified() +{ + [[ "${_ZSH_HIGHLIGHT_PRIOR_BUFFER:-}" != "$BUFFER" ]] +} + +# Whether the cursor has moved or not. +# +# Returns 0 if the cursor has moved since _zsh_highlight was last called. +_zsh_highlight_cursor_moved() +{ + [[ -n $CURSOR ]] && [[ -n ${_ZSH_HIGHLIGHT_PRIOR_CURSOR-} ]] && (($_ZSH_HIGHLIGHT_PRIOR_CURSOR != $CURSOR)) +} + +# Add a highlight defined by ZSH_HIGHLIGHT_STYLES. +# +# Should be used by all highlighters aside from 'pattern' (cf. ZSH_HIGHLIGHT_PATTERN). +# Overwritten in tests/test-highlighting.zsh when testing. +_zsh_highlight_add_highlight() +{ + local -i start end + local highlight + start=$1 + end=$2 + shift 2 + for highlight; do + if (( $+ZSH_HIGHLIGHT_STYLES[$highlight] )); then + region_highlight+=("$start $end $ZSH_HIGHLIGHT_STYLES[$highlight], memo=zsh-syntax-highlighting") + break + fi + done +} + +# ------------------------------------------------------------------------------------------------- +# Setup functions +# ------------------------------------------------------------------------------------------------- + +# Helper for _zsh_highlight_bind_widgets +# $1 is name of widget to call +_zsh_highlight_call_widget() +{ + builtin zle "$@" && + _zsh_highlight +} + +# Decide whether to use the zle-line-pre-redraw codepath (colloquially known as +# "feature/redrawhook", after the topic branch's name) or the legacy "bind all +# widgets" codepath. +# +# We use the new codepath under two conditions: +# +# 1. If it's available, which we check by testing for add-zle-hook-widget's availability. +# +# 2. If zsh has the memo= feature, which is required for interoperability reasons. +# See issues #579 and #735, and the issues referenced from them. +# +# We check this with a plain version number check, since a functional check, +# as done by _zsh_highlight, can only be done from inside a widget +# function — a catch-22. +# +# See _zsh_highlight for the magic version number. (The use of 5.8.0.2 +# rather than 5.8.0.3 as in the _zsh_highlight is deliberate.) +if is-at-least 5.8.0.2 $ZSH_VERSION.0.0 && _zsh_highlight__function_callable_p add-zle-hook-widget +then + autoload -U add-zle-hook-widget + _zsh_highlight__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 + } + } + _zsh_highlight__zle-line-pre-redraw() { + # 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 "$@" + } + _zsh_highlight_bind_widgets(){} + if [[ -o zle ]]; then + add-zle-hook-widget zle-line-pre-redraw _zsh_highlight__zle-line-pre-redraw + add-zle-hook-widget zle-line-finish _zsh_highlight__zle-line-finish + fi +else + # Rebind all ZLE widgets to make them invoke _zsh_highlights. + _zsh_highlight_bind_widgets() + { + setopt localoptions noksharrays + typeset -F SECONDS + local prefix=orig-s$SECONDS-r$RANDOM # unique each time, in case we're sourced more than once + + # Load ZSH module zsh/zleparameter, needed to override user defined widgets. + zmodload zsh/zleparameter 2>/dev/null || { + print -r -- >&2 'zsh-syntax-highlighting: failed loading zsh/zleparameter.' + return 1 + } + + # Override ZLE widgets to make them invoke _zsh_highlight. + local -U widgets_to_bind + widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank|yank-pop)}) + + # Always wrap special zle-line-finish widget. This is needed to decide if the + # current line ends and special highlighting logic needs to be applied. + # E.g. remove cursor imprint, don't highlight partial paths, ... + widgets_to_bind+=(zle-line-finish) + + # Always wrap special zle-isearch-update widget to be notified of updates in isearch. + # This is needed because we need to disable highlighting in that case. + widgets_to_bind+=(zle-isearch-update) + + local cur_widget + for cur_widget in $widgets_to_bind; do + case ${widgets[$cur_widget]:-""} in + + # Already rebound event: do nothing. + user:_zsh_highlight_widget_*);; + + # The "eval"'s are required to make $cur_widget a closure: the value of the parameter at function + # definition time is used. + # + # We can't use ${0/_zsh_highlight_widget_} because these widgets are always invoked with + # NO_function_argzero, regardless of the option's setting here. + + # User defined widget: override and rebind old one with prefix "orig-". + user:*) zle -N $prefix-$cur_widget ${widgets[$cur_widget]#*:} + eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }" + zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; + + # Completion widget: override and rebind old one with prefix "orig-". + completion:*) zle -C $prefix-$cur_widget ${${(s.:.)widgets[$cur_widget]}[2,3]} + eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }" + zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; + + # Builtin widget: override and make it call the builtin ".widget". + builtin) eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget .${(q)cur_widget} -- \"\$@\" }" + zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; + + # Incomplete or nonexistent widget: Bind to z-sy-h directly. + *) + if [[ $cur_widget == zle-* ]] && (( ! ${+widgets[$cur_widget]} )); then + _zsh_highlight_widget_${cur_widget}() { :; _zsh_highlight } + zle -N $cur_widget _zsh_highlight_widget_$cur_widget + else + # Default: unhandled case. + print -r -- >&2 "zsh-syntax-highlighting: unhandled ZLE widget ${(qq)cur_widget}" + print -r -- >&2 "zsh-syntax-highlighting: (This is sometimes caused by doing \`bindkey ${(q-)cur_widget}\` without creating the ${(qq)cur_widget} widget with \`zle -N\` or \`zle -C\`.)" + fi + esac + done + } +fi + +# Load highlighters from directory. +# +# Arguments: +# 1) Path to the highlighters directory. +_zsh_highlight_load_highlighters() +{ + setopt localoptions noksharrays bareglobqual + + # Check the directory exists. + [[ -d "$1" ]] || { + print -r -- >&2 "zsh-syntax-highlighting: highlighters directory ${(qq)1} not found." + return 1 + } + + # Load highlighters from highlighters directory and check they define required functions. + local highlighter highlighter_dir + for highlighter_dir ($1/*/(/)); do + highlighter="${highlighter_dir:t}" + [[ -f "$highlighter_dir${highlighter}-highlighter.zsh" ]] && + . "$highlighter_dir${highlighter}-highlighter.zsh" + if type "_zsh_highlight_highlighter_${highlighter}_paint" &> /dev/null && + type "_zsh_highlight_highlighter_${highlighter}_predicate" &> /dev/null; + then + # New (0.5.0) function names + elif type "_zsh_highlight_${highlighter}_highlighter" &> /dev/null && + type "_zsh_highlight_${highlighter}_highlighter_predicate" &> /dev/null; + then + # Old (0.4.x) function names + if false; then + # TODO: only show this warning for plugin authors/maintainers, not for end users + print -r -- >&2 "zsh-syntax-highlighting: warning: ${(qq)highlighter} highlighter uses deprecated entry point names; please ask its maintainer to update it: https://github.com/zsh-users/zsh-syntax-highlighting/issues/329" + fi + # Make it work. + eval "_zsh_highlight_highlighter_${(q)highlighter}_paint() { _zsh_highlight_${(q)highlighter}_highlighter \"\$@\" }" + eval "_zsh_highlight_highlighter_${(q)highlighter}_predicate() { _zsh_highlight_${(q)highlighter}_highlighter_predicate \"\$@\" }" + else + print -r -- >&2 "zsh-syntax-highlighting: ${(qq)highlighter} highlighter should define both required functions '_zsh_highlight_highlighter_${highlighter}_paint' and '_zsh_highlight_highlighter_${highlighter}_predicate' in ${(qq):-"$highlighter_dir${highlighter}-highlighter.zsh"}." + fi + done +} + + +# ------------------------------------------------------------------------------------------------- +# Setup +# ------------------------------------------------------------------------------------------------- + +# Try binding widgets. +_zsh_highlight_bind_widgets || { + print -r -- >&2 'zsh-syntax-highlighting: failed binding ZLE widgets, exiting.' + return 1 +} + +# Resolve highlighters directory location. +_zsh_highlight_load_highlighters "${ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR:-${${0:A}:h}/highlighters}" || { + print -r -- >&2 'zsh-syntax-highlighting: failed loading highlighters, exiting.' + return 1 +} + +# Reset scratch variables when commandline is done. +_zsh_highlight_preexec_hook() +{ + typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER= + typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR= +} +autoload -Uz add-zsh-hook +add-zsh-hook preexec _zsh_highlight_preexec_hook 2>/dev/null || { + print -r -- >&2 'zsh-syntax-highlighting: failed loading add-zsh-hook.' + } + +# Load zsh/parameter module if available +zmodload zsh/parameter 2>/dev/null || true + +# Initialize the array of active highlighters if needed. +[[ $#ZSH_HIGHLIGHT_HIGHLIGHTERS -eq 0 ]] && ZSH_HIGHLIGHT_HIGHLIGHTERS=(main) + +if (( $+X_ZSH_HIGHLIGHT_DIRS_BLACKLIST )); then + print >&2 'zsh-syntax-highlighting: X_ZSH_HIGHLIGHT_DIRS_BLACKLIST is deprecated. Please use ZSH_HIGHLIGHT_DIRS_BLACKLIST.' + ZSH_HIGHLIGHT_DIRS_BLACKLIST=($X_ZSH_HIGHLIGHT_DIRS_BLACKLIST) + unset X_ZSH_HIGHLIGHT_DIRS_BLACKLIST +fi + +# Restore the aliases we unned +eval "$zsh_highlight__aliases" +builtin unset zsh_highlight__aliases + +# Set $?. +true diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/example/example.plugin.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/example/example.plugin.zsh new file mode 100644 index 00000000..406f2744 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/example/example.plugin.zsh @@ -0,0 +1,2 @@ +# Add your own custom plugins in the custom/plugins directory. Plugins placed +# here will override ones with the same name in the main plugins directory. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/LICENSE b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/LICENSE new file mode 100644 index 00000000..7986ede9 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2009-2014 Robby Russell and contributors (see https://github.com/robbyrussell/oh-my-zsh/contributors) +Copyright (c) 2014-2017 Ben Hilburn +Copyright (c) 2019 Roman Perepelitsa and contributors (see https://github.com/romkatv/powerlevel10k/contributors) + +MIT LICENSE + +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. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/Makefile b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/Makefile new file mode 100644 index 00000000..116ae41d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/Makefile @@ -0,0 +1,7 @@ +ZSH := $(shell command -v zsh 2> /dev/null) + +all: + +pkg: + $(MAKE) -C gitstatus pkg + $(or $(ZSH),:) -fc 'for f in *.zsh-theme internal/*.zsh; do zcompile -R -- $$f.zwc $$f || exit; done' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/README.md b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/README.md new file mode 100644 index 00000000..92bacb26 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/README.md @@ -0,0 +1,1839 @@ +# Powerlevel10k +[![Gitter](https://badges.gitter.im/powerlevel10k/community.svg)]( + https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +Powerlevel10k is a theme for Zsh. It emphasizes [speed](#uncompromising-performance), +[flexibility](#extremely-customizable) and [out-of-the-box experience](#configuration-wizard). + +![Powerlevel10k]( +https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/prompt-styles-high-contrast.png) + +Ready to [get started](#get-started)? See below. + +To see what Powerlevel10k is about go to [features](#features). + +Powerlevel9k users, go [here](#powerlevel9k-compatibility). + +See the [table of contents](#table-of-contents) at the bottom. + +## Get Started + +1. Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). *Optional but highly + recommended.* +1. Install Powerlevel10k for your plugin manager. + - [Manual](#manual) 👈 **choose this if confused or uncertain** + - [Oh My Zsh](#oh-my-zsh) + - [Prezto](#prezto) + - [Zim](#zim) + - [Antibody](#antibody) + - [Antigen](#antigen) + - [Zplug](#zplug) + - [Zgen](#zgen) + - [Zplugin](#zplugin) + - [Zinit](#zinit) + - [Homebrew](#homebrew) + - [Arch Linux](#arch-linux) +1. Restart Zsh. +1. Type `p10k configure` if the configuration wizard doesn't start automatically. + +## Features + +### Configuration wizard + +Type `p10k configure` to access the builtin configuration wizard right from your terminal. + +![Powerlevel10k Configuration Wizard]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/configuration-wizard.gif) + +All styles except [Pure](#pure-compatibility) are functionally equivalent. They display the same +information and differ only in presentation. + +Configuration wizard creates `~/.p10k.zsh` based on your preferences. Additional prompt +customization can be done by editing this file. It has plenty of comments to help you navigate +through configuration options. + +*Tip*: Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) before +running `p10k configure` to unlock all prompt styles. + +*FAQ:* + +- [What is the best prompt style in the configuration wizard?]( + #what-is-the-best-prompt-style-in-the-configuration-wizard) +- [What do different symbols in Git status mean?]( + #what-do-different-symbols-in-git-status-mean) +- [How do I change prompt colors?](#how-do-i-change-prompt-colors) + +*Troubleshooting*: + +- [Some prompt styles are missing from the configuration wizard]( + #some-prompt-styles-are-missing-from-the-configuration-wizard). +- [Question mark in prompt](#question-mark-in-prompt). +- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render). +- [Sub-pixel imperfections around powerline symbols]( + #sub-pixel-imperfections-around-powerline-symbols). +- [Directory is difficult to see in prompt when using Rainbow style]( + #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style). + +### Uncompromising performance + +When you hit *ENTER*, the next prompt appears instantly. With Powerlevel10k there is no prompt lag. +If you install Cygwin on Raspberry Pi, `cd` into a Linux Git repository and activate enough prompt +segments to fill four prompt lines on both sides of the screen... wait, that's just crazy and no +one ever does that. Probably impossible, too. The point is, Powerlevel10k prompt is always fast, no +matter what you do! + +![Powerlevel10k Performance]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/performance.gif) + +Note how the effect of every command is instantly reflected by the very next prompt. + +| Command | Prompt Indicator | Meaning | +|-------------------------------|:----------------:|----------------------------------------------------------------------:| +| `timew start hack linux` | `⌚ hack linux` | time tracking enabled in [timewarrior](https://timewarrior.net/) | +| `touch x y` | `?2` | 2 untracked files in the Git repo | +| `rm COPYING` | `!1` | 1 unstaged change in the Git repo | +| `echo 3.7.3 >.python-version` | `🐍 3.7.3` | the current python version in [pyenv](https://github.com/pyenv/pyenv) | + +Other Zsh themes capable of displaying the same information either produce prompt lag or print +prompt that doesn't reflect the current state of the system and then refresh it later. With +Powerlevel10k you get fast prompt *and* up-to-date information. + +*FAQ*: [Is it really fast?](#is-it-really-fast) + +### Powerlevel9k compatibility + +Powerlevel10k understands all [Powerlevel9k](https://github.com/Powerlevel9k/powerlevel9k) +configuration parameters. + +![Powerlevel10k Compatibility with 9k]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/9k-compatibility.gif) + +[Migration](#installation) from Powerlevel9k to Powerlevel10k is a straightforward process. All +your `POWERLEVEL9K` configuration parameters will still work. Prompt will look the same as before +([almost]( + #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config)) +but it will be [much faster](#uncompromising-performance) ([certainly](#is-it-really-fast)). + +*FAQ*: + +- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?]( + #im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) +- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( + #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) +- [What is the relationship between Powerlevel9k and Powerlevel10k?]( + #What-is-the-relationship-between-powerlevel9k-and-powerlevel10k) + +### Pure compatibility + +Powerlevel10k can produce the same prompt as [Pure](https://github.com/sindresorhus/pure). Type +`p10k configure` and select *Pure* style. + +![Powerlevel10k Pure Style]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/pure-style.gif) + +You can still use Powerlevel10k features such as [transient prompt](#transient-prompt) or +[instant prompt](#instant-prompt) when sporting Pure style. + +To customize prompt, edit `~/.p10k.zsh`. Powerlevel10k doesn't recognize Pure configuration +parameters, so you'll need to use `POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3` instead of +`PURE_CMD_MAX_EXEC_TIME=3`, etc. All relevant parameters are in `~/.p10k.zsh`. This file has +plenty of comments to help you navigate through it. + +*FAQ:* [What is the best prompt style in the configuration wizard?]( + #what-is-the-best-prompt-style-in-the-configuration-wizard) + +### Instant prompt + +If your `~/.zshrc` loads many plugins, or perhaps just a few slow ones +(for example, [pyenv](https://github.com/pyenv/pyenv) or [nvm](https://github.com/nvm-sh/nvm)), you +may have noticed that it takes some time for Zsh to start. + +![Powerlevel10k No Instant Prompt]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/no-instant-prompt.gif) + +Powerlevel10k can remove Zsh startup lag **even if it's not caused by a theme**. + +![Powerlevel10k Instant Prompt]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/instant-prompt.gif) + +This feature is called *Instant Prompt*. You need to explicitly enable it through `p10k configure` +or [manually](#how-do-i-enable-instant-prompt). It does what it says on the tin -- prints prompt +instantly upon Zsh startup allowing you to start typing while plugins are still loading. + +Other themes *increase* Zsh startup lag -- some by a lot, others by a just a little. Powerlevel10k +*removes* it outright. + +*FAQ:* [How do I enable instant prompt?](#how-do-i-enable-instant-prompt) + +### Show on command + +The behavior of some commands depends on global environment. For example, `kubectl run ...` runs an +image on the cluster defined by the current kubernetes context. If you frequently change context +between "prod" and "testing", you might want to display the current context in Zsh prompt. If you do +likewise for AWS, Azure and Google Cloud credentials, prompt will get pretty crowded. + +Enter *Show On Command*. This feature makes prompt segments appear only when they are relevant to +the command you are currently typing. + +![Powerlevel10k Show On Command]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/show-on-command.gif) + +Configs created by `p10k configure` enable show on command for several prompt segments by default. +Here's the relevant parameter for kubernetes context: + +```zsh +# Show prompt segment "kubecontext" only when the command you are typing +# invokes kubectl, helm, kubens, kubectx, oc, istioctl, kogito, k9s or helmfile. +typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile' +``` + +To customize when different prompt segments are shown, open `~/.p10k.zsh`, search for +`SHOW_ON_COMMAND` and either remove these parameters to display affected segments unconditionally, +or change their values. + +### Transient prompt + +When *Transient Prompt* is enabled through `p10k configure`, Powerlevel10k will trim down every +prompt when accepting a command line. + +![Powerlevel10k Transient Prompt]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/transient-prompt.gif) + +Transient prompt makes it much easier to copy-paste series of commands from the terminal scrollback. + +*Tip*: If you enable transient prompt, take advantage of two-line prompt. You'll get the benefit of +extra space for typing commands without the usual drawback of reduced scrollback density. Sparse +prompt (with an empty line before prompt) also works great in combination with transient prompt. + +### Current directory that just works + +The current working directory is perhaps the most important prompt segment. Powerlevel10k goes to +great length to highlight its important parts and to truncate it with the least loss of information +when horizontal space gets scarce. + +![Powerlevel10k Directory Truncation]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/directory-truncation.gif) + +When the full directory doesn't fit, the leftmost segment gets truncated to its shortest unique +prefix. In the screencast, `~/work` becomes `~/wo`. It couldn't be truncated to `~/w` because it +would be ambiguous (there was `~/wireguard` when the session was recorded). The next segment -- +`projects` -- turns into `p` as there was nothing else that started with `p` in `~/work/`. + +Directory segments are shown in one of three colors: + +- Truncated segments are bleak. +- Important segments are bright and never truncated. These include the first and the last segment, + roots of Git repositories, etc. +- Regular segments (not truncated but can be) use in-between color. + +*Tip*: If you copy-paste a truncated directory and hit *TAB*, it'll complete to the original. + +*Troubleshooting*: [Directory is difficult to see in prompt when using Rainbow style.]( + #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style) + +### Extremely customizable + +Powerlevel10k can be configured to look like any other Zsh theme out there. + +![Powerlevel10k Other Theme Emulation]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/other-theme-emulation.gif) + +[Pure](#pure-compatibility), [Powerlevel9k](#powerlevel9k-compatibility) and [robbyrussell]( + #how-to-make-powerlevel10k-look-like-robbyrussell-oh-my-zsh-theme) emulations are built-in. +To emulate the appearance of other themes, you'll need to write a suitable configuration file. The +best way to go about it is to run `p10k configure`, select the style that is the closest to your +goal and then edit `~/.p10k.zsh`. + +The full range of Powerlevel10k appearance spans from spartan: + +![Powerlevel10k Spartan Style]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/spartan-style.png) + +To ~~ridiculous~~ extravagant: + +![Powerlevel10k Extravagant Style]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/extravagant-style.png) + +### Batteries included + +Powerlevel10k comes with dozens of built-in high quality segments. When you run `p10k configure` +and choose any style except [Pure](#pure-compatibility), many of these segments get enabled by +default while others be manually enabled by opening `~/.p10k.zsh` and uncommenting them. You can +enable as many segments as you like. It won't slow down your prompt or Zsh startup. + +| Segment | Meaning | +|--------:|---------| +| `os_icon` | your OS logo (apple for macOS, swirl for debian, etc.) | +| `dir` | current working directory | +| `vcs` | Git repository status | +| `prompt_char` | multi-functional prompt symbol; changes depending on vi mode: `❯`, `❮`, `V`, `▶` for insert, command, visual and replace mode respectively; turns red on error | +| `context` | user@hostname | +| `status` | exit code of the last command | +| `command_execution_time` | duration (wall time) of the last command | +| `background_jobs` | presence of background jobs | +| `time` | current time | +| `direnv` | [direnv](https://direnv.net/) status | +| `asdf` | tool versions from [asdf](https://github.com/asdf-vm/asdf) | +| `virtualenv` | python environment from [venv](https://docs.python.org/3/library/venv.html) | +| `anaconda` | virtual environment from [conda](https://conda.io/) | +| `pyenv` | python environment from [pyenv](https://github.com/pyenv/pyenv) | +| `goenv` | go environment from [goenv](https://github.com/syndbg/goenv) | +| `nodenv` | node.js environment from [nodenv](https://github.com/nodenv/nodenv) | +| `nvm` | node.js environment from [nvm](https://github.com/nvm-sh/nvm) | +| `nodeenv` | node.js environment from [nodeenv](https://github.com/ekalinin/nodeenv) | +| `rbenv` | ruby environment from [rbenv](https://github.com/rbenv/rbenv) | +| `rvm` | ruby environment from [rvm](https://rvm.io) | +| `fvm` | flutter environment from [fvm](https://github.com/leoafarias/fvm) | +| `luaenv` | lua environment from [luaenv](https://github.com/cehoffman/luaenv) | +| `jenv` | java environment from [jenv](https://github.com/jenv/jenv) | +| `plenv` | perl environment from [plenv](https://github.com/tokuhirom/plenv) | +| `phpenv` | php environment from [phpenv](https://github.com/phpenv/phpenv) | +| `haskell_stack` | haskell version from [stack](https://haskellstack.org/) | +| `node_version` | [node.js](https://nodejs.org/) version | +| `go_version` | [go](https://golang.org) version | +| `rust_version` | [rustc](https://www.rust-lang.org) version | +| `dotnet_version` | [dotnet](https://dotnet.microsoft.com) version | +| `php_version` | [php](https://www.php.net/) version | +| `laravel_version` | [laravel php framework](https://laravel.com/) version | +| `java_version` | [java](https://www.java.com/) version | +| `package` | `name@version` from [package.json](https://docs.npmjs.com/files/package.json) | +| `kubecontext` | current [kubernetes](https://kubernetes.io/) context | +| `terraform` | [terraform](https://www.terraform.io) workspace | +| `aws` | [aws profile](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) | +| `aws_eb_env` | [aws elastic beanstalk](https://aws.amazon.com/elasticbeanstalk/) environment | +| `azure` | [azure](https://docs.microsoft.com/en-us/cli/azure) account name | +| `gcloud` | [google cloud](https://cloud.google.com/) cli account and project | +| `google_app_cred` | [google application credentials](https://cloud.google.com/docs/authentication/production) | +| `nordvpn` | [nordvpn](https://nordvpn.com/) connection status | +| `ranger` | [ranger](https://github.com/ranger/ranger) shell | +| `nnn` | [nnn](https://github.com/jarun/nnn) shell | +| `vim_shell` | [vim](https://www.vim.org/) shell (`:sh`) | +| `midnight_commander` | [midnight commander](https://midnight-commander.org/) shell | +| `nix_shell` | [nix shell](https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) indicator | +| `todo` | [todo](https://github.com/todotxt/todo.txt-cli) items | +| `timewarrior` | [timewarrior](https://timewarrior.net/) tracking status | +| `taskwarrior` | [taskwarrior](https://taskwarrior.org/) task count | +| `vpn_ip` | virtual private network indicator | +| `ip` | IP address and bandwidth usage for a specified network interface | +| `load` | CPU load | +| `disk_usage` | disk usage | +| `ram` | free RAM | +| `swap` | used swap | +| `public_ip` | public IP address | +| `proxy` | system-wide http/https/ftp proxy | +| `wifi` | WiFi speed | +| `battery` | internal battery state and charge level (yep, batteries *literally* included) | + +### Extensible + +If there is no prompt segment that does what you need, implement your own. Powerlevel10k provides +public API for defining segments that are as fast and as flexible as built-in ones. + +![Powerlevel10k Custom Segment]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/custom-segment.gif) + +On Linux you can fetch current CPU temperature by reading `/sys/class/thermal/thermal_zone0/temp`. +The screencast shows how to define a prompt segment to display this value. Once the segment is +defined, you can use it like any other segment. All standard customization parameters will work for +it out of the box. + +Type `p10k help segment` for reference. + +*Tip*: Prefix names of your own segments with `my_` to avoid clashes with future versions of +Powerlevel10k. + +## Installation + +### Manual + +```zsh +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k +echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc +``` + +Users in mainland China can use the official mirror on gitee.com for faster download.
    +中国大陆用户可以使用 gitee.com 上的官方镜像加速下载. + +```zsh +git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/powerlevel10k +echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc +``` + +This is the simplest kind of installation and it works even if you are using a plugin manager. Just +make sure to disable the current theme in your plugin manager. See +[troubleshooting](#cannot-make-powerlevel10k-work-with-my-plugin-manager) for help. + +### Oh My Zsh + +```zsh +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k +``` + +Users in mainland China can use the official mirror on gitee.com for faster download.
    +中国大陆用户可以使用 gitee.com 上的官方镜像加速下载. + +```zsh +git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k +``` + +Set `ZSH_THEME="powerlevel10k/powerlevel10k"` in `~/.zshrc`. + +### Prezto + +Add `zstyle :prezto:module:prompt theme powerlevel10k` to `~/.zpreztorc`. + +### Zim + +Add `zmodule romkatv/powerlevel10k` to `~/.zimrc` and run `zimfw install`. + +### Antibody + +Add `antibody bundle romkatv/powerlevel10k` to `~/.zshrc`. + +### Antigen + +Add `antigen theme romkatv/powerlevel10k` to `~/.zshrc`. Make sure you have `antigen apply` +somewhere after it. + +### Zplug + +Add `zplug romkatv/powerlevel10k, as:theme, depth:1` to `~/.zshrc`. + +### Zgen + +Add `zgen load romkatv/powerlevel10k powerlevel10k` to `~/.zshrc`. + +### Zplugin + +Add `zplugin ice depth=1; zplugin light romkatv/powerlevel10k` to `~/.zshrc`. + +The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially +supported by Powerlevel10k. + +### Zinit + +Add `zinit ice depth=1; zinit light romkatv/powerlevel10k` to `~/.zshrc`. + +The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially +supported by Powerlevel10k. + +### Homebrew + +```zsh +brew install romkatv/powerlevel10k/powerlevel10k +echo "source $(brew --prefix)/opt/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc +``` + +### Arch Linux + +```zsh +yay -S --noconfirm zsh-theme-powerlevel10k-git +echo 'source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc +``` + +[zsh-theme-powerlevel10k-git](https://aur.archlinux.org/packages/zsh-theme-powerlevel10k-git/) +referenced above is the official Powerlevel10k package. + +There is also [zsh-theme-powerlevel10k]( + https://www.archlinux.org/packages/community/x86_64/zsh-theme-powerlevel10k/) community package. +Historicaly, [it has been breaking often and for extended periods of time]( + https://github.com/romkatv/powerlevel10k/pull/786). **Do not use it.** + +## Configuration + +### For new users + +On the first run, Powerlevel10k [configuration wizard](#configuration-wizard) will ask you a few +questions and configure your prompt. If it doesn't trigger automatically, type `p10k configure`. +Configuration wizard creates `~/.p10k.zsh` based on your preferences. Additional prompt +customization can be done by editing this file. It has plenty of comments to help you navigate +through configuration options. + +*FAQ*: + +- [What is the best prompt style in the configuration wizard?]( + #what-is-the-best-prompt-style-in-the-configuration-wizard) +- [What do different symbols in Git status mean?]( + #what-do-different-symbols-in-git-status-mean) +- [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) +- [How do I add username and/or hostname to prompt?]( + #how-do-i-add-username-andor-hostname-to-prompt) +- [How do I change prompt colors?](#how-do-i-change-prompt-colors) +- [Why some prompt segments appear and disappear as I'm typing?]( + #why-some-prompt-segments-appear-and-disappear-as-im-typing) + +*Troubleshooting*: + +- [Question mark in prompt](#question-mark-in-prompt). +- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render). +- [Sub-pixel imperfections around powerline symbols]( + #sub-pixel-imperfections-around-powerline-symbols). +- [Directory is difficult to see in prompt when using Rainbow style]( + #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style). + +### For Powerlevel9k users + +If you've been using Powerlevel9k before, **do not remove the configuration options**. Powerlevel10k +will pick them up and provide you with the same prompt UI you are used to. See +[Powerlevel9k compatibility](#powerlevel9k-compatibility). + +*FAQ*: + +- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?]( + #im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) +- [What is the relationship between Powerlevel9k and Powerlevel10k?]( + #what-is-the-relationship-between-powerlevel9k-and-powerlevel10k) +- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( + #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) + +*Troubleshooting*: [Extra or missing spaces in prompt compared to Powerlevel9k]( + #extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k). + +## Fonts + +Powerlevel10k doesn't require custom fonts but can take advantage of them if they are available. +It works well with [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts), +[Source Code Pro](https://github.com/adobe-fonts/source-code-pro), +[Font Awesome](https://fontawesome.com/), [Powerline](https://github.com/powerline/fonts), and even +the default system fonts. The full choice of style options is available only when using +[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts). + +👇 **Recommended font**: Meslo Nerd Font patched for Powerlevel10k. 👇 + +###
    Meslo Nerd Font patched for Powerlevel10k + +Gorgeous monospace font designed by Jim Lyles for Bitstream, customized by the same for Apple, +further customized by André Berg, and finally patched by yours truly with customized scripts +originally developed by Ryan L McIntyre of Nerd Fonts. Contains all glyphs and symbols that +Powerlevel10k may need. Battle-tested in dozens of different terminals on all major operating +systems. + +*FAQ*: [How was the recommended font created?](#how-was-the-recommended-font-created) + +#### Automatic font installation + +If you are using iTerm2 or Termux, `p10k configure` can install the recommended font for you. +Simply answer `Yes` when asked whether to install *Meslo Nerd Font*. + +If you are using a different terminal, proceed with manual font installation. 👇 + +#### Manual font installation + +Download these four ttf files: + +- [MesloLGS NF Regular.ttf]( + https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf) +- [MesloLGS NF Bold.ttf]( + https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf) +- [MesloLGS NF Italic.ttf]( + https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf) +- [MesloLGS NF Bold Italic.ttf]( + https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf) + +Double-click on each file and click "Install". This will make `MesloLGS NF` font available to all +applications on your system. Configure your terminal to use this font: + +- **iTerm2**: Type `p10k configure` and answer `Yes` when asked whether to install + *Meslo Nerd Font*. Alternatively, open *iTerm2 → Preferences → Profiles → Text* and set *Font* to + `MesloLGS NF`. +- **Apple Terminal**: Open *Terminal → Preferences → Profiles → Text*, click *Change* under *Font* + and select `MesloLGS NF` family. +- **Hyper**: Open *Hyper → Edit → Preferences* and change the value of `fontFamily` under + `module.exports.config` to `MesloLGS NF`. +- **Visual Studio Code**: Open *File → Preferences → Settings*, enter + `terminal.integrated.fontFamily` in the search box and set the value to `MesloLGS NF`. +- **GNOME Terminal** (the default Ubuntu terminal): Open *Terminal → Preferences* and click on the + selected profile under *Profiles*. Check *Custom font* under *Text Appearance* and select + `MesloLGS NF Regular`. +- **Konsole**: Open *Settings → Edit Current Profile → Appearance*, click *Select Font* and select + `MesloLGS NF Regular`. +- **Tilix**: Open *Tilix → Preferences* and click on the selected profile under *Profiles*. Check + *Custom font* under *Text Appearance* and select `MesloLGS NF Regular`. +- **Windows Console Host** (the old thing): Click the icon in the top left corner, then + *Properties → Font* and set *Font* to `MesloLGS NF`. +- **Microsoft Terminal** (the new thing): Open *Settings* (`Ctrl+,`), search for `fontFace` and set + value to `MesloLGS NF` for every profile. +- **IntelliJ**: Open *Intellij → Edit → Preferences → Editor → Color Scheme → Console Font*. + Select *Use console font instead of the default* and set the font name to `MesloLGS NF`. +- **Termux**: Type `p10k configure` and answer `Yes` when asked whether to install + *Meslo Nerd Font*. +- **Blink**: Type `config`, go to *Appearance*, tap *Add a new font*, tap *Open Gallery*, select + *MesloLGS NF.css*, tap *import* and type `exit` in the home view to reload the font. +- **Terminus**: Open *Settings → Appearance* and set *Font* to `MesloLGS NF`. +- **Terminator**: Open *Preferences* using the context menu. Under *Profiles* select the *General* + tab (should be selected already), uncheck *Use the system fixed width font* (if not already) + and select `MesloLGS NF Regular`. Exit the Preferences dialog by clicking *Close*. +- **Guake**: Right Click on an open terminal and open *Preferences*. Under *Appearance* + tab, uncheck *Use the system fixed width font* (if not already) and select `MesloLGS NF Regular`. + Exit the Preferences dialog by clicking *Close*. +- **MobaXterm**: Open *Settings* → *Configuration* → *Terminal* → (Under *Terminal look and feel*) + and change *Font* to `MesloLGS NF`. +- **WSLtty**: Right click on an open terminal and then on *Options*. In the *Text* section, under + *Font*, click *"Select..."* and set Font to `MesloLGS NF Regular`. +- **Alacritty**: Create or open `~/.config/alacritty/alacritty.yml` and add the following section + to it: + ```yaml + font: + normal: + family: "MesloLGS NF" + ``` + - **Kitty**: Create or open `~/.config/kitty/kitty.conf` and add the following line to it: + ```text + font_family MesloLGS NF + ``` + Restart Kitty by closing all sessions and opening a new session. + +**IMPORTANT:** Run `p10k configure` after changing terminal font. The old `~/.p10k.zsh` may work +incorrectly with the new font. + +_Using a different terminal and know how to set the font for it? Share your knowledge by sending a +PR to expand the list!_ + +## Try it in Docker + +Try Powerlevel10k in Docker. You can safely make any changes to the file system while trying out +the theme. Once you exit Zsh, the image is deleted. + +```zsh +docker run -e TERM -e COLORTERM -it --rm alpine sh -uec ' + apk update + apk add git zsh nano vim + git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k + echo "source ~/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc + cd ~/powerlevel10k + exec zsh' +``` + +*Tip*: Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) before +running the Docker command to get access to all prompt styles. + +*Tip*: Run `p10k configure` while in Docker to try a different prompt style. + +## License + +Powerlevel10k is released under the +[MIT license](https://github.com/romkatv/powerlevel10k/blob/master/LICENSE). + +## FAQ + +### How do I update Powerlevel10k? + +The command to update Powerlevel10k depends on how it was installed. + +| Installation | Update command | +|---------------------------|-------------------------------------------------------------| +| [Manual](#manual) | `git -C ~/powerlevel10k pull` | +| [Oh My Zsh](#oh-my-zsh) | `git -C ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k pull` | +| [Prezto](#prezto) | `zprezto-update` | +| [Zim](#zim) | `zimfw update` | +| [Antigen](#antigen) | `antigen update` | +| [Zplug](#zplug) | `zplug update` | +| [Zgen](#zgen) | `zgen update` | +| [Zplugin](#zplugin) | `zplugin update` | +| [Zinit](#zinit) | `zinit update` | +| [Homebrew](#homebrew) | `brew update && brew upgrade` | +| [Arch Linux](#arch-linux) | `yay -S --noconfirm zsh-theme-powerlevel10k-git` | + +**IMPORTANT**: Restart Zsh after updating Powerlevel10k. [Do not use `source ~/.zshrc`]( + #weird-things-happen-after-typing-source-zshrc). + +### How do I uninstall Powerlevel10k? + +1. Remove all references to "p10k" from `~/.zshrc`. You might have this snippet at the top: + ```zsh + if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" + fi + ``` + And this at the bottom: + ```zsh + [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh + ``` + These are added by the [configuration wizard](#configuration-wizard). Remove them. +2. Remove all references to "powerlevel10k" from `~/.zshrc`, `~/.zpreztorc` and `~/.zimrc` (some + of these files may be missing -- this is normal). These references have been added manually by + yourself when installing Powerlevel10k. Refer to the [installation instructions](#installation) + if you need a reminder. +3. Verify that all references to "p10k" and "powerlevel10k" are gone from `~/.zshrc`, `~/.zpreztorc` + and `~/.zimrc`. + ```zsh + grep -E 'p10k|powerlevel10k' ~/.zshrc ~/.zpreztorc ~/.zimrc 2>/dev/null + ``` + If this command produces output, there are still references to "p10k" or "powerlevel10k". You + need to remove them. +4. Delete Powerlevel10k configuration file. This file is created by the + [configuration wizard](#configuration-wizard) and may contain manual edits by yourself. + ```zsh + rm -f ~/.p10k.zsh + ``` +5. Delete Powerlevel10k source files. These files have been downloaded when you've installed + Powerlevel10k. The command to delete them depends on which installation method you'd chosen. + Refer to the [installation instructions](#installation) if you need a reminder. + + | Installation | Uninstall command | + |---------------------------|------------------------------------------------------------------| + | [Manual](#manual) | `rm -rf ~/powerlevel10k` | + | [Oh My Zsh](#oh-my-zsh) | `rm -rf -- ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k` | + | [Prezto](#prezto) | n/a | + | [Zim](#zim) | `zimfw uninstall` | + | [Antigen](#antigen) | `antigen purge romkatv/powerlevel10k` | + | [Zplug](#zplug) | `zplug clean` | + | [Zgen](#zgen) | `zgen reset` | + | [Zplugin](#zplugin) | `zplugin delete romkatv/powerlevel10k` | + | [Zinit](#zinit) | `zinit delete romkatv/powerlevel10k` | + | [Homebrew](#homebrew) | `brew uninstall powerlevel10k; brew untap romkatv/powerlevel10k` | + | [Arch Linux](#arch-linux) | `yay -R --noconfirm zsh-theme-powerlevel10k-git` | +5. Restart Zsh. [Do not use `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc). + +### How do I install Powerlevel10k on a machine without Internet access? + +1. Run this command on the machine without Internet access: + ```sh + uname -sm | tr '[A-Z]' '[a-z]' + ``` +2. Run these commands on a machine connected to the Internet after replacing the value of + `target_uname` with the output of the previous command: + ```sh + target_uname="replace this with the output of the previous command" + git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k + GITSTATUS_CACHE_DIR="$HOME"/powerlevel10k/gitstatus/usrbin ~/powerlevel10k/gitstatus/install -f -s "${target_uname% *}" -m "${target_uname#* }" + ``` +3. Copy `~/powerlevel10k` from the machine connected to the Internet to the one without Internet + access. +4. Add `source ~/powerlevel10k/powerlevel10k.zsh-theme` to `~/.zshrc` on the machine without + Internet access: + ```zsh + echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc + ``` +5. If `~/.zshrc` on the machine without Internet access sets `ZSH_THEME`, remove that line. + ```zsh + sed -i.bak '/^ZSH_THEME=/d' ~/.zshrc + ``` + +To update, remove `~/powerlevel10k` on both machines and repeat steps 1-3. + +### Where can I ask for help and report bugs? + +The best way to ask for help and to report bugs is to [open an issue]( + https://github.com/romkatv/powerlevel10k/issues). + +[Gitter]( + https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +is another option. + +If all else fails, email roman.perepelitsa@gmail.com. + +If necessary, encrypt your communication with [this PGP key]( + https://api.github.com/users/romkatv/gpg_keys). + +### Which aspects of shell and terminal does Powerlevel10k affect? + +Powerlevel10k defines prompt and nothing else. It sets [prompt-related options]( + http://zsh.sourceforge.net/Doc/Release/Options.html#Prompting), and parameters `PS1` and `RPS1`. + +![Prompt Highlight]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/prompt-highlight.png) + +Everything within the highlighted areas on the screenshot is produced by Powerlevel10k. +Powerlevel10k has no control over the terminal content or colors outside these areas. + +Powerlevel10k does not affect: + +- Terminal window/tab title. +- Colors used by `ls`. +- The behavior of `git` command. +- The content and style of Tab completions. +- Command line colors (syntax highlighting, autosuggestions, etc.). +- Key bindings. +- Aliases. +- Prompt parameters other than `PS1` and `RPS1`. +- Zsh options other than those [related to prompt]( + http://zsh.sourceforge.net/Doc/Release/Options.html#Prompting). + +### I'm using Powerlevel9k with Oh My Zsh. How do I migrate? + +1. Run this command: +```zsh +# Add powerlevel10k to the list of Oh My Zsh themes. +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k +# Replace ZSH_THEME="powerlevel9k/powerlevel9k" with ZSH_THEME="powerlevel10k/powerlevel10k". +sed -i.bak 's/powerlevel9k/powerlevel10k/g' ~/.zshrc +# Restart Zsh. +exec zsh +``` +2. *Optional but highly recommended:* + 1. Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). + 1. Type `p10k configure` and choose your favorite prompt style. + +*Related:* + - [Powerlevel9k compatibility.](#powerlevel9k-compatibility) + - [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( + #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) + - [Extra or missing spaces in prompt compared to Powerlevel9k.]( + #extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k) + - [Configuration wizard.](#configuration-wizard) + +### Is it really fast? + +Yes. + +[![asciicast](https://asciinema.org/a/NHRjK3BMePw66jtRVY2livHwZ.svg)]( + https://asciinema.org/a/NHRjK3BMePw66jtRVY2livHwZ) + +Benchmark results obtained with +[zsh-prompt-benchmark](https://github.com/romkatv/zsh-prompt-benchmark) on an Intel i9-7900X +running Ubuntu 18.04 with the config from the demo. + +| Theme | Prompt Latency | +|---------------------|---------------:| +| powerlevel9k/master | 1046 ms | +| powerlevel9k/next | 1005 ms | +| **powerlevel10k** | **8.7 ms** | + +Powerlevel10k is over 100 times faster than Powerlevel9k in this benchmark. + +In fairness, Powerlevel9k has acceptable latency when given a spartan configuration. If all you need +is the current directory without truncation or shortening, Powerlevel9k can render it for you in +17 ms. Powerlevel10k can do the same 30 times faster but it won't matter in practice because 17 ms +is fast enough (the threshold where latency becomes noticeable is around 50 ms). You have to be +careful with Powerlevel9k configuration as it's all too easy to make prompt frustratingly slow. +Powerlevel10k, on the other hand, doesn't require trading latency for utility -- it's virtually +instant with any configuration. It stays well below the 50 ms mark, leaving most of the latency +budget for other plugins you might install. + +### How do I enable instant prompt? + +See [instant prompt](#instant-prompt) to learn about instant prompt. This section explains how you +can enable it and lists caveats that you should be aware of. + +Instant prompt can be enabled either through `p10k configure` or by manually adding the following +code snippet at the top of `~/.zshrc`: + +```zsh +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi +``` + +It's important that you copy the lines verbatim. Don't replace `source` with something else, don't +call `zcompile`, don't redirect output, etc. + +When instant prompt is enabled, for the duration of Zsh initialization standard input is redirected +to `/dev/null` and standard output with standard error are redirected to a temporary file. Once Zsh +is fully initialized, standard file descriptors are restored and the content of the temporary file +is printed out. + +When using instant prompt, you should carefully check any output that appears on Zsh startup as it +may indicate that initialization has been altered, or perhaps even broken, by instant prompt. +Initialization code that may require console input, such as asking for a keyring password or for a +*[y/n]* confirmation, must be moved above the instant prompt preamble in `~/.zshrc`. Initialization +code that merely prints to console but never reads from it will work correctly with instant prompt, +although output that normally has colors may appear uncolored. You can either leave it be, suppress +the output, or move it above the instant prompt preamble. + +Here's an example of `~/.zshrc` that breaks when instant prompt is enabled: + +```zsh +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + +keychain id_rsa --agents ssh # asks for password +chatty-script # spams to stdout even when everything is fine +# ... +``` + +Fixed version: + +```zsh +keychain id_rsa --agents ssh # moved before instant prompt + +# OK to perform console I/O before this point. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi +# From this point on, until zsh is fully initialized, console input won't work and +# console output may appear uncolored. + +chatty-script >/dev/null # spam output suppressed +# ... +``` + +If `POWERLEVEL9K_INSTANT_PROMPT` is unset or set to `verbose`, Powerlevel10k will print a warning +when it detects console output during initialization to bring attention to potential issues. You can +silence this warning (without suppressing console output) with `POWERLEVEL9K_INSTANT_PROMPT=quiet`. +This is recommended if some initialization code in `~/.zshrc` prints to console and it's infeasible +to move it above the instant prompt preamble or to suppress its output. You can completely disable +instant prompt with `POWERLEVEL9K_INSTANT_PROMPT=off`. Do this if instant prompt breaks Zsh +initialization and you don't know how to fix it. + +*Note*: Instant prompt requires Zsh >= 5.4. It's OK to enable it even when using an older version of +Zsh but it won't do anything. + +### What do different symbols in Git status mean? + +When using Lean, Classic or Rainbow style, Git status may look like this: + +```text +feature:master ⇣42⇡42 ⇠42⇢42 *42 merge ~42 +42 !42 ?42 +``` + +| Symbol | Meaning | Source | +| --------- | -------------------------------------------------------------------- | ------------------------------------------------------ | +| `feature` | current branch; replaced with `#tag` or `@commit` if not on a branch | `git status --ignore-submodules=dirty` | +| `master` | remote tracking branch; only shown if different from local branch | `git rev-parse --abbrev-ref --symbolic-full-name @{u}` | +| `⇣42` | this many commits behind the remote | `git status --ignore-submodules=dirty` | +| `⇡42` | this many commits ahead of the remote | `git status --ignore-submodules=dirty` | +| `⇠42` | this many commits behind the push remote | `git rev-list --left-right --count HEAD...@{push}` | +| `⇢42` | this many commits ahead of the push remote | `git rev-list --left-right --count HEAD...@{push}` | +| `*42` | this many stashes | `git stash list` | +| `merge` | repository state | `git status --ignore-submodules=dirty` | +| `~42` | this many merge conflicts | `git status --ignore-submodules=dirty` | +| `+42` | this many staged changes | `git status --ignore-submodules=dirty` | +| `!42` | this many unstaged changes | `git status --ignore-submodules=dirty` | +| `?42` | this many untracked files | `git status --ignore-submodules=dirty` | +| `─` | the number of staged, unstaged or untracked files is unknown | `echo $POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY` or `git config --get bash.showDirtyState` | + +*Related*: [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) + +### How do I change the format of Git status? + +To change the format of Git status, open `~/.p10k.zsh`, search for `my_git_formatter` and edit its +source code. + +*Related*: [What do different symbols in Git status mean?]( + #what-do-different-symbols-in-git-status-mean) + +### Why is Git status from `$HOME/.git` not displayed in prompt? + +When using Lean, Classic or Rainbow style, `~/.p10k.zsh` contains the following parameter: + +```zsh +# Don't show Git status in prompt for repositories whose workdir matches this pattern. +# For example, if set to '~', the Git repository at $HOME/.git will be ignored. +# Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. +typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' +``` + +To see Git status for `$HOME/.git` in prompt, open `~/.p10k.zsh` and remove +`POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN`. + +### Why does Git status sometimes appear grey and then gets colored after a short period of time? + +tl;dr: When Git status in prompt is greyed out, it means Powerlevel10k is currently computing +up-to-date Git status in the background. Prompt will get automatically refreshed when this +computation completes. + +When your current directory is within a Git repository, Powerlevel10k computes up-to-date Git +status after every command. If the repository is large, or the machine is slow, this computation +can take quite a bit of time. If it takes longer than 10 milliseconds (configurable via +`POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS`), Powerlevel10k displays the last known Git status in +grey and continues to compute up-to-date Git status in the background. When the computation +completes, Powerlevel10k refreshes prompt with new information, this time with colored Git status. + +When using *Rainbow* style, Git status is displayed as black on grey while it's still being +computed. Depending on the terminal color palette, this may be difficult to read. In this case you +might want to change the background color to something ligher for more contrast. To do that, open +`~/.p10k.zsh`, search for `POWERLEVEL9K_VCS_LOADING_BACKGROUND`, uncomment it if it's commented out, +and change the value. + +```zsh +typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=244 +``` + +Type `source ~/.p10k.zsh` to apply your changes to the current Zsh session. + +*Related*: [How do I change prompt colors?](#how-do-i-change-prompt-colors) + +### How do I add username and/or hostname to prompt? + +When using Lean, Classic or Rainbow style, prompt shows `username@hostname` when you are logged in +as root or via SSH. There is little value in showing `username` or `hostname` when you are logged in +to your local machine as a normal user. So the absence of `username@hostname` in your prompt is an +indication that you are working locally and that you aren't root. You can change it, however. + +Open `~/.p10k.zsh`. Close to the top you can see the most important parameters that define which +segments are shown in your prompt. All generally useful prompt segments are listed in there. Some of +them are enabled, others are commented out. One of them is of interest to you. + +```zsh +typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + ... + context # user@hostname + ... +) +``` + +Search for `context` to find the section in the config that lists parameters specific to this prompt +segment. You should see the following lines: + +```zsh +# Don't show context unless running with privileges or in SSH. +# Tip: Remove the next line to always show context. +typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= +``` + +If you follow the tip and remove (or comment out) the last line, you'll always see +`username@hostname` in prompt. You can change the format to just `username`, or change the color, by +adjusting the values of parameters nearby. There are plenty of comments to help you navigate. + +You can also move `context` to a different position in `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS` or even +to `POWERLEVEL9K_LEFT_PROMPT_ELEMENTS`. + +### Why some prompt segments appear and disappear as I'm typing? + +Prompt segments can be configured to be shown only when the current command you are typing invokes +a relevant tool. + +```zsh +# Show prompt segment "kubecontext" only when the command you are typing +# invokes kubectl, helm, kubens, kubectx, oc, istioctl, kogito, k9s or helmfile. +typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile' +``` + +Configs created by `p10k configure` may contain parameters of this kind. To customize when different +prompt segments are shown, open `~/.p10k.zsh`, search for `SHOW_ON_COMMAND` and either remove these +parameters or change their values. + +You can also define a function in `~/.zshrc` to toggle the display of a prompt segment between +*always* and *on command*. This is similar to `kubeon`/`kubeoff` from +[kube-ps1](https://github.com/jonmosco/kube-ps1). + +```zsh +function kube-toggle() { + if (( ${+POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND} )); then + unset POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND + else + POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile' + fi + p10k reload + if zle; then + zle push-input + zle accept-line + fi +} +``` + +Invoke this function by typing `kube-toggle`. You can also bind it to a key by adding two more lines +to `~/.zshrc`: + +```zsh +zle -N kube-toggle +bindkey '^]' kube-toggle # ctrl-] to toggle kubecontext in powerlevel10k prompt +``` + +### How do I change prompt colors? + +You can either [change the color palette used by your terminal]( + #change-the-color-palette-used-by-your-terminal) or +[set colors through Powerlevel10k configuration parameters]( + #set-colors-through-Powerlevel10k-configuration-parameters). + +#### Change the color palette used by your terminal + +How exactly you change the terminal color palette (a.k.a. color scheme, or theme) depends on the +kind of terminal you are using. Look around in terminal's settings/preferences or consult +documentation. + +When you change the terminal color palette, it usually affects only the first 16 colors, numbered +from 0 to 15. In order to see any effect on Powerlevel10k prompt, you need to use prompt style that +utilizes these low-numbered colors. Type `p10k configure` and select *Rainbow*, *Lean* → *8 colors* +or *Pure* → *Original*. Other styles use higher-numbered colors, so they look the same in any +terminal color palette. + +#### Set colors through Powerlevel10k configuration parameters + +Open `~/.p10k.zsh`, search for "color", "foreground" and "background" and change values of +appropriate parameters. For example, here's how you can set the foreground of `time` prompt segment +to bright red: + +```zsh +typeset -g POWERLEVEL9K_TIME_FOREGROUND=160 +``` + +Colors are specified using numbers from 0 to 255. Colors from 0 to 15 look differently in different +terminals. Many terminals also support customization of these colors through color palettes +(a.k.a. color schemes, or themes). Colors from 16 to 255 always look the same. + +Type `source ~/.p10k.zsh` to apply your changes to the current Zsh session. + +To see how different colors look in your terminal, run the following command: + +```zsh +for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done +``` + +### Why does Powerlevel10k spawn extra processes? + +Powerlevel10k uses [gitstatus](https://github.com/romkatv/gitstatus) as the backend behind `vcs` +prompt; gitstatus spawns `gitstatusd` and `zsh`. See +[gitstatus](https://github.com/romkatv/gitstatus) for details. Powerlevel10k may also spawn `zsh` +to perform computation without blocking prompt. To avoid security hazard, these background processes +aren't shared by different interactive shells. They terminate automatically when the parent `zsh` +process terminates or runs `exec(3)`. + +### Are there configuration options that make Powerlevel10k slow? + +No, Powerlevel10k is always fast, with any configuration you throw at it. If you have noticeable +prompt latency when using Powerlevel10k, please +[open an issue](https://github.com/romkatv/powerlevel10k/issues). + +### Is Powerlevel10k fast to load? + +Yes, provided that you are using Zsh >= 5.4. + +Loading time, or time to first prompt, can be measured with the following benchmark: + +```zsh +time (repeat 1000 zsh -dfis <<< 'source ~/powerlevel10k/powerlevel10k.zsh-theme') +``` + +*Note:* This measures time to first complete prompt. Powerlevel10k can also display a +[limited prompt](#instant-prompt) before the full-featured prompt is ready. + +Running this command with `~/powerlevel10k` as the current directory on the same machine as in the +[prompt benchmark](#is-it-really-fast) takes 29 seconds (29 ms per invocation). This is about 6 +times faster than powerlevel9k/master and 17 times faster than powerlevel9k/next. + +### What is the relationship between Powerlevel9k and Powerlevel10k? + +Powerlevel10k was forked from Powerlevel9k in March 2019 after a week-long discussion in +[powerlevel9k#1170](https://github.com/Powerlevel9k/powerlevel9k/issues/1170). Powerlevel9k was +already a mature project with large user base and release cycle measured in months. Powerlevel10k +was spun off to iterate on performance improvements and new features at much higher pace. + +Powerlevel9k and Powerlevel10k are independent projects. When using one, you shouldn't install the +other. Issues should be filed against the project that you actually use. There are no individuals +that have commit rights in both repositories. All bug fixes and new features committed to +Powerlevel9k repository get ported to Powerlevel10k. + +Over time, virtually all code in Powerlevel10k has been rewritten. There is currently no meaningful +overlap between the implementations of Powerlevel9k and Powerlevel10k. + +Powerlevel10k is committed to maintaining backward compatibility with all configs indefinitely. This +commitment covers all configuration parameters recognized by Powerlevel9k (see +[Powerlevel9k compatibility](#powerlevel9k-compatibility)) and additional parameters that only +Powerlevel10k understands. Names of all parameters in Powerlevel10k start with `POWERLEVEL9K_` for +consistency. + +### Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config? + +Almost. There are a few differences. + +- By default only `git` vcs backend is enabled in Powerlevel10k. If you need `svn` and `hg`, add + them to `POWERLEVEL9K_VCS_BACKENDS`. These backends aren't yet optimized in Powerlevel10k, so + enabling them will make prompt *very slow*. +- Powerlevel10k doesn't support `POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY=true`. +- Powerlevel10k strives to be bug-compatible with Powerlevel9k but not when it comes to egregious + bugs. If you accidentally rely on these bugs, your prompt will differ between Powerlevel9k and + Powerlevel10k. Some examples: + - Powerlevel9k ignores some options that are set after the theme is sourced while Powerlevel10k + respects all options. If you see different icons in Powerlevel9k and Powerlevel10k, you've + probably defined `POWERLEVEL9K_MODE` before sourcing the theme. This parameter gets ignored + by Powerlevel9k but honored by Powerlevel10k. If you want your prompt to look in Powerlevel10k + the same as in Powerlevel9k, remove `POWERLEVEL9K_MODE`. + - Powerlevel9k doesn't respect `ZLE_RPROMPT_INDENT`. As a result, right prompt in Powerlevel10k + can have an extra space at the end compared to Powerlevel9k. Set `ZLE_RPROMPT_INDENT=0` if you + don't want that space. More details in + [troubleshooting](#extra-space-without-background-on-the-right-side-of-right-prompt). + - Powerlevel9k has inconsistent spacing around icons. This was fixed in Powerlevel10k. Set + `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to get the same spacing as in Powerlevel9k. More + details in [troubleshooting](#extra-or-missing-spaces-around-icons). + - There are dozens more bugs in Powerlevel9k that don't exist in Powerlevel10k. + +If you notice any other changes in prompt appearance when switching from Powerlevel9k to +Powerlevel10k, please [open an issue](https://github.com/romkatv/powerlevel10k/issues). + +### What is the best prompt style in the configuration wizard? + +There are as many opinions on what constitutes the best prompt as there are people. It mostly comes +down to personal preference. There are, however, a few hidden implications of different choices. + +Pure style is an exact replication of [Pure Zsh theme](https://github.com/sindresorhus/pure). It +exists to ease the migration for users of this theme. Unless you are one of them, choose Lean +style over Pure. + +If you want to confine prompt colors to the selected terminal color palette (say, *Solarized Dark*), +use *Rainbow*, *Lean* → *8 colors* or *Pure* → *Original*. Other styles use fixed colors and thus +look the same in any terminal color palette. + +All styles except Pure have an option to use *ASCII* charset. Prompt will look less pretty but will +render correctly with all fonts and in all locales. + +If you enable transient prompt, take advantage of two-line prompt. You'll get the benefit of +extra space for typing commands without the usual drawback of reduced scrollback density. Having +all commands start from the same offset is also nice. + +Similarly, if you enable transient prompt, sparse prompt (with an empty line before prompt) is a +great choice. + +If you are using vi keymap, choose prompt with `prompt_char` in it (shown as green `❯` in the +wizard). This symbol changes depending on vi mode: `❯`, `❮`, `V`, `▶` for insert, command, visual +and replace mode respectively. When a command fails, the symbol turns red. *Lean* style always has +`prompt_char` in it. *Rainbow* and *Classic* styles have it only in the two-line configuration +without left frame. + +If you value horizontal space or prefer minimalist aesthetics: + +- Use a monospace font, such as [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). + Non-monospace fonts require extra space after icons that are larger than a single column. +- Use Lean style. Compared to Classic and Rainbow, it saves two characters per prompt segment. +- Disable *current time* and *frame*. +- Use *few icons*. The extra icons enabled by the *many icons* option primarily serve decorative + function. Informative icons, such as background job indicator, will be shown either way. + +*Note*: You can run configuration wizard as many times as you like. Type `p10k configure` to try new +prompt style. + +### How to make Powerlevel10k look like robbyrussell Oh My Zsh theme? + +Use [this config]( + https://github.com/romkatv/powerlevel10k/blob/master/config/p10k-robbyrussell.zsh). + +You can either download it, save as `~/.p10k.zsh` and `source ~/.p10k.zsh` from `~/.zshrc`, or +source `p10k-robbyrussell.zsh` directly from your cloned `powerlevel10k` repository. + +### Can prompts for completed commands display error status for *those* commands instead of the commands preceding them? + +No. When you hit *ENTER* and the command you've typed starts running, its error status isn't yet +known, so it cannot be shown in prompt. When the command completes, the error status gets known but +it's no longer possible to update prompt for *that* command. This is why the error status for every +command is reflected in the *next* prompt. + +For details, see [this post on /r/zsh]( +https://www.reddit.com/r/zsh/comments/eg49ff/powerlevel10k_prompt_history_exit_code_colors/fc5huku). + +### What is the minimum supported Zsh version? + +Zsh 5.1 or newer should work. Fast startup requires Zsh >= 5.4. + +### How were these screenshots and animated gifs created? + +All screenshots and animated gifs were recorded in GNOME Terminal with +[the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) and Tango Dark color palette with +custom background color (`#171A1B` instead of `#2E3436` -- twice as dark). + +![GNOME Terminal Color Settings]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/gnome-terminal-colors.png) + +Syntax highlighting, where present, was provided by [zsh-syntax-highlighting]( + https://github.com/zsh-users/zsh-syntax-highlighting). + +### How was the recommended font created? + +[The recommended font](#meslo-nerd-font-patched-for-powerlevel10k) is the product of many +individuals. Its origin is *Bitstream Vera Sans Mono*, which has given birth to *Menlo*, which in +turn has spawned *Meslo*. Finally, extra glyphs have been added to *Meslo* with scripts forked +from Nerd Fonts. The final font is released under the terms of +[Apache License]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20License.txt). + +MesloLGS NF font can be recreated with the following command (requires `git` and `docker`): + +```zsh +git clone --depth=1 https://github.com/romkatv/nerd-fonts.git +cd nerd-fonts +./build 'Meslo/S/*' +``` + +If everything goes well, four `ttf` files will appear in `./out`. + +### How to package Powerlevel10k for distribution? + +It's currently neither easy nor recommended to package and distribute Powerlevel10k. There are no +instructions you can follow that would allow you to easily update your package when new versions of +Powerlevel10k are released. This may change in the future but not soon. + +## Troubleshooting + +### Question mark in prompt + +If it looks like a regular `?`, that's normal. It means you have untracked files in the current Git +repository. Type `git status` to see these files. You can change this symbol or disable the display +of untracked files altogether. Search for `untracked files` in `~/.p10k.zsh`. + +*FAQ*: [What do different symbols in Git status mean?]( + #what-do-different-symbols-in-git-status-mean) + +You can also get a weird-looking question mark in your prompt if your terminal's font is missing +some glyphs. See [icons, glyphs or powerline symbols don't render]( + #icons-glyphs-or-powerline-symbols-dont-render). + +### Icons, glyphs or powerline symbols don't render + +Restart your terminal, [install the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) +and run `p10k configure`. + +### Sub-pixel imperfections around powerline symbols + +![Powerline Prompt Imperfections]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/powerline-imperfections.png) + +There are three imperfections on the screenshot. From left to right: + +1. A thin blue line (a sub-pixel gap) between the content of a prompt segment and the following +powerline connection. +1. Incorrect alignment of a powerline connection and the following prompt segment. The connection +appears shifted to the right. +1. A thin red line below a powerline connection. The connection appears shifted up. + +Zsh themes don't have down-to-pixel control over the terminal content. Everything you see on the +screen is made of monospace characters. A white powerline prompt segment is made of text on white +background followed by U+E0B0 (a right-pointing triangle). + +![Powerline Prompt Imperfections]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/powerline-anatomy.png) + +If Powerlevel10k prompt has imperfections around powerline symbols, you'll see exactly the same +imperfections with all powerline themes (Agnoster, Powerlevel9k, Powerline, etc.) + +There are several things you can try to deal with these imperfections: + +- Try [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). If you are already using + it, switching to another font may help but is unlikely. +- Change terminal font size one point up or down. For example, in iTerm2 powerline prompt looks + perfect at font sizes 11 and 13 but breaks down at 12. +- Enable builtin powerline glyphs in terminal settings if your terminal supports it (iTerm2 does). +- Change font hinting and/or anti-aliasing mode in the terminal settings. +- Shift all text one pixel up/down/left/right if your terminal has an option to do so. +- Try a different terminal. + +A more radical solution is to switch to prompt style without background. Type `p10k configure` and +select *Lean*. This style has a modern lightweight look. As a bonus, it doesn't suffer from +rendering imperfections that afflict powerline-style prompt. + +### Error: character not in range + +Type `echo '\u276F'`. If you get an error saying "zsh: character not in range", your locale +doesn't support UTF-8. You need to fix it. If you are running Zsh over SSH, see +[this](https://github.com/romkatv/powerlevel10k/issues/153#issuecomment-518347833). If you are +running Zsh locally, Google "set UTF-8 locale in *your OS*". + +### Cursor is in the wrong place + +Type `echo '\u276F'`. If you get an error saying "zsh: character not in range", see the +[previous section](#zsh-character-not-in-range). + +If the `echo` command prints `❯` but the cursor is still in the wrong place, install +[the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) and run +`p10k configure`. + +If this doesn't help, add `unset ZLE_RPROMPT_INDENT` at the bottom of `~/.zshrc`. + +Still having issues? Run the following command to diagnose the problem: + +```zsh +() { + emulate -L zsh + setopt err_return no_unset + local text + print -rl -- 'Select a part of your prompt from the terminal window and paste it below.' '' + read -r '?Prompt: ' text + local -i len=${(m)#text} + local frame="+-${(pl.$len..-.):-}-+" + print -lr -- $frame "| $text |" $frame +} +``` + +#### If the prompt line aligns with the frame + +```text ++------------------------------+ +| romka@adam ✓ ~/powerlevel10k | ++------------------------------+ +``` + +If the output of the command is aligned for every part of your prompt (left and right), this +indicates a bug in the theme or your config. Use this command to diagnose it: + +```zsh +print -rl -- ${(eq+)PROMPT} ${(eq+)RPROMPT} +``` + +Look for `%{...%}` and backslash escapes in the output. If there are any, they are the likely +culprits. Open an issue if you get stuck. + +#### If the prompt line is longer than the frame + +```text ++-----------------------------+ +| romka@adam ✓ ~/powerlevel10k | ++-----------------------------+ +``` + +This is usually caused by a terminal bug or misconfiguration that makes it print ambiguous-width +characters as double-width instead of single width. For example, +[this issue](https://github.com/romkatv/powerlevel10k/issues/165). + +#### If the prompt line is shorter than the frame and is mangled + +```text ++------------------------------+ +| romka@adam ✓~/powerlevel10k | ++------------------------------+ +``` + +Note that this prompt is different from the original as it's missing a space after the check mark. + +This can be caused by a low-level bug in macOS. See +[this issue](https://github.com/romkatv/powerlevel10k/issues/241). + +This can also happen if prompt contains glyphs designated as "wide" in the Unicode standard and your +terminal incorrectly displays them as non-wide. Terminals suffering from this limitation include +Konsole, Hyper and the integrated VSCode Terminal. The solution is to use a different terminal or +remove all wide glyphs from prompt. + +#### If the prompt line is shorter than the frame and is not mangled + +```text ++--------------------------------+ +| romka@adam ✓ ~/powerlevel10k | ++--------------------------------+ +``` + +This can be caused by misconfigured locale. See +[this issue](https://github.com/romkatv/powerlevel10k/issues/251). + +### Prompt wrapping around in a weird way + +See [cursor is in the wrong place](#cursor-is-in-the-wrong-place). + +### Right prompt is in the wrong place + +See [cursor is in the wrong place](#cursor-is-in-the-wrong-place). + +### Configuration wizard runs automatically every time Zsh is started + +When Powerlevel10k starts, it automatically runs `p10k configure` if no `POWERLEVEL9K_*` +parameters are defined. Based on your prompt style choices, the configuration wizard creates +`~/.p10k.zsh` with a bunch of `POWERLEVEL9K_*` parameters in it and adds a line to `~/.zshrc` to +source this file. The next time you start Zsh, the configuration wizard shouldn't run automatically. +If it does, this means the evaluation of `~/.zshrc` terminates prematurely before it reaches the +line that sources `~/.p10k.zsh`. This most often happens due to syntax errors in `~/.zshrc`. These +errors get hidden by the configuration wizard screen, so you don't notice them. When you exit +configuration wizard, look for error messages. You can also use +`POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true zsh` to start Zsh without automatically running the +configuration wizard. Once you can see the errors, fix `~/.zshrc` to get rid of them. + +### Some prompt styles are missing from the configuration wizard + +If Zsh version is below 5.7.1 or `COLORTERM` environment variable is neither `24bit` nor +`truecolor`, configuration wizard won't offer Pure style with Snazzy color scheme. *Fix*: Install +Zsh >= 5.7.1 and use a terminal with truecolor support. Verify with `print -P '%F{#ff0000}red%f'`. + +If the terminal can display fewer than 256 colors, configuration wizard preselects Lean style with +8 colors. All other styles require at least 256 colors. *Fix*: Use a terminal with 256 color support +and make sure that `TERM` environment variable is set correctly. Verify with +`print $terminfo[colors]`. + +If there is no UTF-8 locale on the system, configuration wizard won't offer prompt styles that use +Unicode characters. *Fix*: Install a UTF-8 locale. Verify with `locale -a`. + +When a UTF-8 locale is available, the first few questions asked by the configuration wizard assess +capabilities of the terminal font. If your answers indicate that some glyphs don't render correctly, +configuration wizard won't offer prompt styles that use them. *Fix*: Restart your terminal and +install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). Verify by running +`p10k configure` and checking that all glyphs render correctly. + +### Cannot install the recommended font + +Once you download [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k), +you can install it just like any other font. Google "how to install fonts on *your OS*". + +### Extra or missing spaces in prompt compared to Powerlevel9k + +tl;dr: Add `ZLE_RPROMPT_INDENT=0` and `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get +the same prompt spacing as in Powerlevel9k. + +When using Powerlevel10k with a Powerlevel9k config, you might get additional spaces in prompt here +and there. These come in two flavors. + +#### Extra space without background on the right side of right prompt + +tl;dr: Add `ZLE_RPROMPT_INDENT=0` to `~/.zshrc` to get rid of that space. + +From [Zsh documentation]( + http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-ZLE_005fRPROMPT_005fINDENT): + +> `ZLE_RPROMPT_INDENT ` +> +> If set, used to give the indentation between the right hand side of the right prompt in the line +> editor as given by `RPS1` or `RPROMPT` and the right hand side of the screen. If not set, the +> value `1` is used. +> +> Typically this will be used to set the value to `0` so that the prompt appears flush with the +> right hand side of the screen. + +Powerlevel10k respects this parameter. If you set `ZLE_RPROMPT_INDENT=1` (or leave it unset, which +is the same thing as setting it to `1`), you'll get an empty space to the right of right prompt. If +you set `ZLE_RPROMPT_INDENT=0`, your prompt will go to the edge of the terminal. This is how it +works in every theme except Powerlevel9k. + +![ZLE_RPROMPT_INDENT: Powerlevel10k vs Powerlevel9k]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/p9k-vs-p10k-zle-rprompt-indent.png) + +Powerlevel9k issue: [powerlevel9k#1292](https://github.com/Powerlevel9k/powerlevel9k/issues/1292). +It's been fixed in the development branch of Powerlevel9k but the fix hasn't yet made it to +`master`. + +Add `ZLE_RPROMPT_INDENT=0` to `~/.zshrc` to get the same spacing on the right edge of prompt as in +Powerlevel9k. + +*Note:* Several versions of Zsh have bugs that get triggered when you set `ZLE_RPROMPT_INDENT=0`. +Powerlevel10k can work around these bugs when using powerline prompt style. If you notice visual +artifacts in prompt, or wrong cursor position, try removing `ZLE_RPROMPT_INDENT` from `~/.zshrc`. + +#### Extra or missing spaces around icons + +tl;dr: Add `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get the same spacing around +icons as in Powerlevel9k. + +Spacing around icons in Powerlevel9k is inconsistent. + +![ZLE_RPROMPT_INDENT: Powerlevel10k vs Powerlevel9k]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/p9k-vs-p10k-icon-spacing.png) + +This inconsistency is a constant source of annoyance, so it was fixed in Powerlevel10k. You can add +`POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get the same spacing around icons as in +Powerlevel9k. + +*Note:* It's not a good idea to define `POWERLEVEL9K_LEGACY_ICON_SPACING` when using +`p10k configure`. + +### Weird things happen after typing `source ~/.zshrc` + +It's almost always a bad idea to run `source ~/.zshrc`, whether you are using Powerlevel10k or not. +This command may result in random errors, misbehaving code and progressive slowdown of Zsh. + +If you've made changes to `~/.zshrc` or to files sourced by it, restart Zsh to apply them. The most +reliable way to do this is to type `exit` and then start a new Zsh session. You can also use +`exec zsh`. While not exactly equivalent to complete Zsh restart, this command is much more reliable +than `source ~/.zshrc`. + +### Transient prompt stops working after some time + +See [weird things happen after typing `source ~/.zshrc`]( + #weird-things-happen-after-typing-source-zshrc). + +### Cannot make Powerlevel10k work with my plugin manager + +If the [installation instructions](#installation) didn't work for you, try disabling your current +theme (so that you end up with no theme) and then installing Powerlevel10k manually. + +1. Disable the current theme in your framework / plugin manager. + +- **oh-my-zsh:** Open `~/.zshrc` and remove the line that sets `ZSH_THEME`. It might look like this: + `ZSH_THEME="powerlevel9k/powerlevel9k"`. +- **zplug:** Open `~/.zshrc` and remove the `zplug` command that refers to your current theme. For + example, if you are currently using Powerlevel9k, look for + `zplug bhilburn/powerlevel9k, use:powerlevel9k.zsh-theme`. +- **prezto:** Open `~/.zpreztorc` and put `zstyle :prezto:module:prompt theme off` in it. Remove + any other command that sets `theme` such as `zstyle :prezto:module:prompt theme powerlevel9k`. +- **antigen:** Open `~/.zshrc` and remove the line that sets `antigen theme`. It might look like + this: `antigen theme powerlevel9k/powerlevel9k`. + +2. Install Powerlevel10k manually. + +```zsh +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k +echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc +``` + +This method of installation won't make anything slower or otherwise sub-par. + +### Directory is difficult to see in prompt when using Rainbow style + +In Rainbow style the current working directory is shown with bright white text on blue background. +The white is fixed and always looks the same but the appearance of "blue" is defined by your +terminal color palette. If it's very light, it may be difficult to see white text on it. + +There are several ways to fix this. + +- Type `p10k configure` and choose a more readable prompt style. +- [Change terminal color palette](#change-the-color-palette-used-by-your-terminal). Try Tango Dark + or Solarized Dark, or change just the "blue" color. +- [Change directory background and/or foreground color](#set-colors-through-Powerlevel10k-configuration-parameters). + The parameters you are looking for are called `POWERLEVEL9K_DIR_BACKGROUND`, + `POWERLEVEL9K_DIR_FOREGROUND`, `POWERLEVEL9K_DIR_SHORTENED_FOREGROUND`, + `POWERLEVEL9K_DIR_ANCHOR_FOREGROUND` and `POWERLEVEL9K_DIR_ANCHOR_BOLD`. You can find them in + in `~/.p10k.zsh`. + +### Horrific mess when resizing terminal window + +When you resize terminal window horizontally back and forth a few times, you might see this ugly +picture. + +![Powerlevel10k Resizing Mess]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resizing-mess.png) + +tl;dr: This is a bug in Zsh that isn't specific to Powerlevel10k. See [mitigation](#mitigation). + +#### Zsh bug + +This issue is caused by a bug in Zsh that gets triggered when the vertical distance between the +start of the current prompt and the cursor (henceforth `VD`) changes when the terminal window is +resized. This bug is not specific to Powerlevel10k. + +When a terminal window gets shrunk horizontally, there are two ways for a terminal to handle long +lines that no longer fit: *reflow* or *truncate*. + +Terminal content before shrinking: + +![Terminal Content Before Shrinking]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-original.png) + +Terminal reflows text when shrinking: + +![Terminal Reflows Text When Shrinking]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-reflow.png) + +Terminal truncates text when shrinking: + +![Terminal Truncates Text When Shrinking]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-truncate.png) + +Reflowing strategy can change the height of terminal content. If such content happens to be between +the start of the current prompt and the cursor, Zsh will print prompt on the wrong line. Truncation +strategy never changes the height of terminal content, so it doesn't trigger this bug in Zsh. + +Let's see how the bug plays out in slow motion. We'll start by launching `zsh -df` and pasting +the following code: + +```zsh +function pause() { read -s } +functions -M pause 0 + +reset +print -l {1..3} +setopt prompt_subst +PROMPT=$'${$((pause()))+}left>${(pl.$((COLUMNS-12))..-.)} ' +``` + +When `PROMPT` gets expanded, it calls `pause` to let us observe the state of the terminal. Here's +the initial state: + +![Zsh Resizing Bug 1]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-1.png) + +Zsh keeps track of the cursor position relative to the start of the current prompt. In this case it +knows that the cursor is one line below. When we shrink the terminal window, it looks like this: + +![Zsh Resizing Bug 2]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-2.png) + +At this point the terminal sends `SIGWINCH` to Zsh to notify it about changes in the terminal +dimensions. Note that this signal is sent *after* the content of the terminal has been reflown. + +When Zsh receives `SIGWINCH`, it attempts to erase the current prompt and print it anew. It goes to +the position where it *thinks* the current prompt is -- one line above the cursor (!) -- erases all +terminal content that follows and prints reexpanded prompt there. However, after resizing prompt is +no longer one line above the cursor. It's two lines above! Zsh ends up printing new prompt one line +too low. + +![Zsh Resizing Bug 3]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-3.png) + +In this case we ended up with unwanted junk content because `VD` has *increased*. When you make +terminal window wider, `VD` can also *decrease*, which would result in the new prompt being printed +higher than intended, potentially erasing useful content in the process. + +Here are a few more examples where shrinking terminal window increased `VD`. + +Simple one-line left prompt with right prompt. No `prompt_subst`. Note that the cursor is below the +prompt line (hit *ESC-ENTER* to get it there). + +![Zsh Prompt That Breaks on Terminal Shrinking 1]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-breakable-1.png) + +Simple one-line left prompt. No `prompt_subst`, no right prompt. Here `VD` is bound to increase +upon terminal shrinking due to the command line wrapping around. + +![Zsh Prompt That Breaks on Terminal Shrinking 2]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-breakable-2.png) + +#### Zsh patch + +The bug described above has been partially fixed (only for some terminals) in [this branch]( + https://github.com/romkatv/zsh/tree/fix-winchanged). The idea behind the fix is to use `sc` (save +cursor) terminal capability before printing prompt and `rc` (restore cursor) to move cursor back +to the original position when prompt needs to be refreshed. + +The patch works only on terminals that reflow saved cursor position together with text when the +terminal window is resized. The patch has no observable effect on terminals that don't reflow text +on resize (both patched and unpatched Zsh behave correctly) and on terminals that reflow text but +not saved cursor position (both patched and unpatched Zsh redraw prompt at the same incorrect +position). In other words, the patch fixes the resizing issue on some terminals while keeping the +behavior unchanged on others. + +There are two alternative approaches to fixing the bug that may seem to work at first glance but in +fact don't: + +- Instead of `sc`, use `u7` terminal capability to query the current cursor position and then `cup` + to go back to it. This doesn't work because the absolute position of the start of the current + prompt changes when text gets reflown. +- Recompute `VD` based on new terminal dimensions before attempting to refresh prompt. This doesn't + work because Zsh doesn't know whether terminal reflows text or truncates it. If Zsh could somehow + know that the terminal reflows text, this approach still wouldn't work on terminals that + continuously reflow text and rapid-fire `SIGWINCH` when the window is being resized. In such + environment real terminal dimensions go out of sync with what Zsh thinks the dimensions are. + +There is no ETA for the patch making its way into upstream Zsh. See [discussion]( + https://www.zsh.org/mla/workers//2019/msg00561.html). + +#### Mitigation + +There are a few mitigation options for this issue. + +- Apply [the patch](#zsh-patch) and [rebuild Zsh from source]( + https://github.com/zsh-users/zsh/blob/master/INSTALL). It won't help if you are using Alacritty, + Kitty or some other terminal that reflows text on resize but doesn't reflow saved cursor position. + On such terminals the patch will have no visible effect. +- Disable text reflowing on window resize in terminal settings. If your terminal doesn't have this + setting, try a different terminal. +- Avoid long lines between the start of prompt and cursor. + 1. Disable ruler with `POWERLEVEL9K_SHOW_RULER=false`. + 2. Disable prompt connection with `POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '`. + 3. Disable right frame with `POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=''`, + `POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=''` and + `POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=''`. + 4. Set `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()`. Right prompt on the last prompt line will cause + resizing issues only when the cursor is below it. This isn't very common, so you might want to + keep some elements in `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS` provided that none of them are + succeeded by `newline`. + +### Icons cut off in Konsole + +When using Konsole with a non-monospace font, icons may be cut off on the right side. Here +"non-monospace" refers to any font with glyphs wider than a single column, or wider than two columns +for glyphs designated as "wide" in the Unicode standard. + +![Icons cut off in Konsole]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/konsole-non-monospace-font.png) + +The last line on the screenshot shows a cut off Arch Linux logo. + +There are several mitigation options for this issue. + +1. Use a different terminal. Konsole is the only terminal that exhibits this behavior. +2. Use a monospace font. +3. Manually add an extra space after the icon that gets cut off. For example, if the content of + `os_icon` prompt segment gets cut off, open `~/.p10k.zsh`, search for + `POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION` and change it as follows: +```zsh +typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT} ' # extra space at the end +``` +4. Use a different icon that is monospace. For example, if Arch Linux logo gets cut off, add + the following parameter to `~/.p10k.zsh`: +```zsh +typeset -g POWERLEVEL9K_LINUX_ARCH_ICON='Arch' # plain "Arch" in place of a logo +``` +5. Disable the display of the icon that gets cut off. For example, if the content of + `os_icon` prompt segment gets cut off, open `~/.p10k.zsh` and remove `os_icon` from + `POWERLEVEL9K_LEFT_PROMPT_ELEMENTS` and `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS`. + +*Note*: [Non-monospace fonts are not officially supported by Konsole]( + https://bugs.kde.org/show_bug.cgi?id=418553#c5). + +### Arch Linux logo has a dot in the bottom right corner + +![Arch Linux Logo with a dot]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/arch-linux-logo-dot.png) + +Some fonts have this incorrect dotted icon in bold typeface. There are two ways to fix this issue. + +1. Use a font with a correct Arch Linux logo in bold typeface. For example, + [the recommended Powerlevel10k font](#meslo-nerd-font-patched-for-powerlevel10k). +2. Display the icon in regular (non-bold) typeface. To do this, open `~/.p10k.zsh`, search for + `POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION` and remove `%B` from its value. +```zsh +typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT}' # not bold +``` + +## Table of contents + +- [Features](#features) + - [Configuration wizard](#configuration-wizard) + - [Uncompromising performance](#uncompromising-performance) + - [Powerlevel9k compatibility](#powerlevel9k-compatibility) + - [Pure compatibility](#pure-compatibility) + - [Instant prompt](#instant-prompt) + - [Show on command](#show-on-command) + - [Transient prompt](#transient-prompt) + - [Current directory that just works](#current-directory-that-just-works) + - [Extremely customizable](#extremely-customizable) + - [Batteries included](#batteries-included) + - [Extensible](#extensible) +- [Installation](#installation) + - [Manual](#manual) + - [Oh My Zsh](#oh-my-zsh) + - [Prezto](#prezto) + - [Zim](#zim) + - [Antibody](#antibody) + - [Antigen](#antigen) + - [Zplug](#zplug) + - [Zgen](#zgen) + - [Zplugin](#zplugin) + - [Zinit](#zinit) + - [Homebrew](#homebrew) + - [Arch Linux](#arch-linux) +- [Configuration](#configuration) + - [For new users](#for-new-users) + - [For Powerlevel9k users](#for-powerlevel9k-users) +- [Fonts](#fonts) + - [Meslo Nerd Font patched for Powerlevel10k](#meslo-nerd-font-patched-for-powerlevel10k) + - [Automatic font installation](#automatic-font-installation) + - [Manual font installation](#manual-font-installation) +- [Try it in Docker](#try-it-in-docker) +- [License](#license) +- [FAQ](#faq) + - [How do I update Powerlevel10k?](#how-do-i-update-powerlevel10k) + - [How do I uninstall Powerlevel10k?](#how-do-i-uninstall-powerlevel10k) + - [How do I install Powerlevel10k on a machine without Internet access?](#how-do-i-install-powerlevel10k-on-a-machine-without-internet-access) + - [Where can I ask for help and report bugs?](#where-can-i-ask-for-help-and-report-bugs) + - [Which aspects of shell and terminal does Powerlevel10k affect?](#which-aspects-of-shell-and-terminal-does-powerlevel10k-affect) + - [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?](#im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) + - [Is it really fast?](#is-it-really-fast) + - [How do I enable instant prompt?](#how-do-i-enable-instant-prompt) + - [What do different symbols in Git status mean?](#what-do-different-symbols-in-git-status-mean) + - [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) + - [Why is Git status from `$HOME/.git` not displayed in prompt?](#why-is-git-status-from-homegit-not-displayed-in-prompt) + - [Why does Git status sometimes appear grey and then gets colored after a short period of time?](#why-does-git-status-sometimes-appear-grey-and-then-gets-colored-after-a-short-period-of-time) + - [How do I add username and/or hostname to prompt?](#how-do-i-add-username-andor-hostname-to-prompt) + - [Why some prompt segments appear and disappear as I'm typing?](#why-some-prompt-segments-appear-and-disappear-as-im-typing) + - [How do I change prompt colors?](#how-do-i-change-prompt-colors) + - [Why does Powerlevel10k spawn extra processes?](#why-does-powerlevel10k-spawn-extra-processes) + - [Are there configuration options that make Powerlevel10k slow?](#are-there-configuration-options-that-make-powerlevel10k-slow) + - [Is Powerlevel10k fast to load?](#is-powerlevel10k-fast-to-load) + - [What is the relationship between Powerlevel9k and Powerlevel10k?](#what-is-the-relationship-between-powerlevel9k-and-powerlevel10k) + - [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) + - [What is the best prompt style in the configuration wizard?](#what-is-the-best-prompt-style-in-the-configuration-wizard) + - [How to make Powerlevel10k look like robbyrussell Oh My Zsh theme?](#how-to-make-powerlevel10k-look-like-robbyrussell-oh-my-zsh-theme) + - [Can prompts for completed commands display error status for *those* commands instead of the commands preceding them?](#can-prompts-for-completed-commands-display-error-status-for-those-commands-instead-of-the-commands-preceding-them) + - [What is the minimum supported Zsh version?](#what-is-the-minimum-supported-zsh-version) + - [How were these screenshots and animated gifs created?](#how-were-these-screenshots-and-animated-gifs-created) + - [How was the recommended font created?](#how-was-the-recommended-font-created) + - [How to package Powerlevel10k for distribution?](#how-to-package-powerlevel10k-for-distribution) +- [Troubleshooting](#troubleshooting) + - [Question mark in prompt](#question-mark-in-prompt) + - [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render) + - [Sub-pixel imperfections around powerline symbols](#sub-pixel-imperfections-around-powerline-symbols) + - [Error: character not in range](#error-character-not-in-range) + - [Cursor is in the wrong place](#cursor-is-in-the-wrong-place) + - [Prompt wrapping around in a weird way](#prompt-wrapping-around-in-a-weird-way) + - [Right prompt is in the wrong place](#right-prompt-is-in-the-wrong-place) + - [Configuration wizard runs automatically every time Zsh is started](#configuration-wizard-runs-automatically-every-time-zsh-is-started) + - [Some prompt styles are missing from the configuration wizard](#some-prompt-styles-are-missing-from-the-configuration-wizard) + - [Cannot install the recommended font](#cannot-install-the-recommended-font) + - [Extra or missing spaces in prompt compared to Powerlevel9k](#extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k) + - [Extra space without background on the right side of right prompt](#extra-space-without-background-on-the-right-side-of-right-prompt) + - [Extra or missing spaces around icons](#extra-or-missing-spaces-around-icons) + - [Weird things happen after typing `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc) + - [Transient prompt stops working after some time](#transient-prompt-stops-working-after-some-time) + - [Cannot make Powerlevel10k work with my plugin manager](#cannot-make-powerlevel10k-work-with-my-plugin-manager) + - [Directory is difficult to see in prompt when using Rainbow style](#directory-is-difficult-to-see-in-prompt-when-using-rainbow-style) + - [Horrific mess when resizing terminal window](#horrific-mess-when-resizing-terminal-window) + - [Icons cut off in Konsole](#icons-cut-off-in-konsole) + - [Arch Linux logo has a dot in the bottom right corner](#arch-linux-logo-has-a-dot-in-the-bottom-right-corner) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/dot_gitattributes b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/dot_gitattributes new file mode 100644 index 00000000..41b2d3a8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/dot_gitattributes @@ -0,0 +1,5 @@ +* text=auto +*.zsh text eol=lf +*.zsh-theme text eol=lf +/prompt_powerlevel9k_setup text eol=lf +/prompt_powerlevel10k_setup text eol=lf diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/dot_gitignore b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/dot_gitignore new file mode 100644 index 00000000..416cfaac --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/dot_gitignore @@ -0,0 +1 @@ +*.zwc diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-classic.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-classic.zsh new file mode 100644 index 00000000..8bb7e4df --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-classic.zsh @@ -0,0 +1,1596 @@ +# Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + # prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # time # current time + # =========================[ Line #2 ]========================= + newline # \n + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%242F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%242F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%242F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%242F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Default background color. + typeset -g POWERLEVEL9K_BACKGROUND=238 + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%246F\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%246F\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%248Fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%248F' # grey foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_LOCAL_BRANCH ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%248Fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%248Ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 + + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%248Fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION" if $P9K_PYENV_PYTHON_VERSION is not + # empty and unequal to $P9K_CONTENT. + # 2. Otherwise display just "$P9K_CONTENT". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_PYENV_PYTHON_VERSION:#$P9K_CONTENT}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%248Fat ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70F⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215F⇡$P9K_IP_TX_RATE }%38F$P9K_IP_IP' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%248Fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-lean-8colors.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-lean-8colors.zsh new file mode 100644 index 00000000..2b1eabca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-lean-8colors.zsh @@ -0,0 +1,1577 @@ +# Config for Powerlevel10k with 8-color lean prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # time # current time + # =========================[ Line #2 ]========================= + newline # \n + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # Basic style options that define the overall look of your prompt. You probably don't want to + # change them. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= + + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll + # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and + # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. + typeset -g POWERLEVEL9K_SHOW_RULER=false + typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' + typeset -g POWERLEVEL9K_RULER_FOREGROUND=7 + + # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' + # to make it easier to see the alignment between left and right prompt and to separate prompt + # from command output. It serves the same purpose as ruler (see above) without increasing + # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false + # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact + # prompt. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=7 + # Add a space between the end of left prompt and the filler. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' + # Add a space between the filler and the start of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=2 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=1 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=4 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=4 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=4 + # Set to true to display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=false + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable directories. See POWERLEVEL9K_LOCK_ICON and + # POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v2 + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=4 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=4# + # + # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=4 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%f' # default foreground + local clean='%2F' # green foreground + local modified='%3F' # yellow foreground + local untracked='%4F' # blue foreground + local conflicted='%1F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%f' # default foreground + local clean='%f' # default foreground + local modified='%f' # default foreground + local untracked='%f' # default foreground + local conflicted='%f' # default foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_LOCAL_BRANCH ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=2 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR= + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=2 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=2 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=3 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=false + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=false + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=1 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=1 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=1 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=3 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=6 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=3 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=6 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=4 + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=2 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=1 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=2 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=3 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=4 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=4 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=6 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=7 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=7 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=6 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=6 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=6 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION" if $P9K_PYENV_PYTHON_VERSION is not + # empty and unequal to $P9K_CONTENT. + # 2. Otherwise display just "$P9K_CONTENT". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_PYENV_PYTHON_VERSION:#$P9K_CONTENT}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=6 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=2 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=6 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=4 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=5 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=5 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=4 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=6 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=1 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=1 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=4 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=4 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=6 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=5 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=1 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=3 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=3 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=5 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=2 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=3 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=4 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=3 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=5 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=3 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=4 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %2F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %3F⇡$P9K_IP_TX_RATE}' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{0}▁' '%K{0}▂' '%K{0}▃' '%K{0}▄' '%K{0}▅' '%K{0}▆' '%K{0}▇' '%K{0}█') + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(4 4 4 4 4) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=6 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and green text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 2 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-lean.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-lean.zsh new file mode 100644 index 00000000..dd6fd959 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-lean.zsh @@ -0,0 +1,1573 @@ +# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # time # current time + # =========================[ Line #2 ]========================= + newline + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # Basic style options that define the overall look of your prompt. You probably don't want to + # change them. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= + + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll + # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and + # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. + typeset -g POWERLEVEL9K_SHOW_RULER=false + typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' + typeset -g POWERLEVEL9K_RULER_FOREGROUND=240 + + # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' + # to make it easier to see the alignment between left and right prompt and to separate prompt + # from command output. It serves the same purpose as ruler (see above) without increasing + # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false + # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact + # prompt. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240 + # Add a space between the end of left prompt and the filler. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' + # Add a space between the filler and the start of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%f' # default foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_LOCAL_BRANCH ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=false + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=false + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION" if $P9K_PYENV_PYTHON_VERSION is not + # empty and unequal to $P9K_CONTENT. + # 2. Otherwise display just "$P9K_CONTENT". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_PYENV_PYTHON_VERSION:#$P9K_CONTENT}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %70F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %215F⇡$P9K_IP_TX_RATE}' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-pure.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-pure.zsh new file mode 100644 index 00000000..566c030d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-pure.zsh @@ -0,0 +1,193 @@ +# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure). +# +# Differences from Pure: +# +# - Git: +# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state. +# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`). +# +# Apart from the differences listed above, the replication of Pure prompt is exact. This includes +# even the questionable parts. For example, just like in Pure, there is no indication of Git status +# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt +# doesn't fit on one line, it wraps around with no attempt to shorten it. +# +# If you like the general style of Pure but not particularly attached to all its quirks, type +# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking +# advantage of Powerlevel10k features that aren't present in Pure. + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # Prompt colors. + local grey=242 + local red=1 + local yellow=3 + local blue=4 + local magenta=5 + local cyan=6 + local white=7 + + # Left prompt segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + context # user@host + dir # current directory + vcs # git status + command_execution_time # previous command duration + # =========================[ Line #2 ]========================= + newline # \n + virtualenv # python virtual environment + prompt_char # prompt symbol + ) + + # Right prompt segments. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # command_execution_time # previous command duration + # virtualenv # python virtual environment + # context # user@host + # time # current time + # =========================[ Line #2 ]========================= + newline # \n + ) + + # Basic style options that define the overall prompt look. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons + + # Add an empty line before each prompt except the first. This doesn't emulate the bug + # in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Magenta prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$magenta + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode is the same as in command mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='❮' + # Prompt symbol in overwrite vi mode is the same as in command mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false + + # Grey Python Virtual Environment. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey + # Don't show Python version. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + + # Blue current directory. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue + + # Context format when root: user@host. The first part white, the rest grey. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$white}%n%f%F{$grey}@%m%f" + # Context format when not root: user@host. The whole thing grey. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$grey}%n@%m%f" + # Don't show context unless root or in SSH. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION= + + # Show previous command duration only if it's >= 5s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5 + # Don't show fractional seconds. Thus, 7s rather than 7.3s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Yellow previous command duration. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow + + # Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones. + typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey + + # Disable async loading indicator to make directories that aren't Git repositories + # indistinguishable from large Git repositories without known state. + typeset -g POWERLEVEL9K_VCS_LOADING_TEXT= + + # Don't wait for Git status even for a millisecond, so that prompt always updates + # asynchronously when Git state changes. + typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0 + + # Cyan ahead/behind arrows. + typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan + # Don't show remote branch, current tag or stashes. + typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind) + # Don't show the branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + # When in detached HEAD state, show @commit where branch normally goes. + typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@' + # Don't show staged, unstaged, untracked indicators. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON= + # Show '*' when there are staged, unstaged or untracked files. + typeset -g POWERLEVEL9K_VCS_DIRTY_ICON='*' + # Show '⇣' if local branch is behind remote. + typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣' + # Show '⇡' if local branch is ahead of remote. + typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡' + # Don't show the number of commits next to the ahead/behind arrows. + typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1 + # Remove space between '⇣' and '⇡' and all trailing spaces. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }' + + # Grey current time. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands rather than the end times of + # their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-rainbow.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-rainbow.zsh new file mode 100644 index 00000000..318792eb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-rainbow.zsh @@ -0,0 +1,1678 @@ +# Config for Powerlevel10k with powerline prompt style with colorful background. +# Type `p10k configure` to generate your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + # prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # time # current time + # =========================[ Line #2 ]========================= + newline + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%242F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%242F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%242F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%242F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=232 + typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=7 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Current directory background color. + typeset -g POWERLEVEL9K_DIR_BACKGROUND=4 + # Default current directory foreground color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=254 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=250 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=255 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=255 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=255 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=255 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='in ' + + #####################################[ vcs: git status ]###################################### + # Version control system colors. + typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2 + typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2 + typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3 + typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8 + + # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + # Styling for different parts of Git status. + local meta='%7F' # white foreground + local clean='%0F' # black foreground + local modified='%0F' # black foreground + local untracked='%0F' # black foreground + local conflicted='%1F' # red foreground + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_LOCAL_BRANCH ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='on ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0 + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0 + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1 + + ###################[ command_execution_time: duration of the last command ]################### + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=0 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=3 + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='took ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=6 + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=0 + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 + typeset -g POWERLEVEL9K_DIRENV_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override these parameters for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND and + # POWERLEVEL9K_ASDF_${TOOL}_BACKGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_BACKGROUND=7 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_RUBY_BACKGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PYTHON_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_GOLANG_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_NODEJS_BACKGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_RUST_BACKGROUND=208 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_FLUTTER_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_LUA_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=1 + typeset -g POWERLEVEL9K_ASDF_JAVA_BACKGROUND=7 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PERL_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_ERLANG_BACKGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_ELIXIR_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_POSTGRES_BACKGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PHP_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_HASKELL_BACKGROUND=3 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_JULIA_BACKGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=7 + typeset -g POWERLEVEL9K_NORDVPN_BACKGROUND=4 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 + typeset -g POWERLEVEL9K_RANGER_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=0 + typeset -g POWERLEVEL9K_NNN_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_VIM_SHELL_BACKGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_NIX_SHELL_BACKGROUND=4 + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=0 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=0 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=7 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=1 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Foreground color. + typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0 + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=2 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=4 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=3 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=8 + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=0 + typeset -g POWERLEVEL9K_RAM_BACKGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=0 + typeset -g POWERLEVEL9K_SWAP_BACKGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_NORMAL_BACKGROUND=2 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_WARNING_BACKGROUND=3 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=0 + typeset -g POWERLEVEL9K_TODO_BACKGROUND=8 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=255 + typeset -g POWERLEVEL9K_TIMEWARRIOR_BACKGROUND=8 + + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=0 + typeset -g POWERLEVEL9K_TASKWARRIOR_BACKGROUND=6 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 + typeset -g POWERLEVEL9K_CONTEXT_ROOT_BACKGROUND=0 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=3 + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_BACKGROUND=0 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=3 + typeset -g POWERLEVEL9K_CONTEXT_BACKGROUND=0 + + # Context format when running with privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='with ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_VIRTUALENV_BACKGROUND=4 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ANACONDA_BACKGROUND=4 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PYENV_BACKGROUND=4 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION" if $P9K_PYENV_PYTHON_VERSION is not + # empty and unequal to $P9K_CONTENT. + # 2. Otherwise display just "$P9K_CONTENT". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_PYENV_PYTHON_VERSION:#$P9K_CONTENT}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_GOENV_BACKGROUND=4 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_NODENV_BACKGROUND=0 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_NVM_BACKGROUND=5 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_NODEENV_BACKGROUND=0 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=7 + typeset -g POWERLEVEL9K_NODE_VERSION_BACKGROUND=2 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=255 + typeset -g POWERLEVEL9K_GO_VERSION_BACKGROUND=2 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=0 + typeset -g POWERLEVEL9K_RUST_VERSION_BACKGROUND=208 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=7 + typeset -g POWERLEVEL9K_DOTNET_VERSION_BACKGROUND=5 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=0 + typeset -g POWERLEVEL9K_PHP_VERSION_BACKGROUND=5 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 + typeset -g POWERLEVEL9K_LARAVEL_VERSION_BACKGROUND=7 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_RBENV_BACKGROUND=1 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=1 + typeset -g POWERLEVEL9K_JAVA_VERSION_BACKGROUND=7 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=0 + typeset -g POWERLEVEL9K_PACKAGE_BACKGROUND=6 + + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_RVM_BACKGROUND=240 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_FVM_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_LUAENV_BACKGROUND=4 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=1 + typeset -g POWERLEVEL9K_JENV_BACKGROUND=7 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PLENV_BACKGROUND=4 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PHPENV_BACKGROUND=5 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide PHP version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_SCALAENV_BACKGROUND=1 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=0 + typeset -g POWERLEVEL9K_HASKELL_STACK_BACKGROUND=3 + + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_BACKGROUND=0 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_BACKGROUND=0 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=0 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_BACKGROUND=2 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_BACKGROUND=5 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='at ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_AWS_DEFAULT_BACKGROUND=1 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_AWS_EB_ENV_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=7 + typeset -g POWERLEVEL9K_AZURE_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=7 + typeset -g POWERLEVEL9K_GCLOUD_BACKGROUND=4 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_BACKGROUND=4 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=7 + typeset -g POWERLEVEL9K_PUBLIC_IP_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=0 + typeset -g POWERLEVEL9K_VPN_IP_BACKGROUND=6 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_BACKGROUND=4 + typeset -g POWERLEVEL9K_IP_FOREGROUND=0 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+⇡$P9K_IP_TX_RATE }$P9K_IP_IP' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=4 + typeset -g POWERLEVEL9K_PROXY_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + typeset -g POWERLEVEL9K_BATTERY_BACKGROUND=0 + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=0 + typeset -g POWERLEVEL9K_WIFI_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(0 0 0 0 0) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=0 + typeset -g POWERLEVEL9K_TIME_BACKGROUND=7 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='at ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and yellow text on red background + # greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -b 1 -f 3 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=3 + typeset -g POWERLEVEL9K_EXAMPLE_BACKGROUND=1 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-robbyrussell.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-robbyrussell.zsh new file mode 100644 index 00000000..a4cb8b2d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_config/p10k-robbyrussell.zsh @@ -0,0 +1,111 @@ +# Config file for Powerlevel10k with the style of robbyrussell theme from Oh My Zsh. +# +# Original: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#robbyrussell. +# +# Replication of robbyrussell theme is exact. The only observable difference is in +# performance. Powerlevel10k prompt is very fast everywhere, even in large Git repositories. +# +# Usage: Source this file either before or after loading Powerlevel10k. +# +# source ~/powerlevel10k/config/p10k-robbyrussell.zsh +# source ~/powerlevel10k/powerlevel10k.zsh-theme + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # Left prompt segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(prompt_char dir vcs) + # Right prompt segments. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=() + + # Basic style options that define the overall prompt look. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons + + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=green + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=red + # Prompt symbol: bold arrow. + typeset -g POWERLEVEL9K_PROMPT_CHAR_CONTENT_EXPANSION='%B➜ ' + + # Cyan current directory. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=cyan + # Show only the last segment of the current directory. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last + # Bold directory. + typeset -g POWERLEVEL9K_DIR_CONTENT_EXPANSION='%B$P9K_CONTENT' + + # Git status formatter. + function my_git_formatter() { + emulate -L zsh + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, it's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + else + # Use VCS_STATUS_* parameters to assemble Git status. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + typeset -g my_git_format="${1+%B%4F}git:(${1+%1F}" + my_git_format+=${${VCS_STATUS_LOCAL_BRANCH:-${VCS_STATUS_COMMIT[1,8]}}//\%/%%} + my_git_format+="${1+%4F})" + if (( VCS_STATUS_NUM_CONFLICTED || VCS_STATUS_NUM_STAGED || + VCS_STATUS_NUM_UNSTAGED || VCS_STATUS_NUM_UNTRACKED )); then + my_git_format+=" ${1+%3F}✗" + fi + fi + } + functions -M my_git_formatter 2>/dev/null + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' + # Grey Git status when loading. + typeset -g POWERLEVEL9K_VCS_LOADING_FOREGROUND=246 + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/FETCH_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/FETCH_HEAD new file mode 100644 index 00000000..1e050d96 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/FETCH_HEAD @@ -0,0 +1,2 @@ +b816abfed0e8785d8bc2e47987cc40f6bcd4bc29 branch 'master' of ssh://github.com/romkatv/powerlevel10k +9a87929fd021f5138b8a4829bc65b86490b1c9fd not-for-merge tag 'v1.14.6' of ssh://github.com/romkatv/powerlevel10k diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/ORIG_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/ORIG_HEAD new file mode 100644 index 00000000..9f63d6a3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/ORIG_HEAD @@ -0,0 +1 @@ +d524164020a91a04e8f1982ef5e57d434ef04dfb diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/config b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/config new file mode 100644 index 00000000..317657b6 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/config @@ -0,0 +1,11 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + url = https://github.com/romkatv/powerlevel10k.git + fetch = +refs/heads/master:refs/remotes/origin/master +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/description b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_branches/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_branches/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_applypatch-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_applypatch-msg.sample new file mode 100644 index 00000000..a5d7b84a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_commit-msg.sample new file mode 100644 index 00000000..b58d1184 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample new file mode 100644 index 00000000..14ed0aa4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_fsmonitor-watchman.sample @@ -0,0 +1,173 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + } + my $query = <<" END"; + ["query", "$git_work_tree", { + "since": $last_update_token, + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_post-update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_post-update.sample new file mode 100644 index 00000000..ec17ec19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-applypatch.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-applypatch.sample new file mode 100644 index 00000000..4142082b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-commit.sample new file mode 100644 index 00000000..e144712c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample new file mode 100644 index 00000000..399eab19 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-push.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-push.sample new file mode 100644 index 00000000..6187dbf4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +z40=0000000000000000000000000000000000000000 + +while read local_ref local_sha remote_ref remote_sha +do + if [ "$local_sha" = $z40 ] + then + # Handle delete + : + else + if [ "$remote_sha" = $z40 ] + then + # New branch, examine all commits + range="$local_sha" + else + # Update to existing branch, examine new commits + range="$remote_sha..$local_sha" + fi + + # Check for WIP commit + commit=`git rev-list -n 1 --grep '^WIP' "$range"` + if [ -n "$commit" ] + then + echo >&2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-rebase.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-rebase.sample new file mode 100644 index 00000000..6cbef5c3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-receive.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-receive.sample new file mode 100644 index 00000000..a1fd29ec --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample new file mode 100644 index 00000000..10fa14c5 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_update.sample b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_update.sample new file mode 100644 index 00000000..5014c4b3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_hooks/executable_update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero="0000000000000000000000000000000000000000" +if [ "$newrev" = "$zero" ]; then + newrev_type=delete +else + newrev_type=$(git cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in + refs/tags/*,commit) + # un-annotated tag + short_refname=${refname##refs/tags/} + if [ "$allowunannotated" != "true" ]; then + echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_info/exclude b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_info/exclude new file mode 100644 index 00000000..a5196d1b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/HEAD new file mode 100644 index 00000000..0bff614c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/HEAD @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 9b981b89c53826a9b5514978b951cda11cfa8d4b joelazar 1602147904 +0200 clone: from https://github.com/romkatv/powerlevel10k.git +9b981b89c53826a9b5514978b951cda11cfa8d4b d524164020a91a04e8f1982ef5e57d434ef04dfb joelazar 1609750524 +0100 pull: Fast-forward +d524164020a91a04e8f1982ef5e57d434ef04dfb b816abfed0e8785d8bc2e47987cc40f6bcd4bc29 joelazar 1612828046 +0100 pull: Fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_heads/master new file mode 100644 index 00000000..0bff614c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_heads/master @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 9b981b89c53826a9b5514978b951cda11cfa8d4b joelazar 1602147904 +0200 clone: from https://github.com/romkatv/powerlevel10k.git +9b981b89c53826a9b5514978b951cda11cfa8d4b d524164020a91a04e8f1982ef5e57d434ef04dfb joelazar 1609750524 +0100 pull: Fast-forward +d524164020a91a04e8f1982ef5e57d434ef04dfb b816abfed0e8785d8bc2e47987cc40f6bcd4bc29 joelazar 1612828046 +0100 pull: Fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD new file mode 100644 index 00000000..232b51a3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 9b981b89c53826a9b5514978b951cda11cfa8d4b joelazar 1602147904 +0200 clone: from https://github.com/romkatv/powerlevel10k.git diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master new file mode 100644 index 00000000..42277799 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master @@ -0,0 +1,2 @@ +9b981b89c53826a9b5514978b951cda11cfa8d4b d524164020a91a04e8f1982ef5e57d434ef04dfb joelazar 1609750523 +0100 pull: fast-forward +d524164020a91a04e8f1982ef5e57d434ef04dfb b816abfed0e8785d8bc2e47987cc40f6bcd4bc29 joelazar 1612828046 +0100 pull: fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_00/232d1b6de0931fd9394bc3f963afb88644447d b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_00/232d1b6de0931fd9394bc3f963afb88644447d new file mode 100644 index 00000000..201c3203 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_00/232d1b6de0931fd9394bc3f963afb88644447d @@ -0,0 +1 @@ +x��1n�0 @��:����� E��I�,�P��'�z��o���j]���A�Y��QK��T(%��A�(*"�8%w�n��S�ȒX�E猼,T"zх����.?�o���j��j���q�����t���V󺝤�o��>�S�O�޻�����!� �fy� CS� \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_00/888476f7a1e857849091692c06826e21bdef1c b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_00/888476f7a1e857849091692c06826e21bdef1c new file mode 100644 index 0000000000000000000000000000000000000000..415dfe36dcbb346835abd6e410a115eaa69beef6 GIT binary patch literal 33890 zcmbP^jt z&kM}wmZ|UGRb?@^@AB>5V{xmCFZjM@|5m!!Jfo*O-{jWfg9&DDeEna&+}yl0K6b5& zXU*rW>;L4K$-Y^(_~w$kdy_B!Y1}7KV!ij~f)B2{O(nKhu^+a6?0Hr$dR2(mX}_w> zOJ2*`?>d^_l=q#KfBA6LCNtk%%^wrB-|l^}?4+O7yE5zjyQ(V9QjR`8nQ_6p`f&5D z9o7$f9kXw|(~DjG=FRur=c}vt+Wmfb^WEo{Er!3)^`{`8owYdGer)+7Po04ua z`_BwGp5GHuuAS?;Xs!H0zt&;ai69eXYE|dOdBPdudl=Sj*KV zr8)xg=f0(7mLK|k`CUO&`byquRaa)&X*cgxQ`joi9Cj+wbj#e2Tc-K>|GK-S?1r_) zn#>l?{nw5kWW^Sq9q?Z~uEnoOeF1aH=YhUJE^1WI9C%F1-dDUx;i_0!$S0z8+U@h2Dq_eB^ zNS5WpOolyi*Ss2XHW`Z^nS8NM$YD|B8|#C1b;mn>-hSMBaZ2)|zo(~9X3r@(y*+H@ z9R~TfoGtg$J&w&SnOSr}wrrQIL7GMC6-V>8{aJ_KEeXDCZYp-g?#-*iOQz|IDMhYQ zzuLReZ`)P>Zw<{1_v{%zb|1dB`lx4df7n~XMdwy?jzGuMrH;VnPXRPy;Npp{{ zeYoc8^+|8~mp-}w|7ZQj{>fQeYb~UfHgUhWXWa3I`MMv|vF59HPj0y?9kx1gLhs=x zA3HS~3*Fkc9`t}v)i+HjWa`KkK1lv#$XS@{f4W2 z=VVPjw_-NmdX`z9QN|y-@83?i)cN@4--drqyH20*t#U9F5k(uFKi5tG`?cD{m`#^=Hrx|qBXgDmLHjRzw_#pFmVg%o@{x!%{+yc z+)a|(c0bPC^qFPffrULk)BBE1zQz*Ad&^4ptN)~T>(lq9uibYeZd2_ITTiRKC3o@< zZnc=T#q>p3m2>jds>2Zl%eU{pKUZb3Vm`A)f#uU&Yug8#UZ_m^)^gcN#-#r83U2OK z0lERts)`3DyY9a( z_vKS;Q7FAu_GpgJob*#G`zIaFt6vj2Iq`Mm`-Y{V%i1SjeDk1ykJs&3e$ckiyYG5e zZ@;f>p8T_6YxK-BZO*!XMM^iExw*kUOI|f;K3{9Wg{bp?pT^%=7pC=L?Rr)12fkJt zY&q6{S>yLYN9p&>hv}1IrfpgIHAs9_Pk^@9wy69JdmX2POLP96<2WK1$M8tSR`N~n zuY%KwO;O4_&F3yXx!|_cwB>JlvTk~B{V-{nvy!*XCn2WotnEqD`Q4Aply920g+Kam zbKael>MQcTL2a$}vezXxgnwp#B=?8$#gbiTIhC&l-Pk!{Y1Qoo+gYQ#n^}#7dKWDB z2rRs1&)pzcrYu#|cessz=X|fy;Jkd1 z<=!MIudlZ@+hw)Ac0HEQB5AVZoxoqW^evqX_n2*Yz7&4*lX36R)!AH_bvcmtuU31q z@8c^ub8a0uUfAmQYJ$q?%ab0>5)rxX^)!2}W6l!+o%QS1<*&~RTQ9kj_hO=Q*w$l@ z^Rkt)7?!sOvqXF{)p|asioLI~>`kRbm;SeC_OGXI?K_*Gf0#YYkFSrBX~w3TUdOBN zayC?5+C9zWwk*r5fK6vxHwE5XVlB7Swt3l<=VI#LdGe;0v>$uJl}4P zB`Pz^W-DAtymO{~Qu&M}d;9EmKJZI?eK&D$oPS^R-j!zeX2p3S}sz zi@SE1EIW5($u8S4|9L)c)fzKpJ~x;yv(=a^=%zf`NkO!lQR@1$1tMasGot=JzUDdW z&ElMR<}}eO%u6D!<8->}w zuy1XGiSxtSd2?Dk|1STqf6aq*^V9ZweDahI#0av<(YGxFysg;{;(X2n?kx|W&DNk4h zj(45e%B8$QZS%$>LGHpLVe(UKrktB=YTz!R{QCI4>HC@^oP9s(XG@95x-)5SuPkJk zqVs1_v4gf#Rk6y6C4DzE)v7*TZEX*(S@1w|XX%y@&6VvZcbGmjU}!CQetB8Y!M6e);#~ zzRv7PaZg(J<+td$@<}H1b87bP`kC={^;P%n`*O}j3R?!;F!|v2_;G!|`($O|_GMRJ z%>I{AGDX?M&Bs7=-McNnnghGSI_w{A(s{C}eaSN;Lyi2c?~0$;`k4f5QM=S3m9_eZ z)B&p(w$7}l=6!08iCT5yIMc10K^wQ0u|2AHG6_~WU-&{byu2xTiN5%;OqZ#7s?2ID z9%P5JIZi&E$oEbvDdpdks!5Ry%+@FJ(!9U0IW|hC>jiCFdOdq4_p)g-*&pT_YrSJU zytA3Fs#W_y#1*!~e@vM6KM3&3HkEkhZ^^Tn_1^*asgj8bD{ow0!Y$r(d0G2j!yU%9 zZre`zX<$QM@ z9P0QL>1em$V|l{1#U~%?MJ;>M{!Q7mnT>C%;PfAfU(TOgTy1dV z`urO!R5b%mO5WS5BJ0T%*SMFrlcVDx7mI4$&fS|n{`mOm*WSBVOH%5|1Bskef{v*;_7m{iM`CsSr2RPt~Z%)b2sL0Y-LUU_m7|S->O#6TYlr2iS5HMNy0HKQ|=Q_Rmt%X_bhXXo{^ty#(9EiBnKneYFdC3jtfwqD>h2={9`FVpN3 z*Y@to22;LiaolHIjn!)!r{3_@4xiZfXg0G#h3?Ir3zi+XwmzKx5_J}>t$vs83xr+1CMXm8Pa^#9R`#yP@I7^+GLH4;#ax z%6glG4(n6xd=30-7WjB2aUI$1mgDYiDxGfTHrYnuN5k2UV|&iu+py-QuFjDr{u!N$ zU&7Yv-MGTPb#d$M!b64idqh+#Us_Jisua9hr6eY?a{htX{ny_uT)?vVOrO5MWgGqV z9JV$($y%;zXYMYV-E1V3cy?=LIeUZn${N-iazdt`zFp5+VEfCSFUh)i&Yhr^t+Q^< zc;3Z+FwgBr44+T)boo;~7hax>xGyW;m0026sb{D%GqZG&Ox^R0I}M3RlKNNg1?>AE zk{B|_DgEpup8U5dzm@k$S;Pb^cq*8&Gk9t1RqMH@cE=uC;C1z)`dY5G77pE7?%EEJq$3bSPsuyH~HJLr|B!eXaeUuFvbNkG;-Fuvhrv zdxdZIdUHwMr#Y+CzgMa!3!hzlQ?6;({0DsgA2dwAvVV{Xt76W%QBm^NZlCJUiMxL9 zSZb8+X<}k}f@ODXm{OciO+iA_@AC#1J}kM#$X;w=6WGahN!4Is@yVWD-aQJQl_z)b z?n`iO>|-_T+b<#CDcru1VU6tS$026r=^-z__w71v%Q8>m(x>au*C#y{53*Xa*hZq4 z@4&*T|1#Rv+Py4`NLzok{pv4^b&aP>R9uWyXIz}u)7QD6=)mfnqDdid6U^E!+OsU3 z>QR*7W5_ej^7kEG&Xj|d#mky<6QsINxjZXzi8&%-`8ncX<=gKYvhNiuMI5Mq7WU;| zgx0;^kEQ;#H>5T$To>`9KX|*v_cq%g`3=K~uJ!IOE-3%o%j)R&Mz(u$sKoRicTHBx zs<_@R{eF6Rd3d;4LFWIWYVoJ9U&n6QxM2R>okGv*R<4YHb=Y8Q{jJN-_1)i2FT6F~ z?zOktR(I3KqKzqjZ%w|OR&re4cW{T+akG@*4O2GVYfI}akDaDDtDrbe2W(tM z(}Y|2HZR^>k+9_Dw4YgtI+9aQoH;sItC-8OpvZTUhJgUvD_^0cHuKtmK(Y7S`;FsLecN|>575*;k4^{miI7_DEv**7JeYOnA z2VJBS>wYtahBpV`vdGJ9!7ihd)}5?HB-qs(IliilR3@YFOZib|AEfbVlRE8T6vyB zzr9pE1N3$TYP(6bFZO)T+7rf+tbY7plKPg1GTkSX`JM89r%d?&TX`Z++tv-DZu}{q zw%$2;>-;~SH>c&!oXIV?z})lq-M=diau!n!L?^IakeI{bv_w`j-JvbU@r!%`w@F=J z+M~@CEbDn+bSV5=w$NEk*V!{_PJiu1lh|Fhv%Xpv^*(0TIlD0Z4R55XjK|Xm|5qEu zGAazD1;6hee22*wi^7}DlJ_pBEh}wMWnl=^`Pw1FCA>v?XK6!o>w!md*`|AJ zCSNSi=*kS{GUhDE=oI^w)0g;7ZT{gH3GenpH}d9BmCT#{i0`fBr5BYaRNw5n*rM|( z`23A}wW=>`4$V*y|1-AY)g;T`Bjld=Xqwb1sZQ#JMYmtR<~Z&S&DIen{UlvJ+^)Ndm*voO{_~Db^kC4 z=wDfv>o|SMqe!=_FIjq1)a`|C_=+99e)`m;Cq7LkhDz}hcmvE=?VY3hDt9tt%%1hf zj)XWxS0=rxi8#9OgrD=G*@BCIeo195Xj!7%sd6Ud0e_9CW1NrJN2TrZ+u!cI%9yTk z?ccu{6Lnqh)ibf&wWxXE_FQGs!<#2_16=dZoz^kka#!)e{&J(4OMj%C+!Vs$yvt^y z{z|4)^CI5|P70rEKdx=EzAv_?C5MNh@OHKT$(jo0SEm+#y+5bw&W*rb8#Qhm%y)KB zD9$_i*pvT@%c1jC^H`<%FQu-^Je%Yz(RV??ljD$^QBL%`Cr5la(?(0^w?3R79sdRx6vTe!+3ln!~QFT+7Zp`MW7y zLGz9DPWJUCtX=l1;fZmd7h0}V_%mrwdV0l-3&z<_c_!*#X5aUzTB3DkL(S#;f7tRF zcAeUMjq%svrlp-f4y}J*UD?{{?LEb-{`x1cCGBi^cPw4stLgf#C~?ydcviwADD1n` zv#wXFqiechJkt@w(hR|QAtf(Z?oKV!DSNo$)2}z@vfr&Tl~h$$7d8({PX2WGo~NqB z)`OL)R~9HNzL&Oeru(@!8IdtUi&f7Uui3(}pvLl-0ldrqvH8 zKNi7lFGY_}o0GOLd2?pVw~0#^M~TOzJox1;^i(%+<%DZN9zL2+W=EVlqH#BL(`+M= zoEyEmSDasb(K2Ct=vgYi<(71`fT~sJq+Z{Y zezW%f-MnAr#6kP|h4uS3?f?HJ-ZWQuhmoh(ezidD?PpEnjE!A9T(5b?w{^EYWWFlt z#ku&(BX!5=hwLu;JekVK7j0oMMcwzd^YPh#{s_3nA7uT1b^8kWl@AVBuPv1QALGv1 z-Qj$*t8DlA-EU_exv@?t?@N)oNUlnFzoWzFyZUo&`+8O~pSHX6H*ZV&gzq{j>F@8~Q zytd)?bNGHGR&dE!?DO;X<_#8|yCJcpS|xsC?V9gyDfX7nw8Gt$=j`0WeXJtK#K&Hq zH|WXw7yNwQ8{Ix&xl{E|ILlj`po>xnA`o!e5rr_GM{cb zSlg!Wxqf_wOqSFmr`3-aww``1r)Zq8cbkJ8m-d_oT^laXI8)&N>AMWe+wZN+w?JJ( zi)rt_t(n*rJ=aFMLFnP$+WP$c_M7LNzTEwwvDN!Ux%=9`*OpxOlC}|Ydwo7C(fiNV z1owZx4}H9K_wdDkb}{Q7^0x}^=YCw3au-W=y+xN&M}fqmLgy-nDPl+>dqXCaPD0r4H^t)&Al9S4aNzXscV>5AE9- z%5dS5K+U=P*M)v4efWQ=&v0p{{de#8ZSRHR7{7FQ{0#nd@zD8cPc61{DQ0DA)K1*L zvh>Al*Y%IiS{>?K`8eN8=f91$Q}EaFL+=aRBYQuF__XjGXYLc`ygMP#*{qj8wV!Q? zfqVTr2A79B7r(c?G_8MT{qsZ08hnm_76onz*x0l8-GjYf{eRxRmHch%MybzEvo@dm zu(UL%sjj_#sZQp}pSQQk*R9;nru(O6+sd;2*AGM;Ta@KdXgOoz?t2fsuj*HE&RXkl4Hr1z=?(nKPZavmFAuMkn&BzXiB4z*jwqqC;rd3UcMAx zJX=FC`*4=gQQ({leG&hB56iPrlS+*$S15`%biP?JxbWn;^iPrtGQ9 z!dJAal`(fp?3E|6uFBoY-lbt#JLiK?doK=eoykO_@m2a?`bmaS9sK=4d3@{P_g@|_qp}s)f1IF{$71hzw+J7@0Z=! z)l=%1tYJGp_lo|u4-T>__l|C2I^X`jC+Gg`#i+nX(44uAQ%Wnum6KY`3| zr+r{9V`rUf^W?#A5Ao9{kMlqH`Nx%KhSG1Zq2ZPkRZw0*1 ze;HLOg&8+*5OhDp8^F|Tzvo*^#iUO{wq6_A17*Kk9Z^eLspPXsSJe2`w(8%uI%{fl zBJSB(U4y`SviRjY|ImtWd_`{YlkZ>fHJdK~Tl;0<>2C=u zoqj!t?_XK}dh6kTf1HCNcJ{It+ATlwP?a_1$OE%ZlX_&a%pWmfXblIEWe`4GanA*ybZ*d3N7^G~Rqmys5WpKw{8zg_i5cKNT{Qqm9d z9=t!Jy2QltkL2fl+eJTXx~m`m{rSVL^|Lma7tdq4{_dE;luk~$PZ94Qe_rs%)P=RR zagH6MUB#LtN%abDoyD4&W(Rm&g0y|5nSL+0+W-HZQq}J3(p3{HPHmer$Aijhv~)&D>L8Z&#VU+UW4Wdr{NzRo~LfI2<=$ z)_8hLNbPWN=F76$etwIIHfHs4(^{HrCiluSv zJ5y=$Q2&#Fr+^K`Baosxw|TolDw8@9NFJ7+9> zxcK9Yudf%xu@`FHGTyU)PKv3Lxb5=m$-mm~*YEyXQ2zAgwQt8B-`>hEpJx-7du4Od zq_)ld;g70aPMu!yPhKWyzww%F9eyUP@87ns?hk(-BPFiQd+NYmk>+oT&bA2*Hq(x2 zeL3`^MCj97olRxZ(+%S99lL7#y8LHK)3J+NOqvU0Tg~HsNUQ8?Ps}_cbo@(T$7cNp zy+0ZDHg0-$^pMUPXYc8MAA2+wUP$FpG%e>;7Jjp-e+BztzOF;rX&d(Z*l57d6py`%WC zy621f=0gj<+-o(SD_1Q&P2H9G+$|m>ktrz=Kh~FXD^6FunQ(ZTWE+b(|FiPK8;R38 zH5Q-0t&n&x?NV=^+sm9aOVqDqgsihUbk0us#?^W1dEWKsb5HI2^?U2m8z~ye_g`6v zoJ{+8aLP`nNWp`*jWaJ;uq8s`59%)41;{5pUmKfKSf|NWJuFb|* z)AZUIQxgv!3Sw%wdrb0uOiiVAde4G;nmhO2p5^<>t50=;L3N&3{)dlC)7Lt@H=m|8 zQ?6Td^YT+u7R04gMR1y)TxP1SqQO<$@WLi{XJ`7_O(}OygccoBa#g$bblt~4$LGJV z`}Z<(^)dEIwzKq~DOR3%BHqZMzGSt7=8kPkt{FiGB@0oaWg%+lKQGea=oRy`hWX7uHRcpO+v>*TL z`VnQGk#BH#<8?oVtr4%5ZxXt-bn5KFiM=y!JKr=ov1{rhuZYGlp--Rx$9-=+b$VK; zmh{U<_H*`mdzfA1dK=~<%YT6X`=P0;I&7TpWu5vPxs|u2z$turk+Zr?dfT^YAq<*k zOYR<5VK!mCerFR`s%mfKeD!;a-$k!e4Z2>@pXc_`GITv+ABCs%+@IL?EOn}FG56)tq5G^ zpSYX9uxyLa)Ci^ZCfvkQ+I-PS%4BJ7%1I$iFI&i`x=eyMqy-sbCL z9M6bG&0*^`Udpn?V5*Jrvtv@@b7)U=hmS;)smN4E2pHgrRyh6O=nr$=o|IQ zTm0VoiI!g7qCr*4mrb5Lu1)?pb8!QoNt%3Ms8`_onzpnn2_ej0o5DZ*Q#uyHu*OWi z$W%{*OXy|AZKrx|g`~91-25edS>G!`*AoWvtKUExO$HJDQWJ%x6*t$6KpNyJfmeq3GabNE!~iHNC7yQ3b+ z&A4EDc}*k7PN%7h3-_IhcI@4}%<{ebVMX)jR$SpPr+wsY@dC$qK%&*Nh&bf=zTZrT|udWOgC@Wh9E9VOab zy~OjrbNo@fTHk*q@0MBdbRqeu)a@Godl-4^eY|FUEZwp`CGzLG>sr4zbH)en%}7+U zDx1-rI5SV{|MUN|?x@-y;-9^s%PCLtLV@#%#o1e3SBZoj3{B)?)_&X%O#AHldA44qNtk}KE61H5mp?Go$sAvOE^)1u zPm9&Bqy-O5Cag`_yH;VtLr%WxtM*+|k8Y%`7klx}$nL~Z{=k0MDLw~f-tteMUAlCR z-}k-K=Y__-z2PKpd&BG6d-a8fR-RK<^YN1Xc;58p!s4x^%YBTumGwWaEBXBESM9&$ z2HPSYD9naJazX@ihj#H_p$uW_`H6VR#x8qeTNfXcXvjMHM;l*x0l{Omix{K@b*pN*z-ORJQFZ+%L=E1q;t_n4jV!%1sAHJerLFR{M3=1+3M8f|;G zxtuRw1jfjH^2z4E%Ug22)%le6>00jxiJWQsju?p>4gZKT1I%I zzvA+k`-PV0QXie%bnn@zl1u-8Ls(!}&j33W-%gh&>xLKfA@ayHSU+2}MVfx~ERWJ+NgRPSV zOlP<~nfr$4p6v4T9z1@}zAdnH6Q8`R;^P^EPwbN|+$zdD6=XSm?0gd@mTl(Yp1k4( zTNInWhxr;UA%9`3zR>7^@RHhW_umW~PX~UOTP*l6r18n?w;?r`=D8QQs#<$|Xt|^x z5SliPSwZCLRFx~HoaGujR4cERy3W4jeIoxEp6vfJ$^EDmsyJ*m*o81 zuT$&GnK%Q=Ud{>SSlYSB)UUhl<=s#Wi7=-lsychA(Vw0-I!aB)>uMQE(%uFS*bjOD-neayO1^k-TP z`>ublYQF8hTNk?h%?sxXN#|TorFvOuM$Mm>VX6Iq^XqE^)#lBYbml}!ul*76FZ^$c z!@FJ20tMWb@AEg7eP1@cYS!L!jHf4b<){>IuDm4m<)=5tvV0){AISy(%*2EMkIwkM%-dVHbyk4nU`U~%=S*343PVPPX_UYHRw>$oxW##2`^6OWe zX*ToXN`)8mY&E%@7X7&;XPGc%p8I*15M~+qSF>ic3M-vHp1R@p6-Tb$9p;BqggKt~ zwQWgKp0nInVIT9qjhdaW?@j5xI7R#6vgz}du2ebs$UyO(bWripC83p@R!+Zo$8_F@ z?fz%}H^+8w%74u#*m?7b-1Zj>O2WVRo@AWyf5z2ykIio%-*m`Vq^i_{HOik|S>WZ5 z#-~-EkH384(ybVHW6lyAlLfo(22B&q-@fZb{$=Oj1s+!6whU>>?0Ze6IE#>Ln za%5wa`9rOV$2tG6%dvUH@s_!I<<%4BnO|34OyF(z%)OSY9)95YwHdP-Hd>u%=T}Pq zv+ID6KNrTwym|9< z*}v)?zI`Y7Gp60&zhrZ%jbl;t%v}cFy~2-D6QAjyc(lLlrTlVnv27D}$=DmQTxn3? zt_t)Mc(Hie|8)-~dY?>i|8ZgEgZcf54MrIjS+ZVR?o_a7uX|$?cbo0`+ul~Wzpa_M zy|%v!-NLUg-a7T_*R@wA>?8lR{yr@4G`;Npq{pE%^Xi_>b?0h``XXY%_xTIo0;S>! z{&`m)q?+8Rk31FCZYch*dZvx(lym16f4Ken{}QgJJ>0HezENfY_1rz# ziv)s8!lGv$f8{dM@$8QqlK*erh;%c)cva_hMW^|vjrSE_o2@yV=ESQV>p5d>*Gwn7 zoU`Y*&HP)^XrJ@uPu$_1<|f;g9@}^H!~us3{5#hlP=B(T%j#GE#$>kF(LL{8hrQEK z{vFz7mm_m~ANQVZkw0EC)&IJ&WLs9ozfSFM;jF?-_wGBoNKzrb{AJeh4O-UT=U>%# zKdjApIyLLzukAaEti6{m+;{Xu;$6f4lOJyOR?B_ble=<(UCAf*`UOX9i=G_YaoXy} z-{=3+U!M!Mkc^FNdpOPO;mO%gi>57G%(Zqw+{~xKCSEGF7gpt5y~N|Cx=WX8sKVsp35Esj6;{wW&Lu7T$=?@J%_D$g@$)|i>S{lCw#{UhIrY4Uk??@MkZ`*yg6-zpHD z$=FbIHu}=~jW*?FlWwW({POVo{ypCl%2O+!K76(Al*Xp4F0*xi-mPv+Q{A)v)S8NT z$G3;yudmxuvisY`4^zVmHGf`RpW*M!y3y^}_ZJ^OeK*|1cIW-e`sUaTIaw;3%-)>I z-!}KQjP-AYm2VHoj`y<_79yZpldZC=`j*l+B-VD)M;I#?Oy^ z_3rGQSsPa}FS6{&qUNn_{jHPOH#5Dxv$x~nsv^!URd=5GEc+onYrT}!+yz#tKV`EH ztief`!{+xZcnpJ*jcl768_stAlUlZiNPw9Gjy!*k4`b~=%{hzt+ z)NA#7IOj>@s+VgnI{6uWo^Vy{YaL(A?m`Q7v0V%LCf~{`a^3QwD8^=+wv*9fm*2@b zm#QvpVyK&V1ybrUq{aW?!XI5zz+f*LX>3Zg_YQi*1iJP;e3h)`zNDsb z;qlo;f0^9MtY-m3Ng_Bn;U^Y1qAULXEfIcjS6zd9iu#vgxw=#+F6@43cuV^47Ta0e3-rU_v!b`Zn1xhpQbSFX4{4AWc>^2vw3Vybptelb!RpG*UI>B(da#k z(NRis;rdETtpn@soYzr^^k$#)pkz|a&B%4NzgKJjxxH%dkEwSiF7x#^-+FV2HQUMu zo)tH9PGp;Yb__XXe9Y*RY4qBa<*TQtt&mR^YxiyVE_eUVI^EV1vsBerlGpQ_&ULL{ zclxSHN=Vzw)3-JF3ZDnP>B+pX^Fc*d&L080t4|Kz`gZNxr*D_nCRp5!zP+dT@6)VLr?zP_bLLjI zzLs2a@?7WfH*swp9_jMA7Fn9-KCjR!*tPxYl#{7*ZtQG~nYGboze&n_J;U$~+NUBK z?#)tnH_bciak)dPXG#41ots&cIg$$4O9~%|o_T33X0l(Z)p^CF(^-#RzMqwOYldc5 z&Docminy;=ecgL4uxRN={!QZVO{{iuF6_+=%<6lqH#O(RWp%D6Z;rh$SRlvK>``)- z<>$6L|H>AB>#SU(zj~(Ow3bOPuCMrJx9LakSGS2b4_hDk;JMk}qxtrZ8y3H>JYL}b zkazWZX;o{n(V-pbR}{Hg727^}ik*4`oW$+AD9IeQX)Khm_)ptlHChlZzZ%S}UDQ zofqEp|9n#HEXNtM`&Z^W%v$F2t>)7NA2#j9=hggX&J=mb;Be6Io7&GBt0g>LswP~W zN11=gm#V+2KJJxuQ&oMT;ICCelVyag>?(FdgnbiHIN+zACsZ+Wdx(I;`ihjV>SahEh(e1=iKXNrMusNS*Uj)G_w0j;x1M-M(b z`z87NZ-b;JjqT48`OK$WHhQ|uz9Q_b@UkF%{p7P}>#|NJ-qu-KF?EiU#xDDtN`+Pa z{6|z@9dYVBS@-Gk;=Sj@Z?D}u-|S0!+`>DKxpO^UUN4b5y*Z_E!}`@I;r!04w;$WKt5wzA&YpHR*JioJy*}NE z8o3TW(>K^<6?Yx&&QIC4!5~xNK;e$}V(tG7^3PxX;CTAa?CMKq&Z|Gih>6XK+}_7^ z{{Er2xjn@X7yo#|b^ere#CnmXxf}obXGZL;2$--hYEt^#69Et8H2Djn_bW_Eo%Fb+ z;z{UgrL!mEeXqMPU7PY?+oi)oHb1i8>$2rpu_(`*Yb~LtXyCcoKiz1z^x?qEngVwg zv7O#w0nQC2 z5B`+TS*@=km)g|G0Qwfu!g z`|dhFy%72(aN?%*Z5qbc(w1C}sNeDP?)3S0YVXt*{rUO)zOVWIU(eF^e}D7vXuiv!b&w-t5 z&(6(h|0%ws`oJV{U0I8lcUS#=aqa8t{cA3CFqa>3^jWz7p+aci z?SmWzd#Aim^56RB{%H*>xq~0tb6+ppdEvL^`|o?!Zb+Nh;Uvett>VY~V_*I4{hhk6 zUTQ9zKJAX)&F1U&-TYyze=auA`*ieC^VL`Vuk9Zh?o)d8bIFp|3m?r=Dt!E_G<(XU zv--Z99acO&e~80p?ZcmM0vOIp<*G;9&JodkwC&55Eu#C+U64B4xu3)1S)l!bFRhmY zGdJE14R%V}ynRWMyZg2)1#{ir1TWW?z4hdM)u~xBst@03RjeP&)oHes%EizwoN1)^x*N3wbO0{mr(TdO1iy4Ia(=s-;=#ha)eF{d(>uQ)d)iJj4;d59 zb<)LNr^{|9tbc{2j?1U+@f<$Se^>mi zU-+|3l`ef`v?xy@PcnC@naACp8hr$rDfM($HtZng_nb%zE_c3v8n_kyEATwrb_m*hDEsq5Q+TvwWR=%LNsJ+ADjS6@iw zMtRtsN&Vq-!#qw&L~7>T($bY2oKNk#KMQ>m&0zhcb8tse`O!J&R3;poVeMm}Q4o1T zyVx@F>)9tiI2V6vh+uQR6L}Ek7B$PR;jZ-PTj;A@vg1&v_>Q&~`JP6P!G!>F0sB%U&F)vz7>S zFh1kCFI)cak=KDm%n}K6UpP9St7;9n!#~+UFlokn)#|1zoS)U#zAUO*e^sGd*9*0WLu+?W)MVMmBFuB6`s|MF6AX8kaU5~bWS{B9p~$tN>|ouu9)ah| zecVx|n{Vu{7Tol_S^CzEz;8?MuT)_=?JihURIS82*?rf6<3&17?+jiW?(h}`X?!ekGE7RH1%62#LJ(aoXKT1=QGQ^X)~*=ADs!- zPraBe*>o?{(x6+xFk)8t;u~w*ro}uszJ88s-e%F&;t7#PduHjG2q~CMzS_5@cUJ~e zf6_Ml8MtfgfcgvWE^|{2#fH{kf{J+=Yy`g;z_jL~@k0*<^JnPu7%OI5blH|tH zmoh82wocxXd9s=S<<=98b-{ta3wbvE2v<^0p^MWs)VEf8j`dp%pdW4buUj+Zwa zga!BM8(7^eb$wF&?Zq7q0fr1~wbRbeUDo#ac(ugKo|^FF<}C5JDAvD!bY17OP80fa zT6%2*)okB(DJBu^gYTNkPdY!%L81iXzy}ozi zF`b6TOD^-NKWa%S*nG<)eb)h>zNjaXSJlqldmo)Dc_(`MmuC}d?lR5gIW+a^)5(sW zUS|8Q1Sw>FGZ0Xf^jdFf<{-b1>rjzRllkAjg6-2M|GqI*VcCsU)A*P}eEDaszM90b zYq@0Aoju)>+c`rLmBrq5wH{Oxcd1B8v9xRuCX(Obbw5H&ki{vbSvwd-Q zYqtEl`f71>{JV8)gcoU^W%?`W~tMEMv<#PDByY_$MJvr4HZyL;zo&GW^Qd0NEq?dZB1{v)}W-?LvCi%C`@`nsO9>CZ=gpCaeFI0swKZMEp0e#h|a0f||!^*Q+7B&!5Ji0$a_+A?v{ z$KI)ZpOVh>n^rvF?rmBBS!?c%zK-OY12!+DcU5LMEE9;^*mUSiNB+7%e}4C8yEM+F z2(#^L-rc9OFlc6x;<-QdO}>}; zXUWGK{bn#ape?Fr*|l1VS21SG`(%@*zf5_vE~UR+_c&;V;+nQU)1~5!dJ?v@+je}G zOboqbpVfC^ubKIUZ@*1XKmYmj`{r;5=hcQa$%bYV0fx(Two^9EuU{W%sr^^{9Cw|7-F`kh@#u@Y*Rr20sWJ^{yPL5% zbpONppP7ul2bWhKWSq0@i1OFAjBKBo+bio`SA6#S+1)#9y_?emUrpJ#wOcbxE!C{0 z-DPhspC-&z-TePvuBk`wGT*Qm-UXHi8hTsL=Wm#CqWs<@Zl(Qx>)Cog=U)Gux506e zUR1AP+JWRyhWhFaKi}H_ZQmz#Tt;v54Bj2h!D1T^yQjG|h-~7jQ)Ha9R(PJJwAX8? zG;cPmY0thTdOrW3m6{FOyK?dG`?ddy%Cq0zz8brUfBXJI&Wy%tZmFgpMV;>*uatT& zt)7$@t+Z;{BNs!B9xL}r`5LNaJxuSPvejJ|dz5Pb`*qv4CEKstwA4GD^?FisZkOzX z69@X2E-MaV*s++K6X}YalSUyuFnL9rs>WY!CWk%cY?uwO}JFQmy&#+KeVCP!< z`d|LC!!FCY50oDz*?SyXds%z`&PTc8as^H|H|*H7%#%;JeEP%f#Z!By z@t7=C*>Y#{Va+oOS8)2dTL!Z)VPdr0JayfkJw?_#Kh0jP|8lx@RMpKJ*}gyii}${o zTIKq;YfFz5>jKxsQ7mQox!FJ8Exua4J3c?BjD>;f|gLpv+2)`c>WYVyX~tH z9ULAQ%(Ao3S90}1V+pPV&WmzdUxnrQw`b1yKlA&+Et&t-=bp@6+B@ydN*Qj8m|nga zhDnwIrGbkIAI<4*T;BAmFHPt5GzLY#wwn=q7hdIAyrYIqyz1RS5q=#puOrtcZ$A^P z7`Keapfz74JK#^dwdutOoqemO?<~Hc-dUGwzI>`sqV>UDq2;kM>t1BZO$(SYGn6ZQ z#{SgTCodMb9LcUI2lU-k2sSD$(Q>TNQ?n|?Z8 zj1X*5NdK^DZN!obx8jpCm`!t}6xJ0m9#0Ma5V+s?Q^pEyhY!O1lckSLDm3}d;m~*G z>BCiDrr$f5lcab&eeX45Z{z|J&{eJP&w^zSTneUEXtu6if`?f2$*S@jmvhiB7 z?#8yfEygcH4|pWKm*neWFFeWXeS}wt!IJ%W#|dtOgXjE(r!Elsqq_7CORJ1>TFS{a z$GETjV0+(t(zGUo@eI?#&s`qUKiQNX?by6Xs)qFoQ;_k5Nt+u!pQ<#A`)T_q?Hd2p zZ}PW#G&r7Lol_lq(XoNaqv-r9j;9|dz3<6AWVW|;xh|KQ`>`ieG+{kF2g5e>jcm*Xa5mb-sUG>twn!Gnb#B+@0> z%$#GK4<2yT$#G*~jY-mVO-+iM&vnn5xkO4j__nC#zLhiXJ>h4GRg`YIv1e1^TPe|v zpN-eWS1Q|wM@&3olgd;0Wxn#M<)2Jj{#`C&*Glrtw!A4l!FYwOq4FK602EV<1PP;kr2_v-@o zZQ9THjdJD$1#6y}dA{_*oS>*BZXD}%)~oVgO20MJV$Gkqb;|2QB`4p{Drem+?x1g> zy(R2U`rUPxRpp+Fn{X$clJ9yRR}=ef*W7hshK}=cPI~sKPwO|?oYbVFlfTo{F0<1~ zRB-!^`FoiAdI1@J@uuxZ z1$w?({ZaZM%gwNVmgBMHGoRAeaA{cd#z)lkq=&xPvFYrYwl6siE1VuJ;?#=G@at%C zDZeQBT4d(J&w1aEnG~G4+cF#vcF#sGmn3}?%$`ApMG7tb?ldHyKz;o zz>V_k2`=*HRfS82~A zfBG%_o5OIVEA9NzxrJe>${|s*wpvox8IG;yiRE5y$I|-EPbpcLF(ISCx@m*en-eXK zp#hv6&O(>@0@4qD%x4O`{kBR>HcM>dhAWXi^YjW8{C4Cp>MUVNp2xKyBFWoxn_bl2 z`mTbmX-%$s{U+{{=6qDpW!CDyw0h$SwNhT2Wb>I5pLVI_FyC0*ZNY8C|6^kh+u}6} z>a0d*l{`3SbYwT~H?MJP^N0%E&i`(DxoGN@^FNQIF71*%zj4izOBa1OryS$bTc~$% z$!AINb1Y9=b_!LO-)avn|9$7=!hS84kL!0HNxX7wT3{uouJF&Qk_PQb_4$&DuVjBt zIj6Q-fBwCx+j5p{{aWz&_1)gDcc=Cq@1K7C{ax_Jv&6VxXTJGY|N8TE#a|=8-?6< zo!znWvlQ=a-v7-KtCxNXDf?2JJLg`+j06AfW_0-E_e*`$ylTNV*YtMB-)G(XcTK73 zH*jX(S2gvVu>AClKQec!rt0X5{?e~xJK!3h<}~&DNB&&@uDl7wYBlaDe7bXaN*C5v zZTzt={>$#x+z*|06;J*}Uus?JA76QC=d6~@vnm$*xIUe@(V1My7Nen3AZ=}NhtFx! z1!M0$XKrlqI{xHP!_-K>nH<_`N944R@pDErEh)Um^SWsL%xj_1=4L|6R%G~m%AchD zzv0mDLz3RrnU{6;*8S@#~s$(sjh9-9$T_QdP6 zYXOHvfk%|KHILHtqW3=Mm}|V^zV9rF?cW=xz4u)I!Aiwn;TKFaG8gW?mHN&&G?RCV!PFP` zs{YEI2{-rF)wT~|Qof_&derj!TdUjB^V^&Eh$Ts+D9)TeOQ(>C->ey+4EWF`Ppx`9$&rtTYC2DcN)8jAAf#*jye3ugr3p!_0;)@x+C)x{`~z~HFxcv zU!8M0rs>VSGLL7nw|wo-zwLX&JwIK%=>Gky_+QoE+wFJO{{HoL>Altc-zIynaIX1Y z@$&HM@M`(meOpR?e^OtcSO4eXRC}qojRynR)?9E@S*CEiX&bxB^+&23y?hrgn`K&Z z^~0hwYajSzZfd^w-tKQ}RjiKBnR!t`X}kJdTHIKpd=6yVWiLOwAn?CSZAQ`(H}8Y* zr`2BO^yMoMUN9%;rPK8{+q?A~9n^AzZMC0e-_=pPDsVkvLDt-5FAUGW4b3>VF+z@G zX=0RMkKg65+{RKX^xt(}6mniDGviC~UCF$U);}uGr4)S#+wlE~k@r>gdsBL4R-dt7 zl4KQhX>B3v>3eoAsa!{vS-5N7n>@3!Kx1cjt@J~U&)d(0F>5xi*V?hZZj*@b!&J%n z&(`R?6x!Ixy8mI?X0M$_ei|Cgi`FD_O{+iP!SRk;^ndJUgC_MP(GtY#fq!npN2ME{POB>>*gr0^qi%cI}i7})P;QexlDWGCGjhrye>+s`nt7JmEZ4B zs*0S=e>+lD`Gw-yIkmwdIoH`GoKD7!9Vbq*W*!pM&o7bo3wVlr6z_Mq1s$+>+ci)M2k zS+-W>&MSkoed}8G>B)G9O|9MOZp0j!7nTwy9QWYZW{byXqaQKLg+0kXC6=J}Ed8UK z`L)z(Uq9E!N&T#J{orC|?7*4>|e1&6bEX9}@15K~!Jk`>pJVUdRXb{L zNNJlSAOERjd#cMdU&wUY`@Z-{iQI==H`Z1K&CIrmxur5+>T5i^#YvI*4Jt|xir!uO zb}IGY`6oiBFHU-K;qa;t=gSQihFBkc*3;ju_EB+08~3gDXEBjC=KDzUpS+O99rk0+ z*Evm-`4#&P_V!zvIPA`m&MyvwC9WJk4A=C>pFG&NXDN&IS;P< zoF?Gl-PqLqn|*Phz>oTqLMz3tbe`bS*`mz(=$e^&q4tW|iv?7kMtMDc*0r%%M=UNc z`(cA^b)yT%XVqt7{0({id~F}!J-sBhF6l+sxtDW`>RyY4xCF$+srq^b`XmN9E8Tq1 z>MZW@Mociot;qb+FN6Q=2ix2P2lxS?c_d9X@ z?)4$leskrzoe>g!ctTZD`Bl@3M>=JACnmn2l3~Px$37 zd}6eH%^n$Z3$2|j68EpAo$6ORwSH&o?iHM&qJKWOahGXFXR>UL@CoJH_VlIctm@j= zFYg|g{yxu+%X5DDi{3{2;NEpcib_`&9%QaEb-K97_=C)ybU&*NwTFBERGzr}Duna( z>@HsM$BFfl_Dh3aleUe`E# z-qFzUpJ+5k;)@B!8E@sgXHU`D#>DqySL^D(xAgiX+H^!FTVE31bYyZ8E@#xNu5TqSF>9f=s&vngO4`fQIta5zW7(Ky}uP2{x$%ZqR-sGH^rtW%&#pwU8jr|Y%yO^Rfo^CqVE5ai9ZKm^+X#spo zA~$qdU-x`wGW+bZ4_uc1tAuvlWU1&X$vDWwZuIR1-`+oIQzi+^FTH&_VEVNii?Y7) z@ywB&c-gQc1726xb zzt_0hoXCH$`t%@_}+f&PITcy4pdGPo{ zv3~1@=RQ9KiX|5OHJZ_^wf1LN*0!k(&AG^?w&XyyZM22UFz9YaKUixVn;s# zBuA_9fX7kI3QvZjvlVw_7cw8xzW7b>`v;53N=LK`b~kF=;9i++7wNNjfl$iL;1gNF ze0=6I|77wtS}HShU3Z*u0dWv0ppIGi&3)_cj{-FW=T>V&h* zRaf*H%zs>KyxODIZoG@lNGI(2ttoyD2|b*_#`9R%gtVK#Y3!ffqZ2)E=5w=s>wLCe zky|(=Ams0qyRJUZ95Ze&XJEZ~IAwCxY(3qHyrMsiCTu?Z_-(<4Xa3u+W+>id-Ez_W z?Bi3Q-)tAzl7%2SMWLf3I7B6kp z{H-19Uij(jPwmxLE^+>|^!J{-uIZbcyZ_vIx^couvHg3tZrbM7&p)Tzqx#L`rfrFz zrT%a(yjXHDMCPTU=od@ZboJ?^~r^EE%c#c$sR9S7%)1xgDi&5Vh#$lc&|@l8SF zt<)*9sT*JX@|gSi0$aiM?Yodx2|yF?~-$vIz}(ElmT#yVCn zQg(amyGeYxd8)=Hf=xZMlM7C7%ap#oJzr5KsN0}XF6y|>9~L8q!x?$<67!Az99)+$ zqxPlu3wN>m3!*n(C^#*w@asXp_x=SntG|@y{Wqu+-N?qXHLA{U*0qz#4*8l{jw?T^ zPs`C#ZSOuTq4+#QKdJEZzes=GIJUKgZU%`=+w=Y$UU%+(mu|zdytKBv2WCh_FLm1g zck})&_itn!y&3n#r?NG-W5%mp{zYbIi#eYsCv`RL-u}1t9rv%d^Z&AjxqR0Cdp`gF zm-v~QtY*&NWa=2!`sA^O=|)GManEXRoA_;!+}VsLo4n7~U+l_Xd2rq?pWBfYwifGT zBn+N=oe$(swCd*Am)26dw6f~G%^cMgr$0RWm%h4)|K%%|cTS(hH?M7qIk91jibBH_ zcE&eVKWklYeSZA$OWZ5BD*Y+xEC*-RsZLAok-cW|L@4xWkeco%d;XVSZ-+^x=vH!d zJy`7||FztuV20nqt^BbYS+yL4RlFGG?H3y)c71U-6^gVrt#y78uj=;8AJ^3Yh*@Wv~GL&{2Zw^ZO#Vx0BspdrKgz;9`Rd;7 z>BPl#pBZPwm;-UHMHCY6=Y2 zlZ4KjUAdu?yOJ~TXwX}Rr=osWCf<^HkyIdNXxMyOHIk>VV)<49-l->6AIjgc#?Hv~ z<*gqpqUPB#3$cr>Zj!t8=6GBybN4CMJ}nVT7nYEdk#ToRHVOV~4{vqa_1ya>8;7^$ z$xU0b1-0faJ=rp~#r5l@2VYl4gbFX1{y93LyK=%}^PDT&WyAvK7`(GL_(Uuv zt!GCje|TxPoJXcfVujYcpx)?}A@4qiZAiIk8OQHld#&}5k&l#c>5q06B}N%}`Rfmx zEzI{`-B-6wT1rG9qlDjX@7DeC9XScCZ-2Fwo!lC-_5V7(hxevVp7lTQn@jTkzc(Mg z$x!S1u)uB>llOHt-vejZ40)S#Yr4bqpX*KI)>!C2|7yNRWvk+WtU#_OKf?>zEp=HI z{P~kvzI{ch?>Xa&>oM*Z>h4{+Z|bt=;gOgbzZPttpZdgTd*%j}7mFGT84oN<&kg9b z6k73yL2ga)>$FX>+WSo>(-u{$L{9S z^6yN2Hf3Vs=TB#^`rG||@>#9*=?UYn2U>+M)_(Lz|8nr$9kZ|;I~lE_>Vl`r)9Q~* zE8n%4arylPvzN-XO*vQ)c=+0)Y-WQCmaae8LY+1Q?6f~%%b%vKv{ruWee((Ne-2FY z*4A^maxf>=v1#G2?1SBc$*LtLGY!h(R(ERNQ8;t%Thsmf9Tyn$&#)=G)DG_2KdPlfP=?mxsuTC{1wq#+P99*|lP#y0wd@YmsxtvZojM z3*V@{oag?AdQ=U?x{L0N{m`-a@Z-&e z^Rz5h1n!JZZ#>Tw5Ppr*kX1o>rL%W><^CS=xNXz3{`u(|FRN6~PB~fc4}z%^_4 z-tA&dd8JxFLtjOo(iEfp(XZKC~Q(Vuz>`9GbNPz72wCb&f=T7dMbF##E zs=AxpI{|4+R?XeXr~Ys;-50i>y7kfO_x@8-CSUi;=Kgi2>{*O@?Sy1KTVbYktY<|w zo=$rCX?Oqn3DX$5rYaikuuqfJIIQ^Xm+|@(&vlRPo;Xl+K}uh7flaj6@q>b^%a@yU z2D64FZLU%ij-8srU*&(@mFe!Tv{+@O)VsYOwS<;zQQ?s{YR>!D_Hy;oMrP;3|29OW zi~s-0?G@F|sc(l*4u>Aa_;FGu_jF-K_$y zn5ZhJMHjx4Zw!?=*tJY|&SB}PO^=WD3%ppsX8*V1>#w`74{bQ;`8cTflZCOkk+*S9Qh)b*G zEw9Bg4x^T>TJ?;ZPJGLI-E>~+?g90yE1DYu*0cR~u5Ov3Bej6@;P&9jSxa<38g<*U zu3{}w+m-gXZQE6W;(UqDd2x$77-~)}P7#S*a;M-ckCuRjs56QOx%gHoeTKI6Zg7Yw;2UQAQS5AH~1d3#-1YFkn>SKE@< zXB~@{2r163^7wm0nm2vNg@)=g;-2YKW?h`imMFfcvMIMSuEBugz|?k^hN=3UmtB<_ zrsZ^P{T0_#wLxq9{kM0l*Z>yjxBPRs5HJ}Ww( z_}b<5j+XcbYaXsRXJmSUxx3}q?q_K|UtRpSzrSAhW>wLeDcpOfKW<5LZwV>jR9@5O%mpDqvI_e7>_ z&(3^wL7`R6WAVf$mFXh(TfYAG|FAwWXzSU$oY0*U&+n9By0O*IlL| zwj$jiu!_7+~)~lY(I5z)9PsKHb z^5_<>@9!A0Mcyv`=J8e9pnL-RI#sJ%s!{suFBKfQ`mp9~e_Pgu)6ahibRAQxtyEl} zW0~%_H29qMYV#KEHCo(-?s@GcS4)?x8Sa?e$a)~;kCnWh`}Msqyq5cC-I?)kv-+}c zm#q!_-mG5nHDG;v`3hHQo!D!W;!?S{aNM2iEr0z-;hpvMCyKvTt=(6$``fB-8}nZ9 zdB6AH@`eBH$0wIgKXHEiMPIXU^ZF!PYrlN2Vj2F!Z9bi*p|^^ec>e!UwanphlAnKn z!|&u>?wdC+zIHxZc252Nzt8`N8im_AtJ zZTv7{-K?!jix0I(#XdW7IH_LkOHS3@iH7nkx-_S(O)%fB+3I}5e^Kv3>0rG>hv)e$ zxKOgN#YQIh`*nH!%3Tk&xp>|td)V{%vdXP=ik8l(`(o?cVYg`c=4o28R;s(|W)y7o z@79}CSj)$gJWD6^*VKRY9r9E9I}+?Tz1EqAzPNj=>&cBRb%7muj}IB%bULIu_uMV_ zb2j2h%(M9nmAfOeKbSjpd~e{F-@UmY+D`YM{sbI}Bq@Ak*D9jKv=wvqxj(FgWd|B--A@{ zE?2SD3};_HC03#0j_}sM_xrHe&FRa+)K*=9AxK`f!Q<+Pvl8q{TH4WEK*mbht#qkfd$yK8FXFus$E_XInH8c1@lj&BOhx0=hM7)vQ z*(@Bjj+Ot~?6)}!PB*47EIeTQN6l4ZNpt(0ZJWLcoI78;JmSzbyD4kAjXtQQYHfJy zsOax;Q*Bj?^;F^Wx|;)^7B7|y&-c0_B>Q%DQV4sR^>rJ|5}xJvZ~ywcmEGTb`u3Mo zcl`c(Yy0Wh-`7MrE$eGPw#LDKi_l$-rHd~oMqO3Tj@xmp;O~+RE;9NNJKwc5Y6PyJoWl6{bUr=DT&yf63B)AVq9b8N=J^jhpr6PAvbs`B%Tq z=Vd!LeauLn?6c;$@1-_Px22M^lDN*Fu-+0Nf5MPw;oWCv{WCMxUi&`TD_AslTD#MV zqKkJPdZh(Tn>clv+&h-MmR+Vfdn*>6VpiQ<(X93<>HYV4!at+A!**QDeap2aNN}~c zpT>+Mi_Wl1hYQ-)m!^7s`Sv#~%gOf>>xDfkJDrYCI{o|i7o{Elx;zfM|K8DV#O`Fa zj8AI?&#JtRtVd_he+u*F{+^Yo{b}A(&v_MD6~Uddy#HyZ9U7H((*2xmg}Cq?ZT|3zN@^MLymNu{d_*8Zh?=l7Nf7{X(lPQ^$L6KZ*5HW zs-Mc-W7#6Mc$50cWMu;$pR%idIty+K1x=ZFOH8+_S1K;gBjo_c3Py)6y)~C!O%a$0$16!)CtCp>Pqy}t0J_Rg)#t+#fi zD&Dv*>2&hC%-rH2$>0L7m@O6Q*@`|gJ08}&J-oG*=NZ!h9v;(xYlj5Zdz?1XT~fNQ ze}n4+dj)ZeCz|Rr0yj&lT{`;afobK1f6vY3e>~_~Ucx3n*Q`uS#y58FE}4$Ur#RQ| z(|DigeqC!~>+zivH(Wb@ZL`^?U&i*YUt}yj;OJw!Z?U{%KkK<`p{F^^i*GODPdhYo z1+PfcewEYl=dW&wcE8CgaC(cJ{bISGp3Q5x=SHhlcq!f7x;e~U>g3cCso;gVtw*1_ z6h&X)J|3Z%5?y0sz)`$a`J9NKfqiXUbv>8Br>hd{AAh;ZSbf_loS}c`#;JSu-(UXo zqRZ8^XETa#?DCaaTA{c}%3|8_%#b6RzrOnKyWQ+9>c z$!8aR-M&sX>VBBkE%ELE<)1IFiJv_s{-=YfOJ~9U{UJq}idkP&UR}CzDZX^x#Eq_F7@CSaq=IeUt2HHx+GBk`Q$a;_r~&JZ}oQ9ED09gaWCUc z$h0-OvyMyN_l}*_!=8QJ?$tJ9rPzmDLctG{4?5pjp|W7v=k29kQ}`E8k+Q$U&-gI; z-=Vtr@(VK=zGa?gaEVCYSlpGwuyBWmm*wg+YbI*QY?<%MUfLeJ($$=+X_fUdmg3y! z_u}VG+!D0d|Jc;j?%3xS18vvD-n}qaVZ(-qt8HD6zsC8A*(_45F)n_w{;1@4>+Hho zf&V0|R!=gNn0!ix?QNOUL|I{%i4r_~VS0R>b?Zy=AFCd8GQD4@qkU!)hsN))q{A<7 zoOsI=EI4Pr=biPc%$fX>$1Q%mcq@9fOYSgZ?Gq~wjPRLquwJj@TrYJn= zzNg^OyeU`sMuy(;KOd$fiCxP(RqeLzU_q~H>*UP*`Hwa>ecARb>)lVzd8(_AEB@rV zE8O4n^AF2b(`>!ou8IiQef=?sD z#UyN}=+>4CX5rkk>V59)y21PKy-;Iz_O*)*lTU8?bLw^O?WrMJ0#grm9Tf4}y})Ya zD)lVugg8Er*L%|V?z^bDIVu4x|U>h|0!H2;k+)nMC+z! z`HlT?jXdHPE2=K-DZen$>}S-@tvW&-tBxEyZXwGZ$`If~O1+Ir1&QE2$yJ?@x zpJelNfee?m{oGUB-(IQK>f7)p*_ic-Zsd|lPPT6>VjSh1Cwa|v3VOXwZNe;77tqC3Jr3<#KQ7d5RJ9_NmI+d!QXN6cdW}Xal%$RPW zq5Y8C|6;ksjE5^#^xe+g39wv!C2|7<-uxKmNDtYq0rgxttD9- zHIMgRJAGQKCsbixb(KNo(WulDTCydL-+j(no>f=dKWElQ4&NlFd0h$@=07n=D%}*k z=KG>H9&P@(vmEi)Qf!~u%+%D0d3#e#Ci%eZw>!1U#O$SnBioC+bFH{$^6IY7DOj^R z_`mOjv&C!Q+FI@A@XYR8Vmf;vo6OHm&z=Vxv-H0EmoQ6jMYQS1B(28}TE5Jb)LkRm zbTHWRt_FSKMVOyZ+JGQMc9S=4$F|+XPQ+o7H zm0{CegWh#+OQ+pmvyty-?KU+Ti*GIFw#G*|K4&hOv)DUgQ&zUyxrGyqYV@Z#eD<4j zrd{aj4I!O9x!k#Da_0zUd2Y3`TEpwda{TtyRqWS_4bwZMni6L%dT=<*G41p1we7oa z^Y5(m(2Qf*x+%tl`=<1_`)ZSw>))MI6@PqbV!(xV86-|vkrh@Hj{_U7u zr<-<&A(DUIjHDDsc59t#{?l4p_;;L8Il8w+R>N^}_NG(O2AUtOQaJN}CF;0HJkW0Q zl>H+53fyGe}OcHZfJmH*D|CAv8R+RIMV+D-bt%f~(PCx^26LKX4mD#cma5?2jt zFU)1Q=E-%l&a-*aB!>xSL{x;YFZyG{dC*zp#`@X8aTj<}F8_c~PnkCCjrmT^&czCYsrN+#? zeIfcGD%uQr`=h@b|L**3|NfGoi0HOC;TFz02?0CLPrT`2x2`&@^cCX?v-XIRn25Sx zKUa3KYxGJllvo$?A$4=in}gf;ZBW_B(sw5O@m7XQ>aD7iCJG(;wPtpnq0{MCyWc76 z#Vyn{i!(a>#i6d0Y2B2|_LqGoJ-B0KE+Z}eq2Ts3Uu>QA zM)xA|fC>iofE>TYFShpL&nU9m2v@s)Rol4l zn$bBCpDBy)yyM)MEpuAo6jSBr!#BkOnbVwisfb@V`KU@@Sx0aol{%bjxSOy_a{J{9KuHJi^3|VfB%2T}S@T z1znC0>i#FFS7)i(lwOx^&pW#O-u(Vcj?vve8!r|MPJj73VRDL#^+%>%uG)9E@Gei; z^zp&YQ|(U4&%TB3#Xr2 zV3u-1`ohsU9m~Ys|8(v&U!a!dxWJ45VC)R7^^&U%{P(bbYHs2G7g6qdYSE+=vzWH$ z4qp?$I#&0^Qm}$Opzf%N@ z8$(xZIXGqhl4)w|wLTsHn3cNW|>*nsoN^@z>E?rOl^LTXXBdRe#+FpWF}Y zPr7jQ;EFXbADfCgFS&g2v*DkWr?2W7DFhfA)aG)X_IG-DD9gt!X7!qT309g9TBEdm zvHaWArr3ly$-`JhAcYX3{m$9_V=vjd~}h%d)$IZo4A_tEW4X` zqN+c9mC{=9ux$a)6M7Os?3h&krcCW3R zw94}EDz;T8wmkdbyHGVk+~}~Swd=EaZHrwK<;yIuJ*wh8qN``BaDQ&_;#T(X8`gIE z7wqO}Y*ntA{_O9@HuWXhS?-2glpeM{dA@N~&h^D6Yb>@L=U-$~5XcXi8!<0POiqZqvI_ePuuC1y@^O zS@4$IM$0a~_P*D9A))e>dgnw<^;_m#-F8;EL ztCnP+vhV*x%hI0n^*x^O|o;8glnsw$B8k` zHlF1cYrHLf$xWxM7uI2Cz4iXOJkna!`^i~vZC+D2yNS`kqy}*}cfV-%+^08hI|;4- z^RaW?E*X{7JKT9~W;gEr^P0L-{h{fpJKp!)CSS~+cq0G#wFxKx?ATj1?dd(qyG!?c zNISo`Ucl@~tmpOnn?K)(nBcxDC1&Yq|AVzAb9`i{vd3=n^)_pLHEZS)<@JFER}N_8 z_G(#l~zxqw% zbOFn2nMtBu+R|S(2i2cZtCT!+qUv*-GcrlO*8P&x zq(!p#8T2;VaI{s0SQi~i$k;beuX5R8wuigb(%Bt~?UpGRzq$M5mRfU`KqXh|)aF%v zbFNO^cj>|&XQdDQsfOx*r+-qMCe0*pRlcoS<@p3d=c&I-uDD9Ro)K)?s?~63bMdo{ z>IYQQ^&~cE=Pl#ewXN#aHiuBDEsOf!1#O5>mr<=x&v-hObDD}zqO9yxyR@wiYB!ZW zFS>C0^bISY4fZKMv$>Cd+L(I3NKG|=qDktvDH;iB(hA}01-H-XP_{`FkKcdd%Ynq} z7gn#*YrTA7&YoWOmE7U4rzXs74NWpx@chxG`{qh|${yQV^*2ql(%iki!QYTq=-Gt1 z(hEHE z^H`(&&7&ys&Q^h79|@JKR(9%IenE!MUVPr%^YOyzkLx)vnqTTrJZ*H$==#Nv#xmJF z=FgX_Cw|&^ZL3oL)DKo}(h`4`OjMlJzf-F&N=ff;zQ0xj+1CbbcZAQcv|mw&jaU2*-%V8v`+6-JAJ6HToWD&rWnyQ8v%1(zgN~WmaT)qfd(4^4Vs{vS z{nrpRVZ+zEoom0|TDW7UNB69$L0qQ`nJoFlJ_=cPT*_s#db{a{$L5fPt_uNVGf7eYhKK0V5R#@bk z@fyE3{}c6V^_hYVCqH0ia}#v={QUD{58;((H-3+>5w7~QIO_g}P{syRw`EuKSie2n zJNNF%YtvrLpTpOp;irAYCgJ$zuPrjaR(XH_ra$Lp|1Z}a*`LHyHa|)^yoGC0xZc9; z+ls7(u1*sw7rnMqUL)kAsz-s$8sGRdjXBnRmBBxcvE0989rQK!f@pVP3wuJnQjU@C z$ycq<5`Rsc%lXwprfQaSblMw6)uRTxbL93(o)-R9Fm2r>?aRelg}s7yy73EYlq*>h zufCGz@A-UPJ;{5?gqhX0MUtCxwI<}Qw{?6T_;useP`S0IKXFf8v-80;#+|%Krc0=&hFoz&+6&?L5o%&G1{rN-8N+HDY3_2PrN@CB=y8> z*2KvVzX^R^8*;6$UP$lJJwXG7@Pyk{b_uaZj!#QDy>C&=NpWYT#Lq6V5;h^f1u8}L zI(@$x<^*x;`Zu4m;QTJW^x4+mN3)KdUj9{G!?jLqM&tjRPNE!Z96!jYCVe9{=VV9Ffl4M$ zDNQEfAlqFhEu)T$#rzM?aq;)`xyG^R==X%01$$=1IxdyF^)TT~LLkShuT3&xXJ^d6 zI{VXFKL@+E^UGRhcWwF|cH-kF9)IDCh=#YP+hgJzIqv%Eo3fTQGafi_YR?2=X9=<7 z2qhnx*Ow=p@b;7ldG*+)Q)Srdu-aYYC+%9jUVMdJ!~vpe`3FI-Dax?8_WM+ z{PpeHul?7y@B3T$-f2emo=}?wj(p$Zi`3V~y)4(dqIf2%Or*)`-2BHonq_=#+mFi5 zabCJJ_tAtc;-=<~ z!fkAxQ;z&=eiZl2T$%rJ&xGG!Y(nFLkBR=jUvR9esLHXgLw#nRVDq+X`T8GLIn3i% z{1;Qm92;rf^XqegEYA~4hSfDi ze?PqZvis%5Ti4_N{*~TzQ+8U4?ds1RN{5-7gp<8^9$OfFjx=B}DG^%Sy~phDHj5L7 z!e89*eO4}bqjrPaw=3882ig32d6VJ8k~P*{Ha#cKY5g;NXrhqu%P3X4G~(Dn$(y%J zV=wMht_VD(@_%(RlZ1ZpRL(fTU)rLwGiN68DJAA_uJQGqZEAihw<7$b4Qs9#Q;oGf z_j=cN>hgi7G+n&nMdt=b=6I&o`Q~^QA96F(n|q?EAn5<$%+#Iw_5bXe(~mgHJSzXo zzj%h4<}UuI>6z^N0(b22Jm0WP<+K6=`|_=~BV*^r)=t`AchK_0++5EZo3$@&m+d~V zXQh+(&Bux}mU6v2qUezvxa#WWVwuhSnzIU6g@Zmny-+iA@A1jY9;~^Q z9H%Q;yh*HE_v`MR8j-M2TwX6X_k2W-qar`^{c}sTxSo|awCrRKop6seBCOEG_+lqx z%Sr!Dci+XZFz_b64!pIly+S)TU~&HfS5EhAZ|CXWwv)EK331MC)_(kNwPP;Z_LG6v zC(2G(xUt%WQOvK2nXRFPtKM)+e9HRwsj^n#S`055F1ck!vOjfhVtstLkjHjU*p8pa z#ShK-qNk^qxVAd)8(${-k2iAXe*S#U+h3hvU$BpZ|NWmY_b&(A zRhiqK-LHP5hVNWoi+EATwe@GsD-xfJ{|Qq#Q5k3OWpj-f@BOn|XRX?P+c!JEQuRgf z-!u25Cxm@s+5hly`p@i{&Z7Q5^Ol^wxA~pl$I|kdoAzrg(y7^2d7;hP@Hhp-(K{31{wQ C5D>?el)lp6L;N+KP z9PN%@T-`(z)!lx~K=FT%c zwV=X3%XhlA$`96^{mIMK{$H_s`+w5zEsT;4@;TF1$v!^!Snj8+ud8U^xwe-AskYBf zak5#;Hcps&T>9es0{-P&cFJ4{a#$2$5tv*Xo-t>Occi*`C7YXuql>%iytBJ53i;Si zJ8|dVgoFj3*_dlN44fNI@>V@*XZSfacM+4zD(~n=Iju_%Nb}8}wB1BYj8*XIU-2CA z+}OInT=rW*%1*iLTh}gFo>Bc;<}<+a8T5 z)v2RP)0yX4o&+@yMancRnqb6S-F5ur>cyzsv-fQQz zI)1jVH7+)7X5oEaIq$SX^P9zfGFL-$R_r`n^5Qes_I1HodyjlOH2c8cTl>WRD*TlR ziwR0yZOeD^ck7&MGnd_y_$AuZl>6eb#N9cI*Y5qL8?xt8VBZJrZ5A&|TP8A|s=u|s z>=y6QRT|bJX?FtVsr;EX{agf(Nz%0j*(GNSY?dFF>YBIaa+Y|hb7Z`_uFaynd4?M$ zW7X1rcf5AxVU2#8^07rv-*4e6&AP^!Er)rpG5l$n=#y|s@cW{FsYPxfzN+P056LtA zQ~1$%dyf`xll(!}Gvc8@D zvw+Uk{R{n+>R!zczAb55< z#EkP4Q$m;9*GYo+hD+DyzpSI>FNQtnFLid@GV zty()yb~#K`U7;=^VeD{H% zUAOAtnhl)?7yfLG@}A`0Gb>Wvmeqag;;XHOzU_P8UNdoIwOq8yZmr+q7q)LrtwKxR zaCc8PI{EET%HxGnM@6pNd`MHCf9r^*?CR_;BZaV!7yt2vK6BF351Hk@vTl}!cJ{BI zV$es0@0k5)&r+6C(F@-HeC7rC~$*7Fhjzxnpp zd%06i)y=+R8&mPgk^Pu-isPXg!J}RJ!gX_la#JolWfc}>C1n>0maNz$A)CdxEx_Gw z+bqe$SG?kDCvH^Sv{t8Y*6YaqYYey&9(NtcSiGt--bGoh`{t8FRq_rU+dT{0m&E0s zdff2gz@y{ULORS^en}c~{i(SJ?#e5DXWA#RbHiJ`#WPq_5{o9gN;a5rhznKUsyyM=2ta}`DbqQx4w9W^-$0`<7tNl zZwKGFvZQbOj#qo$yhnw@_Fz zUfNV+Vt!{!a=zv2zuZ5ABy=toc7`mjTli&iu*#=34u9sRt8V|$et+hyhKKIWhT^;0 z-f*iHZpoPtYA2gH#p3zRj|}g!ZtACR`uI@s3Qw2O%Z6-s8Gg1{8P8*{Zav&F<-^(g zuafN!W!290b~|Qly5qNtvETj1H_*-VH&j$cP(b|## literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_00/c0ff9e1763539780232a21f31f9e5cbab6fa0f b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_00/c0ff9e1763539780232a21f31f9e5cbab6fa0f new file mode 100644 index 0000000000000000000000000000000000000000..ecd85f9ff0d260c35bed6ad18e471c0f90030634 GIT binary patch literal 33900 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 HW1A`fjvwM6 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_29/f16b61e6a00d05b2f65a285f6959f5a8d7be5c b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_29/f16b61e6a00d05b2f65a285f6959f5a8d7be5c new file mode 100644 index 0000000000000000000000000000000000000000..1c52d8df55e514dcc036f868254e3507a0d2fca9 GIT binary patch literal 563 zcmbZtwD7{`BMP^-7&I!6_d z@81o(f7z$yB7;*N{5~ISdUs3XV(SN&ujD>`P<>0^kCE$3@2nMFi}XZ~hQ?}(u6nrR z%az_4@jL!bR!v*4al*jYRd{~-;l0TV-}yW*QU2+twRFvLhn}mtUn~r7RIgaKNc}AT z!--#Bel_~hSt-_=*kFC!)Hq~W>`S|8J44@`Joxrd^Y+Ad+*~ngM^|pq+9M_>{pw#u z)_K!8Huopzdk)U|XzKd5(@A6`RL5!eNWG>`|On*|F-#(A0=2;rdv7PTci8?R{{HK87VG>*slIw)5XDV z*3S-FWv~8vY;WH0i;6dm?&!DI87tQa&+0V&mOag`eEG}`H>I{dTI~Jbud!TKYQnF( dGt<`pyDRb3KH$nex0t)PD?9fw2yT6n2LR-?8(#nb literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_2b/1eabca7b3e03736b8790e6add592d43cb21dba b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_2b/1eabca7b3e03736b8790e6add592d43cb21dba new file mode 100644 index 0000000000000000000000000000000000000000..1959f319985b02f83a3e814df0173bca59922b05 GIT binary patch literal 22607 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_2b/af68b97df934871eba609659167a117ed0ac4d b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_2b/af68b97df934871eba609659167a117ed0ac4d new file mode 100644 index 0000000000000000000000000000000000000000..551977da1d13b7e0d655a2fd37f18e19f3e3fbdb GIT binary patch literal 438 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e+2fNUASz` zo8AkHimkpyZ}Sb%_A3Z_`)(Gesj9C1dX|)9-{RM4c9)9F-n#PYgWJoVvd`a7cd`i> zH|*1A`?Y_|jE9%YBac6S|H z(dln0J3|XY3)}KM-Lmqu4y%0I$@jJ}tD5JIpL^^1nu?RT&zBeR=uW#?#UblvYpxU4 z{dvW)=zS&EW?NSN|JZfowSlbb&z-EQA2s;8_5E};brTd^r>C09`7+$v_R0bPB%;%9 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_2d/5376e1611ce08ae9727bc7bec20366028434bf b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_2d/5376e1611ce08ae9727bc7bec20366028434bf new file mode 100644 index 0000000000000000000000000000000000000000..099022102ac73209753514de054fe5e6c5c15b59 GIT binary patch literal 438 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e+2fNUASz` zo8AkHimkpyZ}Sb%_A3Z_`)(Gesj9C1dX^Not}m0#Eu;T$f8SkV{9yIV+$($R-ZLHH zS@6EQ@t?kK+K(@>*FOH-y=T&QKf%(f?_#-Yyu)%@SDZYf?Wudp`%L16YUwNIx5sNH z9Fu3=ts366$2Vn?yhEI8A@<*EGL-^?Q`QS^2mJ*5x^R+H@U$)E(^Y#Vz4+F?D9IyD)?5%U59lo0Qhh literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_2e/ed528f0ebf225098fc203ea4d4524b341c63e0 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_2e/ed528f0ebf225098fc203ea4d4524b341c63e0 new file mode 100644 index 0000000000000000000000000000000000000000..3eaa4282771d29829800bfeb414acadd52a6f2ae GIT binary patch literal 239 zcmbD$?D8|gbLW~@ zdg^HT=`yX}wfI8G`AyeTGQZAz(B%E2LgiY;vj4ZZcH_S}t4YH!nj zUv7Rbe?|J6|L?^t!BgX>@S3j9pM2#x&%L+yM$7JOxOpQ+G3(Rg1~Y~oEAy8D03P&u An*aa+ literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_31/8792eb732b9d2320a20ef07c42ee876282a292 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_31/8792eb732b9d2320a20ef07c42ee876282a292 new file mode 100644 index 0000000000000000000000000000000000000000..a9288cce15bc9ba0d6924c2543d5d1387aabc677 GIT binary patch literal 23376 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��ԭ��'��=Z�y��om��B��B�U"��r *�C(P�RY� 1"r�Yт#I�%� �%�F��"a��(�Jap�k���.KK`�:+`��f5 {���D���8'i�B��7d"a�� +rNnY 총vx-ʚUY��m����Uܤ1��9�e;.X�k�slW��[�s��Ơ����o��,���5�Jr�V7�v�NGw ���Eb�x��Ys�9�0ܦ�1<�2k>��.zc�u���GY*}����eNYߔ$����<��r�����Zj���VS�nfl��{hu�hg���&����<��A�ȺU^:?1F���C?�8���u������fz�^uEz���@��v����ؒ��Lz�\FKȁ���J�[�c���u]J]�,����U(n�f�.�x񸟉�>W66?��l��+y �����`���o#�z8M����֍�Ҕy���y���rx�=ܛ|*�q�m?|�of�;�wb�����P�1��vA��{Y_�uhJD(5�����. ���?��@ \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_41/8cde9134db65b95b566d5bd2d84cdcccb17476 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_41/8cde9134db65b95b566d5bd2d84cdcccb17476 new file mode 100644 index 0000000000000000000000000000000000000000..86f8006d261e17d2eed4052cabed7a2f8c166c8f GIT binary patch literal 438 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+eSQvs;<%zTB+Rip3>vyMO+E>cZS1 z>2P11`EPvGnGY{_uX+5ryi)c3T%}iE-s#?on7-x)SK#EC;gh1KOrLRh!FRJ2^Yixy z9q6&=D)U~)QaSsCihaYakO}egqNYranl>vrW5U|-3DeJg2=U*yEGO8t`;@4@|I`ne z)7Bb)+jC^qj#U=U+f|fJ&8H>`{f=q>X0g?lEpPeaL+N&Vo^1OZY}qDuI>)w!Z}B{7 zvDHT_LmunKTfIIzXV3o%*Egjz`WF4U(=@3!jj?Ne?s6nVgLKRw8`Y zcF~LWTAz879L(u6gCrc@BaBRva267PhKP!aPvn(_E$Swv1gO^tf*vm zcR#&!T64}V3!UBW{&F)<{r#I?qH{OL;n0EH)Rt?ndlwt*+SdD7B&PZ4RIbne#P*eB zN!FyzowYSTOlD%Nn*X}%hc0CA(m3xMVeMJAi}f&nCXY{x(Y%DoX;pjYJQj-kQEIzU z%I&#Q3V*?(s5K`&B6(j%v@Ce)IKl3~45N^n--W6Vx-DH6{8EL1|I*br64QLQ1a-?Z za{Vb*(l9>#M{51`x*4fIUtY}rA#cY*LPmNT?H?kk;W6j?5rsh<_WQKs=_TnXZ z5C4U;wEtYRQ$AoLOXP|zX{*wDC$mmv*l{;?`|&f3Z>-Mbh3s|VYW?^?R!EJ z{TkU*CT+j5g74jmPn&Pt$@_amYq#_5`~TldeE!!^mCd;I^CdIkD^;BZ;xQ+KrhK09 zUqd|e=gms3W$Dhl=4$i5atz7ZI3c7Ylf|~n#ko*@ir9_G2g*Yd)D$MK>S>kO+7!xf zb>xvisn*qKk;AnOyRanb+oz8)GiIJy={Ub+ZDB;;F8!@Khn>|kw6d07KRG@8 zz~$W7j_nu!c`iMa>>kvTY9hY%qu&d)Zws0xmr8xtog^<)mAl&Q^uj&yQQ|f!O|IJ> zsJwT0y8YDVWp`Va1&Q^pnH0UPm0vm|--5B)LyX*OM8FKmLoXuW!Hhe#*)>r#^2vy5getYv+0DW*eqC?>ocuQ~vlJBX^M<=Y>V% z*>|hxE@yOZH@?JMadAVtgV<4t5N(56mg-rb4s0~56<<|yE&9#POpoV%6Ib_Id#3I> zbLf7O%$$Em7u=99xq4u;Z}e%^w1rdlF+4Au&U)iH$K#cUYi4uIdeQPQBx~)yyJ=fu ze-@rz9y{xl%i+F1mv3an+)dbV{Ki}{p&NqJ6l1bFr|ow=%&^B$IOcibtw}TT47MBH z3te@7orJ-mBtyFlmT&iBU-cvlOa8oR<@bj5c+^bR!&A;|5wct`Gxhi5*vqQx)nFwL+& zdS|1=&E1iPvwS4|Y_k8D9hP06w5h7DT;*2T(O90m%I-J$|2wknAZA$qr^=VQM1M zUWd7sE&6Ry9&WMHFgL&=%j;O%+1)qlv`hFG-9Du=m*K&VTzws%Urx6r=es29KUem$ zyLQcc4o}4g%WQ)@L#69kX8daxd^mV|38QL>GV|^Bs)Ur6x&3Ju4_!X(e&|s>=l914 z4;`x)eK%3e;(yzQXA_QpOgWLhRU+c!YY<^;_#C0{eYF z7Ye8x2-J~zv`C|C>k89#7K`^domjED)$e*l|KT%=wy#4kZ2pqwHfPp*yLZo<p zzxb8kl7qLyYD!J=^BE7`h*W>q+v#NM{zKj7=>OQqTl8WUyzo<+)axGmkLkhE?;SR^ z%n2freM{ut`U?c{Jv-!g!;dy!UPoKM2n_u7VK7D(8#yFiHIk&jGMYQI>NYncet0H&$N2KoRnJG+_HTm5(C)cg} YncDMyjb2WivVQ!Y)Bji#&mQyz0L|MDxBvhE literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_4f/a8943960e162443f8929eb57469d4167ca66ec b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_4f/a8943960e162443f8929eb57469d4167ca66ec new file mode 100644 index 00000000..53304277 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_4f/a8943960e162443f8929eb57469d4167ca66ec @@ -0,0 +1,3 @@ +x��A +�0�a�9���&m2� �`��h�iJ������ۏ��K%繁�C�"�҇H�P�8`�TQ��:;�Lf�*kEV��#K��0�W��c��Ĭ���w{� +��y��T�d�ۋ�\�t�~t}d��S*����:��;D��~����T�Ex}o���SM \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_50/223083ff69b33ac03bdc7290378c832ea0c7c1 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_50/223083ff69b33ac03bdc7290378c832ea0c7c1 new file mode 100644 index 0000000000000000000000000000000000000000..379fcfc5b1de54fc255404f6b8b83bf8c2b2e2c1 GIT binary patch literal 439 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e^>vNsKGgUA zG|Tn&Ia{60`>Q(B&rX?_yRNG?Ao$X!&t48`A?t(wl|AuX^{78NJ8PQWjrun?m7DVg zj2rgpv;Eq?WyZtH<&npqzyIWQ&)W6M%e&EAHtI!g6kVidyk2FihQ49D<4e=Ya@m&- zJ(lfvy0Z02Q1`rJrAHicwNB{!>z?w|^*(E8a^jly3GeiZRqFA<+g2`eecCmBxz`Vq z)7K=c{AAvwd`LK B+1vmC literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_64/1be4ec6cb5ff87be5946300e7c8d8129d79ed0 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_64/1be4ec6cb5ff87be5946300e7c8d8129d79ed0 new file mode 100644 index 0000000000000000000000000000000000000000..c692d816fc4fa58c469061575fb8b39a50390ae8 GIT binary patch literal 2034 zcmbb*!ca`&_~9z}Io*{5ZgoQtM4OI|zU zAX0n6&{AE0Lh(H1{7LF3l%KqoY-muiDyw_b%)`_8^4 z@?S3zqj!!=zhvcoI9K9)e^uALoGo8|oV>V^%g#b`6{F}@{%t|>my#0|Pj+{i7nE#? z%CtO@w)OC)>Mu_wYTmv7-|hINv+OE7cf#B<_TIGOS}YxH?SJrUMBM5PFY+I9FAqDI zer;vt=d_c8H$y)?sZ!?IyRiGwotECoDe1BjbsotHN>e_v%r?0``zq7)4~Ozst-NZm zOF*%@K{zzY+3i%3$8jYVUH+yojK`)dyi_;g2Dh1)>1&iuL?yX`EiN(+tFoO;f^ z+wK52d&R>A-w!bcKUh$iXn%U%V|m%DCxmsxHFtK{DwOF&Oiq1n%r={)VU_J1T`H=QFQtT`Z9HKuhbP!D+r1zhAtVy;*vfjjQOnY~4Eo{eL!07yPH|6!G)$ z#SFf0*Dfn|l|0GWD)KOI%PaARj;h|OZhmXrr!wf?S#kIKa{c(2d5`?_-~T;c*1uM7 zf5*kL$LeC|56Xtt2+qEH&40}%>nnf%)gPbno&CyO)+^_kJwJnMQe-RN1R)@_-jqTP`P|2&?R+WGsB5licQF(ui|50?+b zuXvkwpeb#Iq0j#xkKl@j9Eh3i}-uL{}?7TiFGTU;>ckS0r?LHe$_*tB^ z4*1#oX-%g2LcOW3%G#;VuW7ct+-UsqpBr1Am7To6tjQ%gqW@hb+PSogOH{vX+gF{D zbEk8U2;ZFfw|?i|tFUa{a{K7!)7!<>_a3<@w?FXI%oU{z$}it)sXG1ium94mj+@sy zEHuKUtTmR@DslD6mo>V3=XInlweP-hS!ZW(XE{(r!0zZ~+(7se8 zW>8|Ge78ZIx0)j*u*cDq>9YHV<(m95*_X-}a;5J*I&W>;mUj|6@9ml#vh1wRpSeBF zm+hr}zOm<;e#p6erKmAdW2yduop)0izgZrtcx7;3tx3%)(PC=U>ipe3X4>{;HMf?o z^f7sJ!oGLyv8%jo)jfAJ6&qy}B@Zoa%lK(+!gD~{_+Y8ra^23CY{lA-W0(EP>1I^c z5qsS1mhk@W(sLHqCQgiB^Y}PtCF?}85pPcLCq-J;BVyS*wQP6p8 z6tno>w&CG~;~!H_q;HkD@q~YIT9ZWQw~g_8cr+}I zusCuw#pq^-*W)hZQ`#*(yS!eM^nSHCBXenU9ILH&e%g_hKi^%h)B8Cw@Q-xt{~65} z8df-;G%xGpJmf9PEVk&|T(kMwmDPURt98%cO1*SVPuV{$=+VO3 ztYydEX58UV_t-zjO6qUdS^@$ zEEVo7(VUuEEMW(a-YRoQaCYsRg$zYaHke;>4| zyvDfWgFdg_z6aG@yZd&`I^{4qWkTqWwmdPWc=tySd*)x=G{<|{#N*-HPfUCBYF7L) Vf%8&_pP2@IzWV!3e80sZE&$Cz{@MTl literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_68/abcc86d48e0c5a111fe14043a8b3a66744a068 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_68/abcc86d48e0c5a111fe14043a8b3a66744a068 new file mode 100644 index 0000000000000000000000000000000000000000..16fcf404c6d0ea84c07f99741fe9fe0ed17f30cf GIT binary patch literal 699 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_76/feaea69ce727c0a345f7b18c4183cecf2f7b25 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_76/feaea69ce727c0a345f7b18c4183cecf2f7b25 new file mode 100644 index 0000000000000000000000000000000000000000..ce58970fb2e1f7760a344163d909f3de76ba1a89 GIT binary patch literal 438 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e+2fNefY(d z&6jWAt3~rdmfgQN|3*&pwcHyFrmDL3>seBceT!eG*|%=pr@a^(tF6^bOk`-{%I{->+NR zAXzW+W?BsAC$ov3bqrfqD(tt}s-eDB$MpCGh3NGP`g0$yoLA#}b6Jwt+`HE z_vaPIqW6_tn{8S7|6|vU*9Nk#KX54Py-z9HTxl`k1BV&s$?N*Y)pPAi zr|()7wTkbwjX&#!g}-?_bjJ@v@3lXg3OHy_A; zb1izC#)9DIk>+cArE(W{y{s@=)bA|SBGcdTx}0nG0oy9}ITpXW&YyD(xMTP0*UtKy zAFXq~t*Sl3`*#ojlc42mCrxxcfB)oW{?#7pNnvh2OtsmoKW*4_`nPSu;;f>lV#NpI8@)X(5#8g2S0=ESIb*;4a+u`OQWx`HO$F zvZgMz71DdUD3U+)=Goa>SA5&P{C7$2f19%piw!r&-r?DnFH~_ktWxps`7<+b-&a># zD|30CNdvNQWc#L=ikM) z;gGKOyljp->yIy&J9;dBe#lt8g|BeGdssw3)D*5TiD`$=ROg-3dwX`#>d@~6FV6o+ zTbIzYW`l;IvA*VhnKfpwJ1_Lku{Y;R_nRv^L3iJ#}4M3~Uwv literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_8b/afd1a2ee8e8e8ac49fb4d8d99747ab7fdc493e b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_8b/afd1a2ee8e8e8ac49fb4d8d99747ab7fdc493e new file mode 100644 index 0000000000000000000000000000000000000000..689c0b89e5cf32992830c8f3ba47fcc28c74985d GIT binary patch literal 560 zcmb*iXXGF`k_%n>Cw7M%`9#c-o8J-W*k@Q4te)! zb#>m{V*jYXsG^36KUz22uyeWvOH&>t)1{bhxUC$&TZ8CfrVEI#TGvvKv=Q;9ol56)&P)lrn} z`?p9wcJ}77n)MNJ_vbwhK6yUY$WQy1Y=_nr!6N}~2`r`@t>U#apIb7Qot&%3m|veF z|9|S-SHaQq4qTs~?3a6;dEeXS16ysA#q*Z$-@(B0A>-^76Q0XPJ-s_;if6IvW@qbt z_^GtMx^pN0;S(~~O=Zq-O)7Ie*=)3A@1?cBcqMZfTfP`{_e=`WN=-bcZhOl2k*-zp zzs_HGuiCD#zO3$|dM;DkMSQi$-m^LLdA#p-iq>he3a|&JtK@F~KArvRI=%TpF8o{L zFMAnA2*3JqN20q@=I58)KZ6$(`L+!ua6v@gK7j1w{wHNSu-Xworo}^DgKx)wj&Btrb7;`%-0I>;1XDdr$6{ W7CvO9Y{Twa`aF5oUk07<$1?z<#tRSt literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_8b/b7e4dfde4b0db7ad663154383587a5bd522f7b b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_8b/b7e4dfde4b0db7ad663154383587a5bd522f7b new file mode 100644 index 0000000000000000000000000000000000000000..a25dbdb488d43fa783bf0252369a7ef2864b18a3 GIT binary patch literal 22967 zcmbXnDVJBFHGH~NhoNKEW?zbrKgx19VWO4IV>nt zJUV5@^7L<)K3ni#E&jIf`<$0EZGW2?|K9R@pS^1R$-4P7t6SU^n8dqoh8|tD#KC39 z&Ye4Fg7D8wbBnM0Dt}$Q?*D&zXukT3`K9OfZccb1%YOaehS%{w@2)*Q{a$H$&BLv` z&R$$``4iix6_>y7J!tTP_t?FRn#*55$Nf!vQ2m~*X1{8Kn)Cm;=6rjK_rK?#o&0}u z=zFypJbNGP%D?x)Z?^LOx2(16jnCC@>k@x8*YVyN{Qf`Cs3CbUEo`Vd3K9-yhCIf0U~^P|hyRf9<+8|NdJyG}hVe z)vf!N@V5W2DdV;8_R6Q~@&$NiANKoxEIZcZ_w#+?JjdoPus>D5t<36W$?>`WW^KR5 z8+BIi-&xa--62^TQ>7{@w|u*Kd;7ijdtx4}HQg;MkhOwzTxAIBem zw4zka@%{#yE8`+1x5?|pYY5YgZM{;$n01=~O0llR~McH3yp`46X7m0x17S%33w zTg^3IfPyN2X_GZPG z!tHy)t!}P2_se?v>X`n<_Ve0bqxOc_uQV;wzG^D_O#Z^{_uKdCe~y-GGyd{F@si}P z+_H;vdKCH2ZkulXQ}TS#*}`?N&E1pV=l@gtrarr=wC!Jo(HrdxzgpjyT347_e0KX+ zdH#LB`@I)UN}ODMKd;zJKi|8T??m^)?kAsL$2GXg7X8}6nYcN(lkem~$&+)dH#)wZ z{{2<&<5w3C7VZtar!PN+|Mk|lr6vzl^3wnA`TA{TblCPi@|)vsni(_&E^gM`+LZJ! z_G{C`>zTmmG z`JSBI)A;3Y_Nq-Q`NH?wfAdvel_~uoqFiS6LbiP`=d#7_*}d_F4!`wt@spYFeklv+ zm3D>i)snvPPiOUn=Vz1@lq2@WDvkGa3#alo9Ihud+?5W^j8wR7F?++HOUC^8Q)JJv7W0Nl; z{|x3Y-1_%g%c>2A@4g)HUmaK7)EZur>~{Hb+Urj>5d-K$+ir^iGe*f$)T%TR=-h5%@t+Ois0yI9AYL!$@dC!ver+K!f4r@$D zmX<*J7p4UY`$boOR^WbQ8Fpz4qxA(h^S|F-RyrnV?68}mSKIYd<^N@kIg5=Wn&ws7 z=Fa;P==k68!1^lBM>8)jXFmRV<%IQBJ1@E}tiRe_;OATwdO`Wz=NAv+52d^;|J9@$ z7q;WpzQmbEF1AhCa-7-gtDYbHvO6W$r=?YpSN+AI9F@a2_q9#FSh4Hxs^jmYFEgxL zzy5R06z@Zs?8zshg)Xg{Zm)BF`N0>rf5t60<#A&?!_YC~XhwmdM-wCOfmPzonGQ$T z`DG&GzwSDlD15tv|`q=$xH4R z6jcd7(vp3-JCVPy<<#V+KV}KWsT!gtwmisb+$?`Ny(Y3if$1m)e#%+SxGp&lw{8pKzEV;eXH1~n-er|4 zDRDLB`U<;)%a%0g7fbN|(JAPE!ZT-Lc4SPy)W6K+uFx&X^WF637%Z>b%->a}e|h?5 z7PV!eH%>?;*fY0Jaa^Qbc`0XWf@Ghoq*|L)v@%zny}4vz25aUD;hKA|*d~87saV%| z(6VFs`HQDE%N7>%PWsa_H{#0tJ=3n6^}V~MFLmRFdDIQ@_P;F;c0N6R&*@D3zJt7p zo2_Rt&X^o=;F(mkz&o!Sn;1%NO%}6%wL(X|?e9$f)pE~&?B>pyytAxB^a6j|+trRm z^ohyCQ;;yf1({N2PS+~8duf8vzsN$f|rG9fkT^67EhRMI$%);l&+1R`>|F@ZI@$U2kCBJefiRm5t`sjtz z?)Rm)YV-6T3QqQ2Bzt33`urPj`R1u?*qHCI!YA7O_!sN<#sY^XtEkk7_AJ?0qxGOX zkHP%JiVMr+O&-LVxz~I2`Lpo4=U5(d>)*ZQ2mk)|&n)-XUlzT}_bXdKL!QTa*>tYk zK{b2ZV%OZypI7$LRD#bh^yVw=Qij9}`6X zmo}1zFKgzdP2J-WHfOpFcUh0C0rQH_E%}X+D@~nWmPT3aS$Sf|iH-GYll`R|+G&fUTMAf&a)?&$j0e$whpr?hSKGO89g-e0tT?b`yyu&c&8 zThn-&PilTCoHQ}!tmJ?PQ?{BH?YRqrjG?Y959(S+>Z z=>;*3r>`D;wYFbD(rwe*?)1s~vi=2YOwTS__wn9auVe|^58q6q4~Qiki-~jiEnWO4 z$uI3wTx!qf3Bflcz7&;zymy6@NBVH{k<6x5GoL=Tvbd$2|JY|~E!*xMF44zFHu6?J zFuhyU(h_$saPCKk=XaNxb3MpdBs?vzMB^X#n~w)nOK$U@6xp(6R=Nyx*i|{cPM4Rx zd*t4TGhW-nWu>C4#ulJ-UFP@fo)>m+*#E}pzhLL;S<(Bcu;xSCgG2WYEZ&g$i;<7x zfxk$3<+S=;n~FUAe zhD`=c)_rT*{nD)t1s!8QHTU2@j)w<@7fdl+U@$%1fid6R+Hl>@)hRillIfWE(Z|^p6MQykt-Y7vo0Yh)AwuDZe9#)6-7P_PH}%BuNLLlc z@3-75Fv(8)y=>@d-hl0V)BkVdvC1ho5%HVD=4;a{Tn%WSwTUSRXSdlNoxoX!!S*|okGk3X!HOCTveyw}DVUMp}&;#qN zk0l@t zHWxKKUdAPu@g{WD)(f?N_mtduAY!{-Zm!I`ri}~g(_Xcf7#zR)Deh_e+pX>X`zkhl ze{KJNd;I?|{n-x6-8zCsZCc-QH29wT|KDUV=Wme7GK&fI|Mv3=SYBDyDf{?;PM3a5 zeb0=olWp6%>VF-N|NnFU{Z6jnf`4D?_1KOtJtQ)r{-69alZotA7Y;2q5UgDhX8H9& z*1J`#)hrd)B#-$AwFtWU&p67mi)Z=n+4pY!|NeiSV>IXIwG*FQ`4He`v#>#z>;B)R z8Nze?9%=M-vx_^eQvMNf{_0OVY1Ky-d`p@q+8=1*u)e;+s&J~r=KF^k_0DyRT%0#2 zG%`~0)W+hIB0qUbr)Vsnr}abbnsBv=i*xLB<-fYecFTRf?^vYKV6E?UHCLdpvM>2{ z`qH`6wf5QY#6~??=9o~!;aDM{9HO$(uy6Z~>ixIX#1%Xq+yuN8xD-C%L1Yg;> z@!&@`!7sOa-d)(dMQ{$+1Qh{3{{+DmcNb1d?LYol=;+oIvuUYwrtZ(|I9BF=Ui4|y zPs{Tcq@NzX>-P5S!Oe?nU)0{ zxi*_k)=%yCz8dtGL#g}eyVZN`{Z94I&z<;b^}Qfj?!D<>*Obh;{`K;jb+_kkHZE9v z<9)gOj)x}cSBxGUFMnHlF);nhZ=|8Bok zdks!;P5bJr(YyJHg0pCvlB3SEzk6IWCbaN~J~ni^*Z(%9x?Njm$2m2aYbbY}I%IHrrQ6T;$Cnb<7M1MS`|Wl8@BXa2XAk~c zyK%;ml@VK>P0llV#vi+3_2Jka-W@Got``+HAIn>#Gs}`QJN0U{p7wIX$2@Yo`c}Qn z=-qX3$$U#WeA!j?I;V2m{(oL>p}c?B zrkzd=`)nbW?kn^4%omj%8dFwZUHmF3BByqB#tl&ew+XJ9zaPGMy6j8k?Fkca*OvDL z{^QSKK9O?#Q4AmZX^WVTv!d0%&b4A)c-eYtZ-CeG@VSCcC3Y+QeX^tGuQzHt*|Gk$ zV$I3?xb9+A;kDot7=1`xfT)y=rmLaL%|P z&&Qo{>EyLjGqStST~m5Je?$9GCc7ZZZ-=Jo%5vXTtYeb;9Hx_Cw&NFj;wN)l{Hb+$jab;a zw~b{iiR&7@#iwu1vbj6y=gK**g{yeD-@%Hn3jIW5Z{oPU=2LgLx67zTC& z^$qvR)6e?8JsK$b&f$aYnHQfvo0oKcEfjcRe$4Uk!Nsrmca=!-|CMVo`?R26E&agx z8-g!H7hi8pp6FM8`u9}kGj&sEKMj3idBJGgZHuKbIUA-GZB8g|JG0=_?sqY{wslr_ zy*J-?vgflsthZ;9-KO{#c0&JZ?q7ec<9*F) z{rob9TBNFO7-vdta`cs>_baF=VrO)gSPA5 zO(^{lC$UBC{sT?F{3ptLqIqh&=N)``Z`YaoCQA*^FWwYpqJ6r0#-pOGg#oMfwPdVa zqa68c`J>~H+We-RJN@<;m%`dlIfrHB*K)|OuXwE;b2`k-tanZIlgcA6g6>PVTW_7F zXZpIPoH_f@%BOQ@OFYkT*;&9er|*Nhpx2$*Q@c!!WEG}8^T;#qvYQ`vQ}*qm0x_1> z%g;72tjps0>lkq0S=yODBEP?9etzzooqT$x#JTgXn+}-=MOC~u@(Ysv$!+m(Cfh4b zUJZdMzb|H7+WaV4(OIeDpVVRXDY~i3vaI(HuM{omQB`*hY!cRpOWUj*>BDpG{+BmP zHZD9jdq?v|r3TN!8iuc(n@>)CbYIbr|MQ>UqLYM-vj2;PvZhP&ofX)wRQtkW#nY>s z47r(-6WJJrcb$2)sQPNDK~eghgD)3-+u*1*(>&$)o_pWV3vLqLtFS~y>5Jz+ll5AH zpY9b-f2Ech5@O=Bb!QUK&Ib$hMdjCXl%{_8aoFK`r|84-e2Zl|jSHjJg!}WAZ}?(* zX6EFHvrc@L37@#>km93{Zn}2XzUS^)h8m_NCd`~a%l-wfSN zI?DqrkH|fEuz*GV&AE&JP99A3{gE_LT>7|msX*)UzgmnFgKEA@w7={WoVnE2%wU6| zul0^_tG%B5eyjfd{E;O0T6Rj^hROfVCQHtqQ@G!`{{5P%9*kS}1rG|9WXyWw(1 zhvlv%X`#tBDU0@$8+|&j7OQAy67_o1=^GL{`W*_-d`x89nvJd;72C~pMrMiNGxef_ z3T_u(cdWS-pt2kxqGs`~ zPpZ4HqSsC6FO$kf-<_{mgxy%O?QYuKtN-{+!g9vc!_(FH9ILdv*UW8`KG2uKWX$QL zm%4@1mX+t&<)Nn?BB`YUaI zDEIHm?3E$mkM6tcwaZxS0a{Uutl?I*-=MuFTjA{hF z%`lp2{A#VeMcv-rj$WM~Ps-kI-0JjEl}9^%gW#UbnZ^!Ur?Smfo;G6(>3mb^|LI=d zi;@Xnsza9~G#pIvI6cpM*~7ToFEk6>|4e0B-(%pXBDOL7<<517*5YInU()8Jd#-{glE**3k8mk*79_5IbvC(pOWzX`7V^ytL`o3E!9YZS|$_c>-U zYu(9n4kr$7jlRQtWqRgsktIvKB@EcQ4YbRTv*cY&=g^k+R$5oUf5XA0Rk2``!wbgk zQQty(4prY#_z_`sM3FtXv8*HOl;8H|1*WG~1y0f3uOV_{%KeWkjV>yw2*|kvixmd@ zUY8Af5!oMy7F_gsR8VhFA_UL%(fe%m&+59?J_z zbeewYbJmx>i)J!CZKlV*_}#F-?xN6p&6`6%LM_tZ6QeDXM=cfA7ziz4G zXQFSeP6(fC^IY)G;51uL8rgvb8VM&^h*l9_T<$_NO>N~E^ zwf30e)@XW1(s|{IXAT#5P1ai6b5-xiJGxD7rJIfB(k?+?-`ayh+)5&fS6Y}?P2My~ zD)i-%-EK#goD^*3O0GX$x0L<%_bZ2FO#4c%>--g2SE^=ncTUV~X6BdKVa4hOpJ&@f zNORAPIDPX>G=Hi^SHRtEkB%v^>*r`%*dFdQePe2w(7uxI_KdvE6W-04w$!ByhE{OkrNUL3CSx_)Ju*y)4`yA!uxPAqsiTcA;Pt)7d^)r(5&K0R5nLw3U6 zxtuIq$vkNf>xw#xXU?4-!6@Oqckj3FW;r4+rzHL7?3~vgEV$9{<`dfthBU#$2f{L6 z{Qc$s|7*AU{(qPE*L^%v-SU3}&*6igx$SEE{@1nt|M#z3T~I)}?cL@(e8m528wE|ilb0P$nIO%+(=54V{_%*Z3%;D`m~XS; z@ea+2HTT~fd~mFw-6HwWmmg8wM;|=gl5ueNRrl`o`;(Y+8}B-&3CnEqFcX=TQ=4nG z(=km&!eTXV(Xkm5pKZVR?B(`lvx9#H8%HI4u4-G#(a!(oY4kxJR@N1{kCZ=7EEPJp zCVNrYFB`?AN&OM;6LKwV#g^O=_YQh@Qk;8h0mt?T?&&$)TRSG^rg5LHImLb>NR9Q1 zAmf6outov)cbj7SMmzymkXDf-1@^1xp1wm=YJ=8>E>k>&rdw!tlZpw>}5cD zp}@=vw)bZebwg^7NK5jtiE1dRU-_xGsPFJ{8|l?o?&sy!eO7+rox+|cI8kbLe(sTZ zo-$Q8GXCuP@X_e}p->|&KZS)8&+z;CU;T7Yus`_dE4_7ToTqbxG?JP%+?qR9Kb82h zW~I3D^kj>#f&~Yr)bYkhN!zmPK37zv^(fUM%^x}$X3r z2-$j$Nld!l)PvCGNydU9Q}7GaLTP99CGm z@Sw8YjvLi0pLFe=c#PT0*zaAv=ggS&hT`-Ym$`&E7i`JwUAX8(n$Pk2lWJ}?emhPw z&+gP0D^od@eB#`h&yP|L{af>m>3RG!^-wmsqrXga51ovky!MHdb#S5d0}q+yT|9Em z4v$@&x_5dS8(HjKHofc>$9!>~klU_C5>Zz+h|2g~7gOZAbL`f}SI4g1nzAz4&c^bA zSziABO~Ly9r)#e~*Wc*(`0Sx`JL|X2O`h@G;JdHl?JYCa1Oh%-{(9=)bnn`YeSd3K zrRR!#J0-jOt*B_8_^auv@LS9-_5lsp6q()x#G?631@dZUC~VW%lU{`CCO|~_2UbNPS*V2)c-kMc-pZj zCh;{>F1Wu9yz%eM9o58TZ;FmBNf6cfe_=)FzksxxkAF$)PF~1p6tTMElgobI7>5;1 zeaSxz4xN5*c!zQCHMZJIlGNQszkY7~>4mhu0u+FkiB=|7tbt`wvGyA9M{4&(F5r70c32Ui_C!Ffwu+}Xq3P43f=zz5#1N=1s)99=e6PO&^w z-EMZnUv{C6`XN&W^-7DbB`hn2cPv_T`f;9I=cL6BnV$}YeCM!b=7 zY(Lc}Q`ZXSF+bul^|r8ll=yWimt(_)-Ng@X z%RUvE*?+I}^y$+34`=M})^wURw?$rQ3tOu8y`_a;wq290O!rqhwDA6#mw}C+3InY# z*$25gFLCUeV?Af15hY9vBvWi74&(D6CSXBVwAfV1tUF-$)F{rY-euA@ z4-!KT7Ow1*VXe4dZ+NdfNB8K$Q;atz$hYSl>J-|sAtAhX#W@?lM!pNO-uDfb_*AS_ zQf1w}V(EhECO+j$7w+E7Hg(dnj%bl<*C($^t<6qOW=?Z|^E>)v>U`F^|0|9Z*{dL&eVN6zP9qo-vwQjm$Ncz432Bgp7^l6|Blpk zsU(Z``j>tW!~(zAn`{tipA^)nkoD&Bo_ovra|91{_>_7U#k9^abu~R zyz^DZZUM%(F$H|b<~}^bP;{xmlz+m8K5dZ&n-)3!_xm!brPOoDlPOYHBhn)yG_Ssh zzQC%YDu0frph}ss+^OZqUww^-r;awapME%V+oY3nif12Rocp)v<%P3Wvrf-h$f0|c zOZAL|ov{CjUs2jFCl(gnTE9I_R?Dcav(I|UfuL`l>P+WP35lkvU z33Xz@9{<;b&Xb?^?d>J^PtDPpJSScXggMt-OPcWE(@a)|Gg`6+8jd!vPRO(yp3cx| zS^7xEa!o*!vX13JyDG_2&DxV?7TyI5_gDP%_{q+4{%up$pWQLVr^2q5ENpw>>GzG} zV5rB%mae3TH_N^YJL@03UUi^XJ?deQ)3L8UNm?^Q+dCA}wmQDi(lLxr->`JXuima^ zi!D#zs&3g^;IUl&VX<4`mrHt?#qm8K#hlkZ-#%mQ{eMsW!%Q^~x|~umW0}Z4!P;#a zkJS#1&U=ZsrfQWfx3M~?blxVFYvzZAfjJvW>b|u%x@~s+_~AT=QQ) zejF*3vF!SXr;n~EKEK!Ka_J3U$)qj9r@c<(H%}9a+~TPm?ZdQ_|5?xtzHG_G`RCqr z|IzcXo%&VdT3Yq%)vQ0fqt7bd{Xg$eQi`1Aq0Kc%7gXl(FX3bN3GES8^xcsEJmsa7 zt%4~}NT9B1T<)VyJ$%yB%?ef9Cbo(OZB&4(+zy~%xiQXpNM1RsoDN7B{`LG znw#C<&5NZjy<8c>e=2d~LD#e(>9^-OD}GNmDLOwrK0+=f@`Vfk4`!n zT3I^w8%=d6)O2rdU8B42w$8qVZ_iCx|B3(UT;W~)(qB(G?hLFC)Kz{UJoB8tvQ0|y zs(IYk@>}&8E!A?DoG@1T$sh1E=&wk4)y7?n;lBmBAKqVCf8(gNs3zOuN~hFn<_RHI zY!fG18G3gawLM+2Rz1E(S^4%>bIzB`guVT4S2w-sn)m%^EXVTO=ihGKR{n6I$qu%Y z`g_iwaH!sPFJ+_5t_{;}RHb|ozTK-(`@1MD;BmC!%(>pvA{x~{=PeD9Th8!O=Y~mD z@1u@6eSyAmI~QhNo8!LqvebQf+tsE$T)d&rSAFM6^ypg8F#Eil=LEk0Hh*ua{`#Yv zB6Q`CrRtwA@|q7CyG0g+e%Yjz9N0Q_=htlAPjfvhoGV)m!WTU_t|`B-Yi+}gI*S_f z`7CTlV%`3UJuCUWMq~eBZ_5Q;D)aSa%uFWo=JdoaFm+{mYB@Pu?Rx3UAA6ObT|ea~ z{7RcA)IpKCbWzL7pbxvVZZvP{=Hl_rTRWRm`y&56!87ri4mp3S)r`YsjQQ=Z^!I(s zHw{*OR-$vY?7P&njm|$JjTC%k^!~omF7>~rnmPB~Bjda$hcgmy1O+W~l5Hq^uwxTn zWAUEVJ*F}X?x=3p$zho;o8?j#FemzjhipGjS=F?K-yg<=Ynd+HsP_1UY{dz`{-Q}w z9a{f-h|8IC@mS9Kva~ot;?>fOtaF>z<(x4q-k9N;n{{T2lFot`qOHPH0v^{Me%kn> zamzEKE(wmDTTl9Ie-)d$Mc!MvQOxF=jY5}h@4WptJ{wIb+xS#+x%$SklAyZ>Uv9Yj z&ToHWm*&)O@zd`q+!E)UR2dh2`qgczgKKx%m;HXX#9(Gkp!s3%WqyZ!-@GmG|9t<6 zsiEBUoT9YK*;;K$di~t;r!BmLZpaAcZ?c_g^x)VZwf!y^9lkxYEM6$9;`HDIo2(mS z5&ILhz?y!ESP?VFrHuu_He!oex!t(LTsVX(F;3{9PM7O`Q=7I z;%3d@Sw|*rZZqR~xODYu&Uxk$kE8kgy!?wNH=b|vIM8GME%1YodYw{!S=rVAn@X#T zD^uPcmUf>I$@os~rT4A|7tgB_&Rh4K`oOKN8^$R0@apIA!dso&TY`kFI7_*XObV=x z=UP1T?Bb5XB96sZy#4O2^t)0Lu;kKaq4QiPd)|imXeahAoyxY~ujJ(e(eZ=wB+$2R{IvdV@&7UbQFxG@A)`flAElxwPf)#r|ZrqawqOP-y+pl zkrAu8VAJBi3;VchEs_>+xUcjRY52bEE-&}l(6`U_zBRF#>TR%VhRq6*4l9$KoEvUI zsj_v~FLL!;A6fO7mor1Sk7=O{Yt|)^iK!P-6^p!V&TGHC)aCalk||H_s_FOt+m{!0 zO*$H|d7Imz7ngnS)cjuB(fdj}U`NE-urJH_3z=60+~ex&-`>yQ#eCFvgA%@2v?@iuU zq7=w_(Mn_$cW0x5e3SRxO>7!pnCDB&&ryE6()RC^INmsshdSRrKUXo^;qxxk!YSg- zI{&`;@8xZcEd$b8bd6X|*X?ksRLRlvU2y!$oHIAHvXtga1y{#kmQ4~px$k7HR@J6w z8`jJyR$sNF?(j_E*;-mVRI}~(RUeV|{F-2I7im;~uI1s&-8FKqNne~9=d-#cnLX=x zshC&sGw$s&H;Z|1O_M%eT+4oJ?kAth{_~SP%UAo|P1W3N${+Ui$xZ3wdF{(X%zcan zC%Apy?y<$?*eTU0Y$-7E#G;`l2<}juIdvY@OsP&#H$v+>y zmAhJa-SClXf$~J-Q)`z?-7+W^y1VVWL6rENKaTHJ_3p>UXngi9Kmm>oMJNNAkDV-b2Pq{cqhle1hfNpNUi3_t^a9+uXKL_1b~8>QRsD zpMCJzTrIJnamxXL-E+TlEQ*QiTvYRkzr(-e>vQ3?Qa05cx8B&bt(fqP|D(kB_ey?G z^tk_i3|#w9=6K~h1K+!EXD;TsefO}1a|CzKm!ltL(?0!Zt^RuZ+jj0VO0(}Azrc|8 zZ$;dT(8uKxl1fkFr+rV3N_+j9RgCTSJGr(D$FuU!zE943?x%g^WS#0Z7oDW;I{n^v zi8Wjq?_L}_ykols;{@pq-QSq|gr@KRU{$80s{L2-z&~I}_9|>!&d>4HP2of0OwI%z&S&Z^hWT#yAFsbXWyLee z>gTDA=aU!~zB+XL{kG?k0-N=hSH3>Dz2(;;*U#%eE?Yj=?^XA=Ri7l}CDeqEtge#W z^=rvv?lJut&L+QVJB~J8U%i|+_5sJecEu?>o9%6SKJE>i z(0$%!R{fzBXD=MCe$=gTb9$j+&9e?pXScsvOJCmkxPO&`{3q9>xdzn-TUQD&MmCA% zA3ptNarV1F-IbT$oz9*5?14af^{HbEEpC`k62BA8#Hq`tGeg$)8PCBpswW&%zi;^T zhqe5K(8DjClO{6d8A>@SSiP4vD(hh7s!==9u)ZnKPGX+;6XE*jY#z5I4IOz^w?;-w zl{fY47u6{BeinZmSKeF_q{-QMPW4nGYi6gX-p^m$!pavUPduD4TliFtA7{)`=Xrv1 ziH=i5L$bd5zO1;i^@+TX-ouj1pU-_yJ{q`b`$oZ_%a&$cHxKd1G)CnVx#Xq)Oi$YLw4#>dBiWB0pUPna`|ADRL1=m))LVT6@!CrQ&VLuc{O8 zi5RoZFY=$3dcs;ae)_8RGX_Ow*8cO(aNRAv_3lB|a<115mc6+QIe(dMPvXAwVxgju znOsxp<>l@#*IK83d}`J*aY|1-)BnGpR)6~UZTsn@yjd^V%&eANTI_Clz4w_@v4={J zdg1jpXJK!D#+=oE^)0&H+kfXvu{8+K-)1o1Iz#953k|y)nF`Cr*dK<=UWswqa>znr=UF>^GcHWl*tx}fiob^Wp%lF(=_qU;m+q(#`QDv zpM7*NVm8a!zd7UUs-&-F%ro`(gs$PbcQ@?a{Dbc^)ZhDepS+g5cd{Pq`J?M|nJb+0 z#kK!tF|P56cJDaT8Ne09)4njI<;i35s;kl~d%kGJsc+RVT>SfH%#okDvZYVN9c-B% zB;o`X3v?Vwt74quqs=Za{dU_1nc7`@rMVh^9`JQo-;pe#Gw151 zgG#Skwj8MlOl9PKw(eoY$?3Y}{oe{7lLIgu(8-Lpc*pIM&6K9B3-( z<$cDtZiX9SSIqh=)hd@+q+)9 zWzJnZFLn3%M1wlN#b$-#XJaxhXIcX{Y^S*W^cidfZ(s^~Q%z~(8!IG?|{Q~_=W*a4KBe%`^@{!4F>Bsh> zuPXxWS55zxd+FRNw@F8;yB7V~+P|!2u2Kd|p&buX)V}k3PucNtoZg++Gflu_vh|r* zfufD#)*Q(8;^hjhojbI4`rd{V!#{xrFJ*zd7~+ z)~uZBDO*zN+CB$GO=>%r!&1ul)9sSjm$a=y`i73v|CII%S@uY4GA3UjzO$@D|<;XbO zcxSf3!=4Ae87gTmSv;q6A_6SJRxQrv6;OXS%TwTtXa7ou7q2+pQ3*^vNJLEPtDWvRgs&Ig+}b0Tczk0 zbkcLmJEPED%+|j1QUVL_c{YgO==Pq#{DMzt$~M`Ab^51V_Q;?9mi|MQ%c@s3q^|J( z0+aB!>)2+T-MNs<^+o=3u8HTLM->`%_c-m6f7ScyVxZ2wv$xJzcP)9z8s@w9o6?s@ zde@J#>&orU%sO$+udF{WIc(|9*23#4*Cc<@3}iYd(%3-&pD~MYW(?V_kK%!^^Z4+|97|BPR^ZusaCBJG@)>R<(9I7 zP6N-N+X5=hcgh`7SA{S9pEqSw_Vb%AU(*dXwmjheZF#yjE77yBs65Tc}rbjo}?_i0;D^0_-wTl;u?F>D})VDOTTP>ivk=ydpnqwZy z6Q9J-PF)s%v}nVjt$Sp*xK-8$Ui-AXHIKb?Rl7NBj8M7gT$Pun5*8l}RyY^?D1PB3 z)pftTR5)j^h;EO}kym?kC+@w+?<+idW;cqK8`Zs znL*;^rrWYFw9I>du(#&GtlO@FVR!y(TFa+Kv->^Q5tl1J!=(N--ojyaw8n?&l2>1Q z{dIl(gSX>#&x&WoPu;b&CcNco-Y2u?B$tZeR!*naR}aR72N<-9%jn>!(S!H+7|tlK8a4 zDWWklIkTH)sAOy@G+7?G?!1d;_x+4#PmAuAfDKUpbs z&t7I}GrvP5S^V~w9){UpW8T{wwUgU9^~i+I(}h!<^aEN#_(G1FPI%9I@aDv;j(X;i zzpOY`No)VxbXa;@>k4V>xeqPYFf=4y+SO>?@||%a-wZQ3?xu)Ur*CNpwv_OjsHCi1 zaLRF)lwZ{D>$_%I7d*T;!E@`48TGxYjv8eq=L}M1F8O@^vMjx`Psq%ycM;3Gj67w9 zB?qo_f3zuE?cgAB?}d~k@192feMVozD)@D7_VM*SP4GG5_JL=wwv0f;yrX43>dbfi z%N6dJpD1GyS)^N|YQ-qSy2Rkgjz!gNyZ8~v~K zD-TEfef;aK^ZRcP<<0ZDcd~D}xWGSjt>|%`salU?Dze2N6)vCpbgkaE6|swF7U(T+ z_3nB+d-~Gd3j2evi68tEv8H{ecc;$tci&Fl@Om`aU&HW*iig2g@xw`KhS7V1RkW|$ zXP?`0erDtolPG0r_in8v(}NWJcC_`zq^WvOKH>Vmf`37!=0mr)&onMb%VpKvW>?!^ zC)TgIZ>HxB@5i%dHQTmFtjs)Tbv*3+%C3FaAG0claHc-fDN@Ppi40z$+jUaLLLw;Z z*0Qy?3zmmo4lPP6oaD4>k<*&wttbw z)Lz-nz5X;;vS(OI7V9g)qjhlLG zhQ*`)3)iP?Gx{-|BixBsLGZ{Dm0KO90sQ@962>itu~M?_j}~fAUT1yLb?UL_YeG9@ z4$eE$e!@P&E{JPF7pu-?ljHZr4kv5o&wl$SE+$v(#-+)+e&=$AOu5j*eBdSb`t?q(I}P;>rHomG&q;&@UH)4bvNTOj zy+y*|Xl?%#vnx|>)(ams($y>BQ`Xh5Jr}d5HBjtq^X6UdN)iTVXWRYDR262L#91kK zGo*OxxzCFyh@6w0b92S16pI}y%b5Hh{QA|o^q|}1%LPek7w^4%C#?D2Vb^R0g$d%N z?n<*huMazMT=C|5@Q$L{p0x|B*Yur?IhCy`bk%X4!j3KJ#}&OeU!C5Z`cnS&7vXdT zw%2;a4R>ZI-1$D&azd46nZ1Bt++$5OMggSNIDS-s_H!fWldI=eq?n$faVB~Zz& z>h<521$R5l{%Fetd2oGFnZM+M5{s%!=hW>py#?0>7@wWuzty7IAeCn!OZchHsW*+T zWm?619bbO9uRhJwF#BXL;~ndp_sjWah|jwqF~K!m_!Y}>hZD^WiJWHt&S{ku=InO; zy~uZ}i}4rsz4P6SrU%7uc(5<)%f2(uHagAEFP3}Er1dP!O6=UVX=0x?8q_hfuYWuB zdUeP2>3LTTyuQkMe&Q1q`KwoCQqa4AkFDA-x;^6X3Ee3d7D~4#Wms`fxS(~KKjmQh zFYCA5GOc@kWyDup-k&KidF4&8upR4V*5~4%yN|U8Xqmc9H<@-KvWd04OIP8Pq0iL( zDeQvLmdC9>Em7FNJcnap$W(*ppF_SzCf(2Kw(pYGY`a)%X}0yWb=AaWhO=I}1~Ey! zE1K)^D}hmdQW7`sF=oHzZ+0%OyX3zx$T0R)YYN9#PdSy=jVo4hPnUeod}H#wB{vFO zzCL{2VfvBXDRNnaVbfxtogK_8rOFi|+e&OS@6T0M<_zRsGoL@T#rsCuTA3F0caxq! zZI0Uc&Swtuq{F8p8zkcD_Xv0hGl~C<6N~HWxVq``r)$=aL*}Sz3BUR)B-Af>OQ>(v zi(ihPdpgY*GtE+8=CLd_e`4m%ZvXC;89P2y+^jkI@z9DnCa%Vh;=TlF=Pd7;Anf?2b*UJxmHkQ2?e3psaTB>vH(_bbY%@y|=WrHuqbjeTkn17^~ zDJe4U$h{*+BK)tiPGw&?$AV8!UED(ErRbBnEcRUbUNbN5+*2{9XOUT|tE=;(2CwU{ zrdL}xU6Ff#qW7}I*(YwQ30&5%npuAYZrsc4yew&#h_jSat&qD`Pimx)dw;>tjgCJukCedUR#L}I2t_H@wfA*t=h#pDP8dVEH$Z; zb4Im-i!U7!N!xm~_W7!d8z$t*>K&i4|Dwnmk$I-EZ5g_!x0;>4E+X6W;6-TWj>FvF z(-!|XU)o%I@cw1%U0rdfR$G0Towok9FPjvHymgW}!<3%^!Dp6~D%wn*#}ent>(9i+ zQf95&^8RJ^!^AVc^jr6o1YBUZe9WisvNvx*v(EdJIdd{MowyeH@XX2-zYay4^~N9O zKRwm)_?gv?h$6oWQ5F62?ORo@pLXNe)4z-Fu-e}nD*_Ykm6-Xa^B&yZW0WlZ_+vtd zjz~q6(7p)|tA)PE>ihrL#~iRj?8%!&=Xl@O?f)3&lXm3HkEkcpLcKp6k-k64)3R`m z_r{#A7jNhO4O-i#Eq1WNqtDTlFUC@L=j0VmH_BhFoRK1UC3Mm9KWmJS2=4mn=hiCu zeYUPjym?@t9LM4UuHwQoZ-e7L%RE%c5W2_mYOBw!Kq=lQLMP*j@9erzb!zoJ#{AzK zzS~XI+7rtcQpD7xD7!)>>9cu2HS?m&PyWt2b34I-Tl;NmYUUjiP00ooj-ys-7WUqM zd;=!)p0kb7n(BDiJvgtf=k}dYt4p&*8Qa6PH|ed2S+ty8OhHQSL0n)?9b2;M+PHr? zncjDlca{BW%3_l$)6)H_*(kVp+k}fvH?6O|K44(3@IqpFY>`jXubck@eof~qsY+!! zz*D>2?vR|uoBjDt`afsivz+wA<-)`uR-s-&J(Dh{>zlux7x|vM-g~>vxyWjkq%HDm zE9I`;ihZ7a<%`tk*Ht^i%J&^J|5O}OAGogT)}(f;(!(=j*rvrBc5QZi;ogZ9K_a(q2vXMupM_rLyox7du(Z5N?2OM{4zY^B1-FxDR=jESKQ?*YXdaz6- zv-<7#xHVE|)_yOy;W{04`%-1M&Zb!pbpP_*^5JqURlgEGf%EX)bGiK<=ieXrv(s_? ztz&+RjTYCnZ!vtzEcjyI`^W#vgg@W?8EM2M+~a(a1k>zvr;*&9_}ox8>I z`cD^=i_<oc-=42}>N~!MPSx1d(fjV%bmtbS#*(muZLbr*=;$t=AzM-O=pBPw zl-M-uYX5l=0vv}MUhmPZiZHpx%WeHQ<-67nm-QQM);(ce+_7jKFZ}A*bH?w&q0in+zV$TsPru*y zBy`@P*>mmM)(;2~SVOr7Sc0mFV*_ z&i}5$wNIuim*3cQz}~6Q^py851Iwd#9?n=hJzMi~SwsI*wu4;%e)FA9yRgb4yYJYF zn-VOQ>)Yl^df8q0k@s^}$Jx2IX5Z}l^*&WSx8B3>d|%6pcWi5&L~q}Jc0zy3VXx(T z;*(6@*ooUJG&McRUUTf2xzM_cNzYwajTX&aJY(@P9_NT;(_8VG3bPX{vR!Z0Cthol zX1jSaj(u|8?9`Y36P=DoOGb!Inr*LH$oVSfvQ?^Q%*|AeZDJ9x_6z>oHOJ#j_uALb zH+e~{SiaP7&D)G;eAN{v4V`ScqZ>oDEEE14zx-;OxkhAm|D@oBp*xcAJS~U_WiexZ z=N-6NJ*?q^Ye~9%`21$OY56WYU@ja>H{tBSSMZ3FqqN*anTY5mBwW%oaSCt-R$h&Y&gy>oDk=>EN^H1 zxkHCvpO2qr9x-{znJksL(|&uMm5(cZQLnRqP40^R&X(>k9D8D&f8Adr@3r-0=;q6* zR~Iai>O6h$;>kQ^k=sTkVyD)upA-M+o|MAoNAZ0=meHY(mvgd(U^>%8&!47M5!y9XtOv?}Zo1uSJeodnvE>`_+1D2 zbBmz1MAj}pE&J$y?Dk#JGOBiS9?5aAzpYx{(XxD-r=P&ju0vBZ=S6xKa;-iexn6@a zFMa;0!w(J{xtS=}agH8ugh7N!-LA+5={oOLB&|LmTUhsD;S6mLUBPf;0mDfD z{O;9dlc%px-sEBGC7!ZINp(^4)w|7AH3Cfk7CoMyx8Q|{r;+IgmHTf@7k*QTW!^3! zvTH@Sg_QV?rn&xBx%(URGcRT=HJ$h0Gsrz+hEbA4+2{QC;g1CxoW-tBkGsC?Z$`%F zjg@!5x-ag3xbVX9gDhnU?)xp=Td!;^oOyKFya#KFnXA5^FP^}va_Hxu)gJ;UX4Qw? zpJJW6&i|Cx(fA4eryRfDKP3M2lMpZGj)Q@Z->H3`;dR8e#OCO|f7xYb6JL2-&phPz zxmGx)IZa#hWo_2e=x+g9CvER6{j=42vV~fXU3IlZ|s>BmZ;q6A$0Iyz#-jhn?q(4D^Kz0{bU?gUwZ!O zG+ndD4v{@(4<%(gz8HJ0YqI;pzBKJ?9#`IK;bX2k_xC^eUOZW_x3kHlhc%Nk_sENo z1@&y&P0cei-TypX(iP1odGO`D6Q=d^avcMHd0lRqWqdWV@1}oIJ7W=p_yBpuWeElb{xcmMm@AoYWbNnx<W~L4DqIaZ!9kov1!T9Zao*nqB}+MSZi|HmouND4A<-In`|fZeEPX#)=Af% z=B!d@`0e?+@=?GpSIx4eT`+8!Ioj>05e)_Md4Xj2tOlMazP5rKQ-hb87s;4h5 z{C*+HXwa9md+DSDhHMWN({!f?Gv%-6WL^`zGVcYO8Jp#os*@R$C%kM5V>3EcDP`(n z<9T(-DLus$W`j%fcpIW4*&8bBS=^+yw#^NW=T470)?0N}ZsnI!iJpyzY<_%L6|#29 zytnP0ud6O3X&JQp=bQFT*w?;b>FwWQ&SvNKY;Di}rW6*eT=Vwf;jJB&eSU`@1uqkr zv?ke^#aFp)8egLB-8(E(>K*R%?P%})kkou8BI?*C#~6ty)4aGO$0^>spPbW{3B?=ET)j2B~oE+rm&AGkl ziGaxrtsNx?UUY7;OTBKf+<%{P?2&5KPkH?x{yzF<>t=r{v#TuE)Ym0*wQ^KY*Z~$T zPsi74e8-+VDhl!{S>-c#qL{Tobe&A1^#nm##U`Ur(Y6-8-@K(ko2|LFSZrdPp~CO~ z!^dM`gJZVbXzViBuho`A&zE&vgzozHUR}yNs5soA!OxQz<=e!&?)kc3y$;Lf8oW(`wDjU%x`Br-n^pl*U>2+e;2v!Jgxle zJWFoWmb@LCpG)colsVj!sXY2%Q88CZhc*tS{`<#epC0B6MI#TPf`w-v?^}@@n5A|TSvn4l+6W=8?*K2Gdmdc zMWjTvb4o?lXWdzP@S-kv;=hn?1OL{~z8C9HO=Y}whWn-P1<%D#)+?Te z6Z8A$l@z^9PCqW3<#-_D(@wb==Y{iUlx2R3tuJ09Xn#vnvh3LHiDm*Ky-V-Ec;R-i zB3bCt#?A2)e=p+mnp(@ly)W;^G2Z>{z4q0U?$rsOXHz@!%XHe*!zOPvCW>6-SuH6e zsIu=ZH$PjD{Q{L^Pefi$>^;XIZgJ9mebF1!+qpZ!-EOFy`6oC@w*Bn0s+fNNd5!YY zQx_k zW60cj?`n+J?ZX$|KNQRTsNub{KIcff+&YOp%PRxj;=i6(*O=ygUw&p=<+c(=K|vw4 zMQUbg>3hsBulD+`{>(ozo8PW13%8${)DtcJ}M%&EJl{{@nlir~6~i`p3$1dSb)UKbYUMJ6HSr zv2y9lr0PT_znKMj&suNY__gQ3=?kgzA|o^p_b|-xK9G|3^2h|koePxSTO}rLSu!vA z&hqaH2`!9g!a9B&YDleiyqS}+K-T|ZougZ<@Hf?YSxUt@_h*_Of3nGP%GBbSm+o@i zpOrU#>XYqqqGB_SWocQd`+t1B>+-R;b0-U~dc-CEX;s+%s|Ocdoi}gMj2Lc1@rjRi zd^3`qzCrHd{Jp!iZ-r!S$mRa`Zla2Gz?8}Ex_KAUe{>%CCP3at+6h=9Ai@NevEOYJ|h>L`K{^(iO zYrf`uKF9HWduN?VXuDSsq%3yGo%{Oa)794}vUdJRZ)1{pzFll>fHFg~Q+;5toaC9T z=|^8T7_a^Bb3=KaVq}()#JcDci1bhzK~vfYAbt5`p0`oCTLx8JmzuRHm9YTGd#n-ta$nTySS>~EbVlYI5a zht#icoO8~aZ*I$u>Q>;^zhxGXR&;QEjKX0jnMdn`<6a*szCZPk*1W#No$nv(3Ey4J z)0Dkt-eS(K;yY)elIBf)6|wEU$v43pf%T5Z|6Kg{?%U+!4l3S3ch%0h-3Z(2l~muC zo%btC-t&lwA6J{lE{o-nMP`XNMSr>#e|`S-XX10$mB02B{iq4Hn^K;CH?#cxgTfc( z&0SswKUMC=1~llVZ;WU$+dWk(( z&A*TTfAsI;{$2Hd^54n-fAa66{I!s+yQda!_;6^RX}L(RwE>@@)Y1J3oR*h&ZT-_^ z^!j{XR%)l`s{W8^&NX|%)OC%wS7yx zPj$tY7Z%S&9nB@Ot_rTTzw}LVh5n<);y33kud?f1`}X^}!R~9RS0~+@H+7Zi^LYik z7Q{9CS%rx!Z08EB_v|<{!QxrbjF5$gUKFHkEWi9f$K>3(?brAJI#&E|e`4;uDfQud z_n&@x=A;7ey9|}_0zNJxr^Z$!^>176YJTw-!>`xY&y zuKImnAHU5t;au?|gn#Y)=F5#Oo@a|LoJ*g=x{H6K^2TK!g{$4z{%e{Qui0@nKgERG zG|QCtkl??c9ed}e-9G8(-Ius=tHh%#mY@YT&dD8R(`P;?X!@qzt}lH?Ph~}a+@G9j zY{xAc*cr2x7Ok7mw7bYQ!|o)n+w@u4*N>MKKF#;l^Jm{`Z=#mEO1S)#y^}WY#5p|v zeJzb&HkgY{mh3L$XaBO?hV7wVn76NLVyNM_fEnNTNTZh z?vAp2Y`kiJVru8ByC;~ZVir;fjtW@^fz~$HN&H^>Q%hS`iS4W z9*RFC`!nadZ`k?W+oA3Js;8%$(tgiK{mQY?udjTgaOvZo_XTI09A@oT3!ZhxEOFu- zm~YuN@>5OmI+NeC)&jJQ0sLP(+2L= zM*EQbY3EEBQ{DSK*&K!*>*uN({eGhNGk>>m9{129{Klo>wX7ApJ zwKnyJU)7vC0-}9iOL&}`{=-M}4P(-MiH)bL>Pe>Sef4}SKY?uY?Q2aVROl=wfPnDAFg~} zqWs$V%-l+kDIbbt{SP(lktt$sbTPm2Mef_qkb7NSiz26)#;?&VXI_~Q!>{Jn@~$g7 zYFGbEu|{XUxpR*#7O)h`eezdi&Ll1=|DG3Jc3i$rOI(8hkZ2vX{=uR)2SamCVz0`&?Ni5E8#wBO& zF3QagVXNg2K5Q($zUPIqm@jMX!HW^=kBi8%WPj>)$>{(^m3ihU$y9xOx%Qk2Sgm2jqPA z9J#{ctmLlK#=X~%t>c-nO!G^{Q!iNzXGBkRuWQSXI9yaJ5vH=f`JWWmd#6K%Vvb?{ zJz8pyIazw8I8tSozCB`@`C&^}$;X>FzpOi{Q7fzWqyHG6n?{iI{F2p8CJ!QS^p;vK zd?m|fpzr%SEw<)tfe-tX?j27$^7*xVo?KqXT~RHldo-}%;|9TFv)<{}cm^|0ssf#c zYAJBXr}fJ;+1&yE79Lp}_};rFm@OJwq|lYlbFgJY#mYFA z!dv>^{vNwv60lWgQMX4}Mcl0?nzb6S9Y0%EsLKD6u4+-ez4gLEnNyXf6(^b$=cWmH zNZQ!h2>fKuN?>89%MbQqsCg|*~LpIx<-siqMHD>)ZzHA}E z1&kli(!_};FGjgcYAv~cb;q+MZ4T=K9KP?axRWUKQKs+Jt&p2jO>a6a zpD>qISa{w$zNx2qP1TL+jz4@Tn8<58WznKU>7%yZIc*cglR8*9>(5x~ewVD6>k#l} z#%_b}Uj}8WNc{3WBiGi$sBF!=)9G8miN>n`VJr>Lb9RLkviVMt^7Zb&`Q$^%m&-n< zZbtUV)Jk1gS+lY8(Jzfvd!{*+%xPJ@&1~~F&+x59GiA&ll}ukb|9a01QNAZ$nvDOR zJX%wm@Kj*k9p~)W{MmPmL_5SICO-7wuqgi$+OP5|0Zv(;99fBls6ZQ${Wq+EqwRy^Q(&|AHFl|mp$Rh!y~ZJAS>TS^3+V1 zd)*hNSt=b7wC(KUOWSZI>|G~&YoCbzwTan>7dOliDLgWN(KOTN>L2uK>m4dp3chf& zCQKFICHCS$j?{ggZ;KU;nlF90Zk)O5on6M3RHR>Za?KAN*Y!JnwrD;sIsIbt+3VN$-mm1h+kSi6#prMU7jNJAu=dZ2 z9WSobx4FtCPP#E?#@R`(N2WLMR;*RA<8d*1CX?jTcHKE-{rUQ7M@tF{l-SpA48N(L zZ{Lty{P&@o;r9=Jb2oOLYq-(Ozxv3sg|Vg^X7%ND-n{>ZcUf(Z{YSS?t=sSat@wR& ZR^+6IOQ$BV|CwEr|910#`Bjyz$^bXTe|G=? literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_8d/319aff7a24c9ffe43e8cc2f5eb5cb691dcf906 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_8d/319aff7a24c9ffe43e8cc2f5eb5cb691dcf906 new file mode 100644 index 0000000000000000000000000000000000000000..715e8fe67b2c4064fc505b0d6682019846bce350 GIT binary patch literal 2023 zcmbN z@QdQ{HP)m_qeQ8N<_@&HB{jcHr;*n)}cYSUh3(oER z>K%A$2YcwH)iV!TPd2SxoK>~^+NHC+qThu*e`pL<&w;FtzrgxfK_?q9Oxp@aaI7=}LFYHmjv1DeP{_`Cz;&rk9YuYaE z$X(kwO1awH!%I5 z!*S}2(f(tvx5}qQ)|LH7PvoAlsK7F}iUEGOG;=D|=biHH*jq&W78uWz}b74y-%;ChV&Bk^l+*dx0O>UvfvCRZaNF z&Cqe$V?u)Y@2CDRW-~8Mx9gJ4;LmuO)2X9+=*l4zC;R>ikNYOONI#Abv+x*qHzgJgJ4^RJb`S$MzEAI-gUagW%ML9Pn{a3zg(H%wkYu+>Jqc-al&W~?f@Zq!5l4RaGsUO^1 zWBDU4@N8{+DPRAKJJwoKb%V=hkMCyJy!Y&!%&+M0rOo{G&a5I9X7Bz5QpYlqm^+z{ zIGqaI+kGrzQpHo_vkN_szIpn1r-AXz;AXp*QI9vsl*VU8wjKAo5OT$9{bc?8hUK?+ z3FI&Sd)cdXdEXL_(;0eMkM~~iedEZg{#xfpy$2D zQ~6WVeRuQvF4d8WRNbC8*Kx)?E8+L~sSlPt{>-@0((`!O$M}}Q6&sA4!=3V9?`}VK zZ0-r~hX;Ok*4}v1J3ZKAcdX6+s`AQP-ZF1LOHZBC<;GrRpXrlf7Gw7#Br4iuH`kG{ z5BH9@I6hza-Dkbt%Ihz$Jzp_*r_0%Ak1ZA+(Ym>0Ugn9AhESk7PFpK0VP|`1ldSg({)?7c*~d_-GcWH}$~tTl<5fY;!)#<}YrIyJ~y< z_2!FCAO35`{pVYIUo-gT)aRMqfs4(rwcGgTB{F4d(@q1-Jh+6EwNVd3fcOsM^hEGj@M^Jk5W% z$<)p^*`LcdUfr?lXhHu*Yh9HM$~w+Ft_bPY_qQ=tB&+Q>_jrq{;oXG1)IF<1=EoW) zv>Z*Uxxn#e@9ry-$JLBJb(hY$!R@!jh`UX5W~OS9gYoIUr~O@z};ZaY;;iS;C%agXKuiJ;jsF=o(qu+3mH~k(`Y=_kh5lukA~TlHc=l} z{=#?b3WAbvEhxA$rH6NR`NqFtFXUXePmQ!+_<8J{;lZ1l-`+VFwN~|g@UQ6lzx!Zj><)*Eb6r%V`*;0eJ>dObu<{q%0SzM= zPupAb6_&`HSvt4lzVS?nAMR6a^8Ak#PUzoycUqQI@OR;Z-^{vi-Evhq5#qJC+~Mt( z9g>~D6E}1Tzdf$@X@QM@k@R%_s8h=&#i!)U_URpIT(bYenO?m%TfLf!i@uRRk6paM zSYvK~Ecdd4tYiABFAUGuOa46i^y}`~yC1LKtz2?__OUk>?LLi(Tr-mo`bxdHDJH+j zK-;-)#>tu{$+|C}mFnsvBe$QJa?qjSyzIi?I!AQgwaD?+RLuXh>+xp?mYT#5b6My6 z-6%bBRgCeM;^Wnau9sMg{}2#5pZI6Zw5vWw$u@QyT$56+oBuI-Rys}CZ2iQk@pUKu KvF5+pCj|f}x&lN1 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_92/bacb26f054910cea5c059d58fc85f9955b5144 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_92/bacb26f054910cea5c059d58fc85f9955b5144 new file mode 100644 index 0000000000000000000000000000000000000000..9c2e62aebd74df7193d5fc548d2d00bfe10b76fd GIT binary patch literal 33914 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 E0Dtb|$N&HU literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_9f/ab9fe9c191db896f445ad8e3770b1cf8a4012e b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_9f/ab9fe9c191db896f445ad8e3770b1cf8a4012e new file mode 100644 index 0000000000000000000000000000000000000000..b56d14bb0f9678d288811f96ca8642b69af34873 GIT binary patch literal 33893 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_a2/0dcd02842f272149efcb686b0937e5524af7c2 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_a2/0dcd02842f272149efcb686b0937e5524af7c2 new file mode 100644 index 0000000000000000000000000000000000000000..559bae2a15192674c5bfb65cc1e7e94505e6790f GIT binary patch literal 249 zcmbDCRv#nUlFNca;yD+njkT1qv9yl+9o3 z|Nf}W`DE7DS3`A`E_91^8>({NU`@%_F+Tca?Zy_jl`glG-p-!dts`o%@%_bbOI#*9 zZaMjV+4KvROX~V(#iS^8+W+slw($Pq!YNh97TlfoWJ{Tk+N4)Zk%kK&2Fn&TPPh5Y zbUr9$YUUdEw%?l;-u}vOE0-p>{Pv9J>=%|y-FR#^-@2(`t9D*EeL(B~f~RXdCNJ_M6;kP*GJa_K5Y4o!$Ta z^P|_EzQFe&u|!bzXxHJGE|ob#MGVJ%cCxVd3G`^D$X;4w_HGkjZ>zJ5_{k1chZ0qn zj!A0$BI#S67z=y;J8L|{@;n=p6C=Oa;wf`90*o$J&Qx>Ivul2|zA!Jge#@!Vb<_1` z$4o0s{d?#AiyeO#UJriywCK#*eHq@@8k%Fn?WMANZoRB4IAI^M()^|R#g(6Do&WXW WX5RMQN52O@eQj3|VE<%d+6@4u{A9)e literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_a4/3748d4276f9a4b171717f7117a62c605b63e2b b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_a4/3748d4276f9a4b171717f7117a62c605b63e2b new file mode 100644 index 00000000..96208911 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_a4/3748d4276f9a4b171717f7117a62c605b63e2b @@ -0,0 +1,2 @@ +x}�[��@��̯�w*�0ܫvS;* ���� �A@����>�&��T����:U}�4��2g@��o���!jb�*z,��b��PT5���F��D������$A� ��.DP�Z*���Le5�D��PJҘ�z��-(�qlhK�U���H������m�R�-m.��Sβ>~!u� +�eM�$ �P��{��ጶ`��E��?����Nͩ�O��g����z��=��vX_�:�S�7��I��Ҟ��f�����=`�,l/�G��=�`[����,��蔮S����>��:���$S_� N(�+cv�G�D�f{�q�X�ӗ0%d_����p�{qJ��n8n�e�(���UI����EUS8��c��t/��{Fn�¬U'��-2%;*�s���t���;���Ƀ>����Aގ� _j����d� �_q@�R���h���A�jP�; EY���!\�+�c�XJ���ù. Ɏo����80Y�:5��ǹ]�'|�o�vw8v��x[`�{;� �b�6lJ 2ղ�����H�S�~gf���p���~�d^u,�\"�����������%c�_|� \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_a5/94b8a966bb735bfe1a94635e382c0b62ed8d5c b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_a5/94b8a966bb735bfe1a94635e382c0b62ed8d5c new file mode 100644 index 0000000000000000000000000000000000000000..102741fc71d9bff3fab0342ec6ae028ffe1de3ef GIT binary patch literal 22964 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 OU1#dgB{GK7ZYgI?CMo^iAki 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 XXnDVJBFHGIVNhD~GB!kz=prwuq0typZ1Ttbg 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 FeE?d$ir)YL literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_b7/23fb6fdc31c0a4aa8b9dd49f9051753e12c435 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_b7/23fb6fdc31c0a4aa8b9dd49f9051753e12c435 new file mode 100644 index 0000000000000000000000000000000000000000..7c73fe91d918877df6f3b9ea84632bfa306bcc70 GIT binary patch literal 438 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e+2fNeW>sK zX_o8lbGAC0_g8hMpPe!K?mU!4#PTu^r{`Wo)bLM@s?zx?P{aMf9 z48yN|5-Y_acGI%kwWD+m&)OtYg-hJ(I31+H*vPZRvHNsx_Y6 z{pB`Xf!8N_>sCo!7i8YLQenT%Rt@#7I;O`jC`7MU(4YHo<-8i-o6EYyrfSE{(|UMW zCp!I2WoKw%XklBPr(0H@)?t-zJNe!gW>xdt@pErIUsG{1_xbW79^Gj-t2kucY|VAT zx<9Wt7QL_J+HA|p{~x<^`iz~x4xgQrf!0Q>-1DJIbVj?>911&qkq;= literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_b7/fa4564a32da2c2b28540ec22cc2b83f7d36130 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_b7/fa4564a32da2c2b28540ec22cc2b83f7d36130 new file mode 100644 index 0000000000000000000000000000000000000000..f9e47524d29fe7f228152b1cfa23329576a9cbb0 GIT binary patch literal 2030 zcmbCBVoe<(~=Xw0km`}I1n-C@JJ~%;yr5)H zOqS(|Wxabjn-A}jq z{F>m+WobvPH=TZR@@$kumGktct(@8FC;h4oY8;gll%{-SnQe0U^;4PY9}ca5-Fel( zN?ftJMfhrxuiL3r3xoxmrnNi%Vn{v}kZSL-hE;m%EWf3b8EiblHz!M&UG&neW77C= zzH`ADozK}m>uV>b{=E4y|C92shg)MWdTl85eCO%1lI5Pk_p|-K&6givujk*rtIBZu zYG)sdBQ1y5a<=<49xglNIBo9%d0F!gVV&ukJ8o1TxM!H)J1y2nGDnDE)yIOqE3$X~ z&w5}GZ^F+krSB-FwRYyJ$j47+crn~rx9N8BGlnqTP0^wHf=-Dx74DDkd)qI&8p9;E zpP^w#4-046=D2??`z!;ho-Mx7_^n~uxoI6iN2hg^F;J+5>6F}r=k7x%*t zdEVrzu}&&^k+WCeVcm{9euoZ6g?aJJjo{5@jM|a7{hj{4y2{eF`D?fG&%0&2an~;; zx81GtBlj?rhx~NS`Q~lE`P93B|9}4X8LsDFQO$i~ZuqvD3fH}J$`8)eakcFK*k3fU z?Ymx((Oc0H^KiK<%`2`XDQ4bj75pNhF4a}NaLa*NEc=w1jTvW#r1~6LA-bmOf}&Xa zieSzAizM<~TA!OGq$Csvewf))Iq#BL`;0qlryKk?NsoMFXV2^S@Oh`laj8EhAH=hE z%WYU7nZe$`Ms=_6} zt@-{{uF0`UN0jGh^0{ic>C2yOoq2MO)D_R`QteMy{0=&8WK-6(Y*AR%+?q;Wo7neG zdwRe5Ym3ganp76yRvak(zBMn2SE_i!xktMmKVi?`yDfBas-pa~Ypnb;6DG zbB_q$ocTA}eeYCQIiIJ{Tuw#Q#@ zzIf=_|KL6UWTWnD2j86fJg+-&@%3x%HvTyYy6rVHB_G*$ZA|UcD41`pwU4jNGs=&7 z7GL@j=?@DM`5Sd68LkLR*d}=A(iHc;tq*sHEZuxB>8zi#Re4WL?j299%dTSo`rHq` zjORPX-mE9RV|!-tP8a2;<%<)=#b$hML?TPcN?A~4q zQIiUL;;y{9u(bP`TyD9PM}m6<*N!Vfy7lc%j1|c$7Uz?M8SMjTW>X zO{lrZv1YIJRmtOOMxVMv=R|P(Z873*)0~;9TI67Sy6;x|en7Y;2^Iy$;ymYSdvUiHYc5zcgk&#qNOmv_3sV!3_BzY8Yf<}+ z@^FilhPe|gvb>J9osH4C&wY3C-LFR8%NZ>6c5l@!`Q>z5a=uHl?sH`?yGz%+=kVavpg-ybXiz^QHr_=;nexI~R z)OF+aZqd_sgL_{^PW|Pn`{C+>uO%YqFV`IEEs^-2c;j2F^ToZ_;zeIasZSN3Fm*|H z)NRqv8@^6^*~FY0|x5!=3m+6n$nf~QH zTKZk)fQOXZ#D^ZUZreHiJo)L*qffuyp1u3=>RrKAZ+(-?=6EktFm_$_QR>W_8xJ-& z*Q{`Q&tv&W;$!Es9}k{C{$ZPzdRHl!jhD%;zU7^<;PK_cbu|_h|Me>OJT7+pQj_@M zF6;ati#oaGlSJY+barp!x_{wq%!9)oHq$@ujtVnA8BtMF&>eklU4DhpukvZ)^VU!0 Ox38c7mpl2@?iT>(Y4kV% literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_b8/16abfed0e8785d8bc2e47987cc40f6bcd4bc29 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_b8/16abfed0e8785d8bc2e47987cc40f6bcd4bc29 new file mode 100644 index 00000000..0677b751 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_b8/16abfed0e8785d8bc2e47987cc40f6bcd4bc29 @@ -0,0 +1 @@ +x��Mj�0�u��lZ�ÌdK2��#��@?cGIJ�"���z����JΩ��Uf`rԇ��� �a�<Br#thASoW3q_l|qgCdZDNOTE3AU?BZ%nfli+HxFJ~zb+Q5Rei5X zrt0Ox?-tB{)30`N`^!Yz$k}Rl5B}IN^;=xYC8 z@67#hY=LP``Sf+6W#4|^eZF^Z-2A^Ea=!m8IW*(%x zZ}#H9Qk$=Rb2~rzU2)s1QptAl+lwF8y-zU9^sQc;_;$v3wYf{HmVP?umwDGg`%u;; zE3pp#^y z`e$R8<9pg7>A=0@?-}U4DC~z{! zc4b~q>87=Ho7iPoKK$eCh?m(Gr|UP1xtWp2-QVGN%ANVLU)nfdT(^4R_eyHfv^O?+ zyy^Ldrjfq8G9GJi=>{}o~Xn1SED`Q5!G)n}f!KfM0q z>Zc{OGi+Y*rl0@0>8SkHeg7ha{+RD>yL(LV%lB_5cg!|9ZpAX;c*d67A_lD@AB7j+ zI#yJmi4V2Z7Thqo*?vygS!PAu1?K+|hh+R`MjyO>tlBH*=iCV2%+kiq2X}mXXn0y+ z`eub0iMy@msag9!;FdWxL%!H#-WIhFSr@LoTv0!%q~7+mZT8or-zL31{Lb^z%cYO& zxYr%MxMZ#4_Dj-ItFK8PYqH+^_wPFuN#0871C6IO^KZXoobIYVaf|vKu}2Gj&UTB9 z2x!-sbu#YsiHsK;Qf1mi)%{~M z<6FmyrRk+k>4G=U^Vm;*vT2F$+UdIjQd^<|H(jlA{+%SqrI-4-+)bhH1CxOI%aaND zSK6cbgs(`Q-1}0;m+kJg4K}IiA*bV3wN5vY6^eW`ak{_`T?>)jH5OLSc1+&7r1plC zT*+g#+l&8YOfu5>^K!?rhP|`w1-?JvcTm5Y>nE{t+M#o;I#+MA?bW>zC8IN8Vg`$? zYggChe~}D5AG{@%&xvngJhr0MFzb>LcmF1_-Ed84zV_tAO0Qk4w||xXShg&m zMaEuwiRt>ag&LFI|DF6XQLFKZ&}R0~BgPFb35#XC-ETd8I`7_!pWIu0j(l=rtB;#; z?N8?P?(8|E zPwm6BD*>yn&-)r^9HVbkr+i|8VrlyebF0O^EFa`vBrfRRT>i+yDJOAeZ}9BCtQX;y zGTBng(;i<@v+L6?32Ik~oHtG6`jQ1Z!nESEd6Sge6DmtfYpY8)SDihP+rcNjah0iD zd9-jKvxV&(r2~`J2U^_JoDT?WlQ^{lZN~e$+wz~Boj@HG+BZ+iZ3Y42K&dU z^*@}yXkz*A@0&htD*Ly8`u6Ah_y64${w&_&@%!68^GufSbqp8jJ3B>Yn?TpH9JAW! zn*Z-k57P z?a+^HO&57uzgHFsseN64s6O)G`MhcSD`wttX}Eo7Q(1tQkHV`0RT0-&OBK)kI=szZ zQbk+Ze_v#DeZagUaY>)}^QPF>&%BdRbfEOW9mk|iueZL}!`TXtf#ng-jO|DXS#+27yI@F8cj?d%y=57u)m{o3VNUvo*;?(|&Qyr$WAbMKqH z+3$Vwv{!2L#4}qLC>n}QF3Xnby}V%6s|?fmTSDE=Z@sFQGi`dJ)Z9qx$)7fa3QrY| z@KH4o*{Ju}Pfw>;!n=BcRTA4q-;$=k_6F~c&36ve_xg}{XydoaoJTzS61q-*5DcCq z?jWOWbX}`w!K^dKguG>a10rezJ_T5nUppX^*t15yI{p`560hk=`!$&XB{H0A?mRon z7_jL>_c_M3952sKRG4g)w0y>kqv7Imejgi~(w|(r7_@YWoZ91SEr%IIF3t6y?ZvvC z`IuDE(`y%hKR*7sulK-|a=Gt(cZ^jY>udkkUUmd^JZr9h;;&Zc3G#*;kXf7rH-&W4I&qrof z*kb=*i!TQDU63$57_wv6hJkuC?-YD#zse4hHg*9)^PLG?@;?}3?&4@~qYuSEw z#SV6!=X_Q#MAtDS2TJpNzRdBb$ysyl)r1-LPYuq9{a}_4O>1dflH@;GFNVW!w%oU4 z56*p&&|SMH=B514UkBgktTa+vtQjG*T(=tTFZGda*f`4t@T>$L2KgPlQXlp9!`?>epz8+sNb1;eR>+-^A}N_LZ4>+3_f*E$|A%q=281ad-eWz z2LxUEOl^Xsj;NqUUWWVB?Wowl!cKtD2_bXf1;_=y9h1-dYAJ;z);hIp9 z^yJgOiUR`WQ}|^W%ZO+aI?){#T*t_32Wv+SN}=tG>GE7zEij?yg&Z*V&OXZKiCz!m`S^ zIKirlh+`pLJ~MW^nzN^>9GaE=`5hmFe$Y>@4Yn#-Pu{M->QMcqUgk*IGmD)|IkHVR z8=e>CZ@Sy_VW-RtHhudkk_#_S-e_lSCvx~h!=#ub52MSkTr6wOU);fX_=r*5s=W(q z9%>$1VbOYSma62vTPMG{SC|&;Sm1D4`9jfhFYeXlR#VG&w>VB+wb(yOl!sF=>c*l2 zeMV#>VI6jSWzM^ED=xj4E$y%7urXZnbp7^qs;Bjrlz6yT z8c4}DIBWmC$P-FtIyajW@Pe=Uq*p8nFKBgM;Lv8|-6u;bH)@S9ImR^B?8!?U=a z!%KVOlLIr7By@_u?Ti*W(e(M559{p%CSp@N&%Er|(V@{Oth3L$zicS7H0+q7?x81n&3aj!)_fNgqhu>95q4AN zuWjeugo+xI)@jZ#-H}$WCH6qxzP)x||1>{yqJsck24}-5JS__PdK!&-@Jv-hV~@@RhnP%g@L6-O_)& zMZfmibf2vLtYg|tC+FPCd@enz)Yb}r|xid9Fd#D^X-;gufGRV6RP+I!Z(dsD$zdUA4wdZ4Vw|0o0ntUqB^2y;8 zvFs&_En8b#RL+UMe6(84rM`iG!r|>x~!Qx%2I$!vF8?N|HR; ziP}AKC!S>QoV<1ZU&$NOZD-89{a^vR#P7R*S2o%dXeDYX@Gda4;B4`*4m#Jsv$N@i z{R6R#KQd>Jq<`dylfEG6_{Z0|-6yJT(iRK(-wQH#l~kL&E`K6*oIhfg^Z6Uno4hP0 zoZ2|=O0w>S4+&;U@9L-iRXEUBnE9gc(I$4|JB7OWe&gbwQJvLFpaNu<6S##<2zSs2~BlAPZQW@R0ml65kw?fBBd?>4(V zB5b$3$Y6`Sz3YLc%fq)BUlm;V!}m^ZxDb0o&TV&_d4-c-b7CEjZsZm5cQ5A&h;8J& z@_VgkO=t2%)0w`RlBM%PH>b>#G~!*9mJ@AzG?u$Z%G<&yCg*<1hJfQzWt7*>+oky;D_IbC9 zS2LdrSo8O

    lNBp8qTyy9$3C=soADa(MIP+Y7qx&6ysVm9g9TK>hm^BkzwVC#9|w zXe+5yiVtEvmG@-UfmVlSpC3iDmhaQ8;Jhip@Mzojd6RyAV7oHa{q=pzuRAs_E=dmD z(0sqG!Qt7RNyjJ4z36P2|J8=uOm4~Pkjt}<&N7f$=r~EBr8niqHXTdxnJmjbak3O@ zE%)BF>gVE_Qud7h($amZn*DEe==Ywyy(TlrQbKW^&kIj2jpM#=wEPz|t3z;4atbmt2aSP78 zlu%Ne}8PE{Q1-hM@P54XPu1u=iI!wX@`oN_l)$2OhJdAMPE#RSQoI%zgaJ2lK*7m z&%Vv29~$RyDCJz%?$fnATXQ_^GRIqGZ}+WwJ5C(dUj%(R@H(x%#)-AWThVE z*xr~|b+v&jl=%B1 zlHYXq<-K!F>VK!#droMUuU{x1fAf9)ul2LGamLJ4SsFii#nju+q}I=rR9d3+dWrsF z*TWy!uS$AxF23?e-EsOMyNfo|Vj}?e6@|+mb%v zyG}~_`=8f4_kG*>*yp3d*X{MnPZNIltiJIv{BUx z>VE&Jvxw95UyHuwT)1$)A@+y!@(D3B>{U*Q+*xvNeK`k{$fi`Q#br{T3SKQf>G*iE z+y3q5nZABfRqN_3WWOB#AYxHaGk4lFsbyMLiHBc&^Vpa4d-FZ%iGQEWSREtVTk!0Y zp2Xvg7Y+W_n0QRQzsTM~=jgt((}Nh|s*K*eku`bKxM73hiD$_#xBn_HT6u>5#d#f> zi~F;F^jkdH+*nq1u3~+Epyd^lBduY_ow=u9w{=Q8P?g(gBNAqDP&9G5;mn8go_x3D zxb>ZzeM`R7xBC{;-hW#&u`7D6jdX+1!@afj`TOlR&pCa$`$1!?_lt7(wSTWIx$Y%x zBjon_d{mr zp&7Ssyww-oevN&iBI~S8>pwdlcK)_Men=l!n* z?VELF-$p0izoW&Fk;(Dz-2Ll9KNLRvztm^AwA22(_xrZ|a^>VzTS{M`x`Lb*_Az@1^tK#@Z?PYx$w?1@4i(A47avc#bpo33J|^ z5a?{y%b(iMw#2}_ejS6$!<~!I+g_U1KePVXA!Q9d$3Ke#w*+kL+57In-mm*VZQpwQ zO>(m7vsRPzxevWx-(dO6XTMY@^W@Ll+vNAH+|H)^r)JyAvi;W&L>*g{i-^l97INoQ>Q%6C`qZVbq^`m~Z`$(F#0h6_I^it&}^o%@jTO~GhNqmkHK z>A)xc&$nK_lwUksLoxesmhhGrZMNN~xA*GjS#15n*Zzhv?J-Zj)MMESm5X*K+PB)j z{ug^df$fajq$m!VCn4O-w={OIIJvvaP0W4Tt2I}OEMId?JXQSc(m@lA`-krY{+xF& z)F)J+_!wO-^BZmC(eI+GxKHl z%g>q4_OJg0F~6Pmfw_#Gb*{~m2fsbUPoF%_|KR5zSDqP4zrB*5)<2)EZzJNc+`nO~ z$0-3ulRIx8N}c{EXPJr&cn>Z0965ldq>HFP~QRbiU9Wn_F88zs&u|wfL6x3CUWYI%o5n zF?Da&FFCGzyLlLxX>)-^A?#jtS;WylQhk>fz5bfw+!w8Odfw}$MM;|M zCxT11F!wvmEIzp>?cLMf+hKkC4EVEWocVjEK7Z1Z2|NjoWs8e5wl%psulxDn!h-uP zG3zP=E!Wh`OnCfBXIaoALku)&H6Q|JnY(?*HG-|EK@|oBaRx`~Oeg|L5-hfAj0UU;p1`&#nCD z-THqg_y2zXZ}R>BN9#Z5|Nrv;$L#;V=Kud^4-%SO|Iz&ahx7H{!~ehh|Mhx3Z-uke z`D}$3uOshRJz-~ApjzE3;gl8AtH5-zO4XA&JabK-=&@o;_seUhIwY-J`iLPZR?eOWT;flhpw)>xxFGMVHva4RnFnfleyN^gw zAcKc@iD`?Nl$}(6!$DbxnMDCTAIPS)gO*=*Eb*eZlKc} z`Dlh6SK&9-J%;iN%mc3NiI~w^n(=Z|y^N*-->x3TCC~H{Q<`GGslPh7p?T4VS&};X z_B#H`7jG^#5U7t-dDe7TrQdj!nDB<4U(3Xn6sEkMYodMXrRpxdt7-D3JYQ{@+(RS} zF1|0W|5s|&`P}ATrc3Oco|`RQ^+ABSqR{;Qv*^J6QsE8aPRd(kChTkyu}U_1E_w9p z!PzTBKe*o6`Ejz!m;H{30afo0&GhTv%X@nABF6MwHc2ioBb`6jcehSBJt1d9;%Oe| zrf&AndoA7=oOYRV@pV``_Ii%<^TS@ z6_jH%Wn+G+OjpY09|@;o7Ov@d@OGw2#+;_OQ=L=h>-;aB7q;j|{=G*U(YH81{<|f{ zb)_IBPlao<@zpfFcE;4igNK5c8txvGd>>O&X`SA);GX8ry|-uizVhl*onTO%Czk)= z{i|GIuenP=o19Nu`{k6~-XtL2-7ZY`ZUyKrLfjN8sP4NmNu`p7GyF-+*w z=l^lv8&92{7OExv@{#?Vecm2s7rEYsxybS#;QxMT>Z%SK=X+VF{zh))Z7FaHUtZ*_ zE|cE&ZCVI}rrDCa$5oh3Sg+sN#FeVr8#!P7-r{%B>r{iTSM=w(eKbv-`ZN3KN~dRa z7g+W0Sf84eGqG*)rb8d{()KJ?3#?DjaY+mOq3s)T<=x7MH&6BR`)5fh>*!XcT$;6i zsqKZ88a;uFedZr3lYjK)Tj>5D|E1lR)|*SacP@S&WMuZZCv{u+gq3PtcV6k)zKHyH zeS(~cP4Kk5xSdTiw6|FBN~L>oW+ZA=rk&|EeHU2Fu=i4IVh#t_yHoQslN3(R(GR<4 zA6qQg$kD!O%8sbx@|`c^qU0BuUh>6lS>}o3zmGjKc4w5$IAgbH)s#i|e)61Mac~9Ol$7-k z{<`+8WQfT1dy*9sAfj^VquSCq2~UoF*QY=4-j;K*yKIfbBEie&tbB878F#Y9T@mw- zIxJY~m#O@^Z1$?3AH_WTB|5ZI!dEn3KU5w)_hQ_2sVB>Lzi$^}c{4-hqQI@vO*KBz zJesQwPptpD^^bG^yfn|-7Uw=6=kk`3cKEq1al^t}ajQ1Uw1#m=eRi`odGcX(^vt%Y zt0!#K@)qBEz}8@4^|DB2!J<|z_s2C;w>L?p`xf7`Z*$H&S1PjZlK#t$QC#XbGZO?N zyc2^z7EhV%xmIj{{Tr@|YetT&8V4!bryCwITo~qrJQ+a{^B$=iD&6r~H_;p77$xWYP*N1*f z7q(kgb@7l-$r}Ul!$x;Q{+<7Cy3@O^Mc&L&wDpeBf`@Gr+^=VKhiI;8T75`>rJ^cX zL+@JQ2agWr-#=z6)PB;ayc4&WS9=M2Q3|{BW0f^5Tm7f)^w>Ce`$mydN8e5DT0J#c z)`ingry+d%l{a6dHnOEOMa|b6CjYx=iDF3w)Q;(SLWF)HdC7w7Dmzi z;g{d;y}H6{BFj-Gvmco)LXTIx`!r|e&erF9`b#U$Nk4kv)gjwcJ7rP0-6|GV^_u+I zq4!1Puj(7Gs(jw<+?(1OD5f9ce*WZD?PxB}0|(kPb)QduW*++~V@(`ex4@2%s~@ud zvFHn*dpN3e21n_aqYei%6{1g8MLQ-O7MA(8s$RtO$i}mAx)<)I)=cP@UnJM9F|*0? zmb{+%YcI>W@2d4}SMRyCvDL0>!_+nR{heBa=eqmMm}2#4e)cBk=UK1)W~Sx5l{^0T z#j~$pfB#u-uq{&LWA)kU@+-q=zn&Ho6GX+{~Vv4X}2?7J7BpwQnar55!FABy|d*W?NSMBd494azB}BM`}mR{IvF!M3tq}^ zXy)1$?vrUGrkEyPB;R9OxopPA1AAV~D1Ul!;emjj8>d3EIF!|+I~O=ju*iC|q$cyM zxVp2}59MnN3*UzX){#lWO{uZ zwRD?ox*YxQ-rG8@-D0NNPoX#dv+F}c1B-uulVyvJ_qnr)L#1k#)tcXCd6%y*Tw9&9 z+|OOg=Dk&jm}Mr@1?Ax53pGrBOj=g9xX!%2f@O{4&4NVLlnpIYZ-}?9G|IVC zG^JSRMB#@&Kez8(^rX^m_uouokrnSu_UQ5Gs?`Tq%w=D@-jgxl9Iw~31#ZkoOQP0V znRQH$t~GhSKPg>1CHUYJ5zW7LvKO1Xw2EW+QhxcZc~i4Olqs^KaFvMe!z#fh)_Flu z5f=N78w&mwDLVC4cKYKOwRt+PbJzK(|LtFIYUutcPJZIF+l}iFU5L1ow5h@U@g4PA zwyoC$uUzDuEAo2n_x7KiZT|aCf6NrLg#7`^(I}ts0en-{cR+@xI zY-(ol*Z9j6nwno;p5G)_@CwK6BtsbpNnh_n57Z*c*~3F_tvfnZmuj6z2ADL{bOv~dCAz!a?9Di zVWG#CCvx9bdbr&6?GmR;YNx0Eiii!|YBa6!$ERk=PL`$<%Z^@}yYR%lMVU<{Z5pq0 z>VC86O?s)x(akXLP^E>=z0}?7@9Pxrxmq@T<-#RiHC2mr*B2Ow^c-f*Nj{Zb@F`=< zqvW6YUneu3d}PJyYRmGhcGvZa>YZ0U-`ZN}W9YR&u=VUS&+H4&&F8ML^Rx(D8uROY zP2Q<9Z=VD;HtGGGEvjegl(MgGu6xyz#Q$5D&fn^g?KpX@Z?|w$c3{-qb^5BBIxg`a zr_|*nEeVdAccVyV;*OaNHj_N%e$`j#1O;r-@2PHCFLQR^y(*E0xEiGTEok$-dnAF6i8Z_nW=vo|WYCS{fBw{U;^4xVp0Tw^>nHu_JrK z1efGpE6rvKwkf<=XX2Tr7+B}uXCrs2eX*zFCJF!MTOw)yexFF*c(HuGmB+&C6{6l| zjRo&AJl-2WO25VO$>@Rn>`66me0O&GoaD@V{UUOg#iY5sSBnq!?~+todup=p-kw!! zKDO+yZF(dBCMu#jdU~11I@Rwxwz27MU*zv4xBbuQH4!rISM8SZ)Xlsgb6B)Idr<<5 z(o(Ar7Vo!N%$<{AnDT5^_@s8WDU+l7HZa`@>-dvfl_A9)dC%*>alh9KK6oBK7i6j7 zn>caW%Fx$pckX_)c=-I(G3CAs{}S}KN^#1qwR06*^Uz@B*`)w(8wDEw#I9p1UWXS^mjL&-G?hUB(5m z=**qDf92NYD_>!n^;BH$Wsa=Bz|=5ty)!|}n<}iQOTLIaa5eAd<1dE}i3Lr6?B3QO zC6MAMc#@Ne^@7kjQ<=pRdp~k4H&y-o*^xPbZK~5=D^7pu{)D4b=N`|#{b0}DjTc(? z8T7B&=+1oRMRe7cZJT!O+bYE@c6xsS`xoaIm-H-(_Gn!`dw$PVcgBG3c}&L>=iMs` zPT~7>vS0E}RoicU@61OA&kpUMelpnkgwX_@=H_e|{n%a^$>QPxbj%Ks(bft=7Y zB0>S#b=%IqS!VN3 z>UmQx{%b>F&TpL$x6&T2=Kk|4d9wGag+B$u->m0SJ7rwk?P~0>@7<-?uEfx?Y4hCv ziyi)b!|TbFLti)VD6;l`TD$M)iNw2x4<|j`94(vsv?q7xbi0yI?DY$LEGJz$_G7t~ z#I5K5Ht|TfPbhrf@!4>#4X5VnL>cp)+YHj%O;4BeaaufitKqTww2gZ1^E=Z&b8C78@+56C zG4{Fr?$DNN_bwF|Pj;X5a+1j&@3=#|yMNF8g~7d|8$z4To}9y1y@vDR3oq$? zlEw@H>ngo}nJ&9`&M#=T%5=Lw|E7PJd$Uewy-m#B(7R4y`z{3^HT<^yYkq_E^fEW4?8E2& zXx-d-cH?ILNw@6Y*k106O!_oQ$u&OeVfUdMx5dmRxpkMdiMUUkdg-Iv&dH@Z;@0-} zp0wSbee-_zIb(14h>{K05;q1UCxk7SyE~jWCiFwx>f`=rQ@AP?{#@03iE~x(w19={ z+PSPh*l%aq8>rMTzTvdM@k`w`&*eItPcHi@Y^-stF+K7A;ReQXae;Hod`f~Bv26P= zCwfm6ti{{LqNKvup462&r{>XVz3bom}-v^yJpxR$P5Gf+D;XM*62( z6}CKkrotbxFKsSw(WIH}YqqWUUi{#e=zhzM7s^WJTnU@3y{L8i<3}4~1t&?W-qKH= zd~Nc!zYB}K^6C~ky*wsxc2Pr?i~HMmaN2cx0^f2FO+>p7map|cL8O0wrC8ar^=kcC_f$G;-399ruot3w7=I=A?CT#`=p_j3)}4AJWeM^nU5t!oF93^Q3n3zA2uwekZrOTGCrpqnx-3 z?ZUp#CO-_=*L;?p@sV#Ko4q`K{V(?|TH!bUszfk-`28{Rg~0QQwVWF&FaBD2IsMzF zrZpYsp5$LXd_C*?^!vVB`QPlNa`*47({24@xRmjg!Z8^zHK61dF@TxAzpEJhe}M zDr+#a|77t!E6z;t`~7*+>JJV_WJ~5nX&qj}(a=BX)oO3gT!a5VpJshJwM~ zH%r~!blpmi%NReCWbiFNDAji|}QL>(y zb6w2#vc=yzE7$0+t~Qv~vgz7&jrDe$e)O6uPrP~9n&s@tY05XcW=YLi*bR0eyPtHC%TqyU=lFYl>PN^aaI4h4%gkQ75fsG&aweWxSZ%a2W-WxFk8qIhG)_DOSWzs^x@;MrvO zR;ZzN)Ay?a^X-&>B)LiGmI_5S81%MXx^|xbizQ@+#Vo!rSFM_}_S=&dJ=0CI zd$(@9aDnx##Pz<98`Sydskq1H+33F6X8LaBNB1*!s+k3o(*8Q~9b@0UCt*R*&X3pA z3JTU*>qs5*mD*d?J#*vK){ko@UYxA-q@eC)Q(@n(KZZY55_0!EIO8T*aO4gv@9X_J z5&Iu23a(FQT{kZu(q2k4i?+(ytbQixweouL#%F2vTXWXrP7B(z+gDK}HX>)D#op!Y zkAzB-7A{M+|M~J_-1F|Y*Y5dC|8iX)5Wm3A>&b;|tNy2vn;dRj51sYhFZz73K(kDU z^aP>#=QK30sfO;_b!t~$c8~tf4xWpvCT#BAd1ra@nyR#`k3_$-&M9g-KHFvg-{2Ra zo8=xcF5bNFzfIREwvO_S4}ynHOHWKZI^q1ztG6H9wyRau-LCGvn`^V&;$EL^#|l*k zpXnRyvWmNocIT&T+hCBXaG-F}sZcRm z&2r{MeC#!XY+m6H-;DcEK~|S(iL9NZ*%Qsr_9#+?5`d6e|n$pn|*crItP{rtAc;A zYR)fmPYcwFYOC_EDYw6ncp#woe9oKm0y|jkYN!5Mv~ErWzoUxPR;xMR&#`}*lK(xx zvgCVp$dWgU6;Jhi{hDEVO+K&g`&0FD`SSTP_5XgBUp~8j-_D!wZL2H(-ug+m zRjWVzO8YBzZ7nDBylCRZ_bMw4SYVMvpbhz$m-#xxwW<-P&`r`)P_o~9#ysa#Nz1WbQT`=diRz}L&+gcgHsq1)!*nPWRcg?!A>F%}} zug;}v_uo@CjsE#JmYx0Gijx;jV{d-O7(rGf3|ciFR(cOKJVhD2-l5nv&AOy7fad+ zf9u`;t>s)|`dv{iC#Rj~AMI(WWsPdI@itg@`bt2MT) zJG8<^VcNk7{{-f(IrnI)tlnBHi#Z_|r^YB6Phe9JPEr~YV0Tk$KGU<3Ibej>6r)<0I_%4oAZS^jqM z{0c^oJO<`9!nPSFBG(Ia{Z16paN_yAH^qN~RpP%Trgz!i9~Dd~eA2Ph`sbSqskIkv zw_7iKUX<@pa#b(t&~-;It5A`B%N`sHz30d$R>+oD#WFL|@~n7}M5p{?{>}ZCD$k!s zCPceM?|5cr)OuigLK9>4ddcr%Mrq&wG)QPXRS4!(bYZ+U|N8lPf{$vB6gsX>6RR%Q zcluUS;4E!@%I=GIk4wT&4JW^K+Dn{2dYC_p=yN?Gn`V3Ld*_?U$7RHq@g2U|A!ff^ z?ta%jcafvNA7mM;t!ETj@7px}QxM0`uj!RWzKP-IKQpcF+wghUL?f2HTMHA!9FsPf z=>Ol4&7!;WK!3cYcZ|GtnEruHDHW!<@hT24?yZuIykB&YMeb-$y>F+I4q!!Rs#*{@s!CWax~U5+@-TCcZ4o!Ag0X-dyFab~%&GbSuxRB}Ge~ z{JgR@c%{_YaBr3Kx#^2apB`Hv%vhHlqTVrGoMT7kM2G8qcKQZZH%ncg6n}ehheLoN z!&>dM^K+NAdEQeY^I4|}eL1bYGmLT125*zDh7D$OpMNx1 z=%={DrzELviPn$6iIOjOFLRwS#qqOS{X~}3@TNuutF*1k&1D&n(EX)wF?so#@7TTH0YbNjc?;2PHr_m_+omtMc|yCi1l zrNw?lQLS~}q|;8Jq1Ddfj!K~wbE>Ay+T6V2NxHrM>Yu!6j56wT%Pa)dRhnmuDqCG< zO)I*hbbf_d;kUZ`UOOM$+a+q={^YgTixh!(9eVS5yn;4;Tsn;@aC3X3#>s%HwHq0K zeFzko_BfEA{q=q6!V1fs{jr=$U2C&m8aQ12vS4SFZrg(DSqqP!-94jlwu7iy(!+HT z5;;s0^_Cnxb?4>t%)~y1x?dB|DHkdo<9hBhWg*J8ho|puSp}Z>`u48+Z0Y{_Il<36 z?oYeKVz#uqTJTGU183=CKoRD>S}tx`ztbk#?0_-xXZ=5C)AA*|&*H>Yqv*}Z`_Q? zS1uKHd3_rN_Nw(6@7NIixyO4-OW(_xcSS-}E{C7HYtI|*$*Ir47oFB8eLALMAU!OTA)p%<7lP@n4z3!#29QZkU2CLumHDQN2 z_+E6i-j=iQs{4KX|Ka84^}mn*|8#lwpI`c4Ue}*rANtRJL12*iPu~5tXa3ti_;3IF z%d+C!cj~s1Zv_Q%4To{&Q%;ya#`l>7P!YTDd*K_uFslKcB80j@am8 z+_2-M!9~*}OQ%}!)H5BL8T&}?=#t9HTZ{g(wcq@+bI!-G4{xWQDOeR;O8gR&HM_?dx9Q@E!?r{qQD{7-*#@w zH}oGY)2zJ~Z>85Nc_`~d{Yt^vhdA7-Z!}xX7YtMVyZ9N$-R$D0+56)+*UXz=Z(q%7 zvPJ5!xmYr@Rj zm+=<*KOBGjF8#3cM%TSu+k$16S2r5H;gVeYi}(N2<*X*G^PjP@7u*u+zaqV8tzqiD zXMaT(p0j?cZCy4 zAYJfssZLUR|Ct^J%@ol;PE0D%>Ndq@Q?8kwnZ{G1bN21wN$37wJ$3Ef6e=Kx?>ARQ-%g3ie_nTL|p5*mi(R$Ei?+{y z<+G%)*s^o0-_&FJrDjKtvNC1=s1BTZscG@_wcGXQ9yQiA;mCb$cUsHob5T%Flym-T zk7Hu@Hf&juI;-dck2u@Mpvy(20sk)+_&M;2L|y-T-=|-<(Iah2`Pnbcy}T})mdv=5 zT3}gG*J^MyHSM&4L3&J-?c6?HW4CJtzl4k8_XdmZPME)huYhgJo`lk3tAp-Ge5)q3 zL@y7oD?WN#&*nkPro_Tj-^ns+@AMAmKi87hm3+bEnXyy7J$Qz5pzxf&qGfy@tV~5| z+Od_DPs@s)nuo_-^;~@*$-}y#C4+zJug?DV z*V%1=bmi4oi*og4cZiH$NVZi!u7S#a*?fndi{cjIZL-VFlk zhjZ4XoylqojInFxw*8*a#V*FJn)G^R-LsVf`oU~74w-kEYWzE_IxRy-EdJ{0m`~3q zyX@aI`?6Q(hPerMSIyPs3okL{_trRbMypl(%>7MYpJZ6PH~M&yv7nNDY5_yt!-+dz zZHW#^h}n?+?#g-gt2MQ%$7gR3jqcODS+g)>4TsYN^e0TI}ZRywFw_WjB`^KKj#%syC8{5`RFn$?&z$59sBwrVM;c6c5BfLTk zmh8tnPH-C>Jm)Vwb%D?y)une>T4j{eQckWp#(m`n+xy;=rZpjqXP6d#?(&fS$)@yZ z$NL3RHLPElf{Z6j+T8H@RHa$mPuoXn*BY*TlfTuY!SVd+oa)$%jtxv6Mdw#>JpDN7 zeNXNov%Trdbh*^rk3E^9$!q*1zU8v#yDzssI68)WWOdc}!)a8%M%VwS^ZnyuUzp!q z3%sm$;v~<6RjPC61V<+LS8h$1XmQJ7UYzW`7Gvs6hfEMkx7tO5(g4>fYi z_O?&w&YoW<6|tkVgWJk6aJhiNgM}X?(k0oHD`(t$!p{<`DBW^n&!)n+_k=cnHhyPascat}G4Y5^Do^2;`O2r3e===p zJ72`EmE@^!ep7ma@d{hXi8pwX4%kmxySCk{D4?u+ht$en9x3|FO&zAY3aq5>hhDkv z$Ml8w-8a&a`(}a+@Kb;Fgu|*9Gj`w4d=C<;)2R);u%weCdTbK~YQGIM(Z| zSLMHyeru-1nm=>vSl5M0PQITt{qrVq2Yn0eEn#=k@4j2FD)-b}i96|(eAn~1n%Hl< z=B^7fbexxS(z8!}ntf*4QI^PvdqvqbmxNlil=3#(SF;Kz&*soEkV-n(|M}~aT|2)$ zNaRUz&<9^)Vr{CUv{~q>U-@bNBZSL!rdwauo-@pC*_3i8XqHb61`jb)q zR?dAxS$%Hl=d15t>Ce|$pT9PD&HX})#n(9+Yqzs`ekoim9-cLM^%~ovvMDY_OB=Sm zkt1CIhtu9{>*Cbdy!k`*&Nnne2cjwnI3B7wDju5#fu7g z6ZV|Cu(jZob3n#>6(ci2hBmhAf*h+4_xVUfuug3-P%(VVP%0+#Urk_ZYmKE+$M7eX_)1StN@lqi~__hwp9YPY8HwzxsBt z_1(HfJ-;mH?^qME@v-H!sWDcwG#f8P98|rcI-|ty@u8Uu<`{%0z4!aQ;Z@#zZ-Xz( zxjg?Q=lM!(-Iy8@=XBb|PEPhg*OTYE$}W4A=U=*+^7ZNE-Iu2IZrLW6SF?Bb#(ldt zef;t9)33eO;fL<%o1XEWe-q2rv4o;^604mooo)&r4=e5aqmZPw?7H&yrP5qhr@S>5 zY{_Aj6y-3#awIpzu_M9cK^T8~+_S?g<~U8(NQk*_eg3D>_NNc3KVF%9K;!_o)pJqt zFqPmx?0yqIw}_;~ci;Fk;md6YW5eJJKYokIvOab05H~5D_^=en}01b z^+3bYFMscdE%+fHo?KkrpLxu8?)8itIY0D|MCeXkzG?CK?8je@9b)_p2gB}P|Tzr8&AXm{Pk_hQ=)#(z1e{QdqUy`0)#Cnle}s^XKacJO29 z1ovZpGN+9nI4L&XzH#tjnZTr$d6AD&k1Y$eQWIxebEfE&ON61~w+O>Jj{`y~y`R$} zrdOZcvhLQdjS~%AU6Uu(PmcM?E^<%&T*NK!+25XQji2fF&|~#`X79-c64Qfz%vGqJ zy!6adg?mf~*&ZuRcTi-mNRQ)kOAhjy@=@T2k%t_QUwJOuW|kzSO|7LKJ(qX_?#{ol z^6lI!U--md?wIIhcx=fgPx?m_UUUFVnnE`0Mf>SgIZ zo^#w6_ctwb^yI#KRj;_wf%|@YAw%@>pVF$8ybqhaFYS8lWhTlXTK-J>6x*&_tK_dn zfBlfzwYYdfWg*+$rAfvL4&j2EMTJkfbqihi!};~e#S9m=iO>HQzxilb$$986f5?)w z*!8}P6*;+^_d99dn(33qtm>n>YkS;&_Rm+(2Aw{|KlK2Ixo2SEx!T?K-;OjIA#06`i=~Y4cd%jjqs?6NMA9zzPH2Y56-$IFnr_Kh) zcsjgu`;pWvu+8|~+qBa>Fq_C?^}SuGC>rw0L@$0atX1n{-9 zd|Y&CkM2|*BQ5WD)4bUhd0(I8opCfqz{zEoGrx&Kv1a+VAMA{mjh}{3zg6IQc!~P- z9KXn~o36(lQ{16B_sof-KH)o-eNdYn_~YIb|Ftt^H{71}Xl_d9&8si(`kk{rUvw{L zy=~mxz56%reATze+T3pcJDUPm9!-gTA^X06t6tDv{X!<%Y1UfB*JsZkxc0$Ku+?_6 z`sFHzdO!W&#@5cO+T^&mKb~onJO6OF*z`Zo0y~TP(yXR^585c|rkC+tsL~@U@`%d? zM@Mgk&hPUc&41LS=%#SoZqd>dOHaX<4%*8*zCSs7tE}ppWcme;DUTJHeIEUlbjb*K zXq(ccs&UqCMbJ;l)BQJuTlVjdTfcc~xcx-oiy-$mX_nQgKsuiq6sWExYjh?(+Qs>$_V!Zw7mx^0_{- z2J44n!K97g5S62N`~f-yPN#27M^6xW12Eq_wIsOwdEI8IZiCeU6p>c zX66#l z>)7qj&-CHD$MtPqOj=pzUQKDsu$lE9M@yD0iGIvAZEtPIDUlA}!oHwA>c*cR1Qdz? zHaisfEPv)&wjieX(1Q5CDVnnmoi?&N8yR^?HHn#f-{G@qQ;SmP1O%|TL>?E>sc)Pp za7SG0-|lCLEdEEdUT7WDJ<8K3dQD|wkfCB>!0Pv>S2HYrd9|H8ee0BSH@q$vWy*E_ zS@GtxZ+OyD{T0H}9WEiV;-RP9?iIRz*<>caZL^o#1?O3ozn87J@$Tj2&;vyapWeH0 zpzJ9Jf9CwDr(H$74@>zs#9 zMDf&!S+nj0T&}uXv@LsXt>2^N_J1>rRFj*Z@=pJEYPMi3r=9cZ?7gw2r}cF>oAh*L zma*MXl|QR$QId|#L)+xt-wDklWE!}Z>%_d2i zmb9bp{auyZoCl_CW7jTBE3vxNnWrW&ds|S!>ccaB?hyL5t3W3*^xIRplRPOqBPUk+ zRy0bVf7D~1-^pJQG4Z};bi>RU^N&j3jhG&J?fm~eCZ9fcJ?P9yn;@~^%yr-Rwh3O^ zt*x_eUANJ>zI=7ahU&nn`I6a}cFb58ktQ#`YgJ_&(+Xz0Jy(p1EnYF5te*HK`Lx;2 z%D>0f>U7oJc`J8Sq;l$O#-$F5iV2J^#+!DRmi#={D<2zw;>>)Jd0KN+4GNudU-&Xa z)%f-PTFGbhN<$cQe_a!H?&P;t8_-bXv0tM~x*>(BzFSr>lw=-z)PFddm zdD3E~geA!;HkD76l0HP5pZ7e?f5=&U)5dhg_Vh56HLT5tG^Nr-Oek4|n)dt(v5#65E33*SY@KHdGO&AnJRhH-bO zzgBT?d-S9y!HfUBW>BB`NO*z^OU${ux8io{{FoV&WEmwSTNNSt?Xzb9)xR+PMzbC7HP=6S&dpA`4(^^vr>X%Mm?$-(2Nh_>Fn4&E~i zuh>4SFP@uy!a~`K!j8FLFN+OuslH`1XZrHI4Vg>J4_r$O7UiqD zw0w2)68(exEH7?qL4}p5NSjPR5dZ0R@Hs6HK_6{!iDLnB_RPW6c34>q!cE zxy3@;n|4`pIR?FJG|5{hVSPO5;nQtmd^a|Wd$btDC*^%~kbisepg~+&%&kMAJa@P6 zzab|oC^9|VGdM^jc*d0p9%dB}FR%*jc4e75@lJ2mroP>WnM9-NA3hCEKgB&mO;5^; z&$edTkIV-*V>I)m+!7Xiue20F@m85~ zocV^Wd~;u3Rq*U^opBrgCCv zrrx$w3(nrUs-Y8}^OR*%aJ0tGGrHRP$9em_^catA-#YWt;?7UisSovbIWOb-S9zFq zH``j1rbwM-TI{z!eUUo5ci-19?;iJ7`^&d3IdA>t*n#;g-NI)I2)?@TfN`(X!i`TtbNB&loJEq8mv8@O?Hi7Y}WTYb#GsoL6E@=z-BerGk+@*9$DbvL()h6c1 zOPfoc)8@CaD^#b%OD>9@mh^Lm<*ln~3QYkw8>dNaIBEXCMt6DL`Ip?06V2@Ay_V^E zn83eNE>5fLrFC<`24@}H6Kj4I#3l4rNQ1w78Mc|MPciB>oe|H$4 z>ALbf+j5y@t@++*7cb4ezJ1~G)QD|;tozj;&t}%t*=%Ahz3Hi^pn2mNfAepKe*yy? zxYx#9+c~jGAxLP!_Ld@rvrVCQcKR7DznNp!8h)ZOXzGQtY6pUsICG0xOxWmN{^F_m z;wf`}Xxxo!+qLDGSm@^Rj29`#%y>1EFD3KdH+%i%(4<+reqVL_{ZRkD*}r$e6Q;;q zPt9-K`g>A~)y3Uw)-!#ZQJ2kn`16O&e{XL({rr2z*Mmkg8?sx>%D2zcSwG>>(;9b% zDRz?OHvchH+@LiVx8?>J-y;ySnW?`S_hQ$#VW@iwo^ z!8niD&nJ_lSf?tSp63)cyQtvCV?MDp8X~7JSYO>Tf6m`aKl{FUUXpoo_WK+kWAn9= zjBWy6#WkV7Ui8_j#j|G1U07VkxaZ(@zBOqkmUAwePDtFi>)NssCYEHM8M8jB7)*$e z+~WT8Zc56{PiJhle=K!hx%AtK%gQ35_NnE9lPd*oebaPs{AO@-$-QOX-YL$m`*@zb z`A}gkv*zdIT+=9zvd7t90zdEgWa)gT@pNKz$&$5sy$0;QmIbKDiEe`%LresSiT3rhCol{zV#j_T*H zU9{8f)zb1W}tF-^fX(y-on|3(r zvz2HniQ2ZUQIvmrwxVoT%qFWm?z^h8x9)hQWhk*onje2KE%&n7w*2`{7E8nunQXW8 zMgHJSVQ9N}$Iiem^+$8;L4)6yreEmS+2^=DY2m|Z>JDEH%1^Iz{2BK0^__o-f3%W# zC9<~unPakc^6`dyL06iB9{cOu4DsRJ1 zt?IS6G0fV+iSo|1RxIUM-qlebM--=r+ZqRj=(%-ZVL{I;X!=lk45R zZ{K(7zt~>?O*}&I?D{YB@Be$b-zbZQC@X{|X^HiSr<>F zPM`IEk?8%PX4}%4+ctlwDu}T(NH{lj-eS2!C1Qd#XE}a*eg1N<(!x7n`oqJmr^BAg zUAoG7r}deBS~Tm<35l7W4h)+7OgC!Z{qEZG{P^RSd$06d^@(~?FL&wn_O&J_qCSa;91L%@d-cBKfx%p-Z24VD+#yZNJf<+&?Q=^!B=WL9 zOJ!48)~}We`@MR;uvc=ru0Fn{sZ?aeCmyDyrWzWro68y-Uw@c+F+tCm_0fS?4WUN9 z^tSou*p^iM{#B}QZn4Pn!^^n3Qr>7PTxc)e5K+x_CGpymi5&i&e8frXG2l1>Ce0^?3xjFUo#ddaNJSz=H!Xg zc(Sa?@mc!vTkoV(qZ!;<`Mf)hpXSo+tjoRnj`f*7=f%4B9_x0rax!$V#NO$;ZRi%* zlQJV%kT13B!;z*7echaFYOAaB-?yCWIC1%3jdO~Ls^i_;+kQ9cW~Mf>HF9iPwp8_q zPVDnn?|*NtI_fDpEkMtk#jhb|&pNK_+84w*nfrn+wsPK16Z?6>TRB$p>Si9>%;=yT zoyILk4&M6n$M;Nh>3tSM9|wjq71epUD>g>n3KCw_we%L_DeXBcl($-5IQl>*DT!^m z_a+IMkAB&TQd$$kTkjWG*Q9h^+WIkYt4%GN3ZG6GtL>JX{d>9C#inx0glZIZaIBcL zdC#twDawEN*K@U&oS*)QS72Jvq}0soN+CAhlR33HyI(Cm_&RvwDm4fF=i4`keO7SK zzp*0UQfHAx;+^`0cS|2$Wb!z+rAo6#Uvzcl!P8Q!wll0Lonh#EeEkjHJ4y#u9c_J* z7=Lh;bBVn0_iKNac7ACJT{2TWgf!^^dPk`^q60iiZarM3sHyz_i*!pTj=d*u3l zt>JD>onfN(>H|Ng3zLPN-MYiHolQF3J1<-hB8bL#^w>0=rpE-q+cD51e5$F>t~ZTaW8r?g z)%PcS;&N`dx=7^2=k<^HilR6ie*V1tE-&!)tU2i)*6r+D@ORJ3{n;HAhdXx~e09vX zKYb!K?{b3Y1y|%w2P%#vn%06p;3%`uL+-QicRD^vB=#?_c`k1q;^PwZ zP^e}%nE6v_&xy&hi>4^;R5ZE#=|#Im+2oS*%2kp&Pdfz^p3J^;euC!tm3rv_ zeN_^*()?SR?TyEx(G|(vkA6%D+WUSH^K!O%YnfX+ugr_Q8yUzw>+;G=4+x=PMae4s_hJp1_xzX&wLRKWKrG7BtJWz^KF3p z3crGqpQ}D^lP^9$^Jx5~iHfIR{e2q$=WWTaA8IqqpLtK*-~O+wEPls1mnC0b|6E*L zQuKZ5?x;^Z-hEm{yB`R;w;xY`Y!g}#u()XZIi~rn3)Za>PU3QK3u>Qs?o*wl{+=BD ztAFN3rTKjJyLO_be9GU&;fo@ot2fU)5yMr!>W19n$&;4d3DSKspR@Cx^;yQ~H{f!`}O43N7baaU|`lkJ>J+n{r>~t?OplReE-po6D(P(vL$` zJTg5c>{8h7{^7kG?#;~J*7i4X>p8uDpT(za;p1-TmihMKX@rUY``g=c|82;&%xK~c z`ZGsXcSc>^7lpH*E~Y16@SMh4%p*|g=XXp$b632I*D4Q%~8);yN31N{GwZ0qs8eY~f~B8l;W zQs+F+yK;T)?>(H3ev*IKn{;ccQR~ckYI0MXE$95Zn)*gS)krM3NtEIH)q@s?zNQ?N zh}LqJd3x3F-qW=r{Fdt!uJd_Lo0-;eM@RSQo#nS}e!Oc_EP46z_$ALIwuL`$8(utf z^2j#Z87EggV(nCGTCyqP;^q*Mf+>$mzi`*wvd|BA`WkAI{I)fObs1Mp!CfaqfjX*OdBf${#Ni+xBXD zkjHV>h1|j{i6_$owHk%<*0oi*>$NOi&v;zKv28=xQ+)@qoA+{KKSVB;{;@==R6yX> z)r9(teu2rZ%qEII%Cdrbx2VRYZCviKwc(u0^_)8wwn-(u<5j+RIa@@q!M}1!k5cy( z>AoGa`Oj!hn|FNY!k4LHs!yk^$-SlZvF84l0$Kgz?;CUfiv8?n)pnH#Q1Iz3(#H{I>LY|6n~Q)%Qv#xY=fdN5-D)ykimmUrK)0 zy*<88>$um>3)Pl>8D%aWtkVsGycXYbo-y4oZn50DX)n?pRrhK7Yas-@Y|H z0Z;1QZkD$H_vEtt-yf6xMgErPM-izd05* zRr=?d?(Ig(>Ii*wW!g`Vc%E#o{R(@vmbn&AHV6v)a6gJv zWjE*?wzl!;`WiKP8V-1(bs=6Rrk5hijq^6sbAX)8bebR-<^0nVco8GS5(-_jW#gM z=!$=S`00yX;;}Ekc=k$PuK#xAN?jHEvCdl2t#Yrve&E}h(Y*9@)TPxqjbaOT7r%Tg z72o&!D}Uv>xb;`3=UtDxYIlwIZsNU*#${gBehm-j?^kK>b$s#ovvgU#&-aY7vMawTS2urtzy1H8{a(*bxxe83b<1$g z6}>gQh6}Q%H|z~`KEQI}f>>A4OjiXlxl5s&!%{+K1S~#1ry}Cb`IdRU>#dERF^3wq zZW4WyX1=t5XbBfH;n=+w2`PIK)k5&E6Yg`)_{*}DM?;PCdzUsm? zwpsGE{=$p;U%Xti)T`aEbDg|e%-hS0x>I82GasIz<~_A;>3{x@&7ahjX6$ECy*^9p zOJ1^TQBKr;4VUeO4`<{kKAhy2p8NFc{8ru^t0O%+X=@MO=TN-IY*+K<+@ai`TYki^ z(cOOgE+VwF#S@GDXR0<#FW&X4t{Cm_fnAQii1Lq;mHSuOo<+61J#p3*Ns(-$GJNQ+oW5%k@y}F+x_uekN^XE%jpYrVMF}X2zOZR2({ky|+ z=A$VS1WtbV!E9dmu-!o1MtTp+q!NACOSN8?CKr_!c>SE3q*T&5d5y#z_0LN-K3KBl z1E24uCw{VA(o+`-Y>=H|;2OHg*g;}Nbl`$y+s9wi=jJ{2-V>;7I;EzAOLy`?TOAGQ zCHHSw9aTKZ~i9kgkkdEvh?NEYQz=eNfQ+(t5+0uih@? zSaTlVqqFpKvPH}jnH@~mIG;>#0@i=SMZ8r8UqpX1+BYnLVR)3e%F`DU6{ z^gZ}fCX+E`QT(gkCA(%EYYUsBeRakqL)POrHZD^3J9q8u`2!~&$+j`Qu;l)>h3)A| zjftyR{Pb=HtA}o8jakaYJ4+7+UPqTuO;uK3KKfKWY@b|GV zTKmjTiu&8mI_-67*#Xwbx8KH=wY3`2;wcY&PlY7hZg!eCVUuqNXStU8yy&#Wr=GjnuDds7g{svp z^P?;H&XldIEP5f~w}1QB-`V{0^7QgAYZrchy)}Qj`TNMNEk3gRy^)RcGE{d3dbuw@ zyk(X9wLJyB4}W|SLb z*?gZIz4zW${nK`_H3e&L-xAGOsuVVTPJltD>r8&LbxKwLUY(lq;_dIXS6XI0;a*Vb zS=8F6I{o|im#zhWMJKlPe=Foq9%6#xeHCbXNOE@ThSpn z`}zEpe;j7c3SpWxX&S2uPn=^_{g&k8Q~qhOOB8eHx~2M0I_{PrG2_juxe*TARhMWe zZ`F^I-O;1%J=y z+kH4F>i?3*&MNm!h{dd3Ri%~!$EOO%)dt=>+_x@NiMzj8IdN_O+VtF%ujzHyE?)F% zY@Sh7;~w86$3185>S@C7o^5lLKht6yD6PR#?>TM%yw#c8`!;baOv|*bbF*C{ksc{- zwcY2#6qile>1+E;CTYJkS>|+`tNV24lWhyc`!+hA*!H6$LEu@I`y9!VYOX@O4v|;UzK3U*URcY&`|`29fx9=p z{Ocg)Z=|{nbcUh+VUJzsvx_9+_y46^M zmA`QDq=s4N?qAakvg--T`r{GL($fEv`*-bK$8@F}%Watj66YR0r`g5W@<>VZ=^CTW zZi@;o)QQPnku6&)c2|RA)w>x&XSU9*uCH{v4+qr#Q3+lphCYQd}SiDZ;Q`Pd4OCQ%RzO{MF zvIf6izfD^^AG7B%T=ev)(J-_q7B0@bx?@B4Y4f~$yLMh!A6c_?LQ8yx{*l=g5<2fM zZ7SY7#kfM#>eKz+W6SomuQstf`)Gk!_4UZpUlf)|YpL6`9-XlC63_Q^rq{(OT^qDk zhZ)Wj^f>t;AVbwh$MAXw=fq_t4_d3Tt?%Brm+jrr&?Mg@7QE_+scz@-RmXZ=RCP{N zJv_yo$`@I*oaO7y6;b*=8G)7>jwi(TIySJS-d5XiF{bb5L(QW)Ywk|@-jmb(P|BN2 z{qjA#qsgo#ZVktzbAosCBs zoaP+Lm&$myweW?b$f3mf+RVFBYde1=nx_k7xUB8xp5p%YO0`zshBwK^tWR_!mrQc9 zePa>hDCa!MYpzq!>uqWiX1O%;eR=+GZT6>~1*&V^Z|ZU=%5to8;5BYd=twVJuw{)} z0Yl%>V;9${RQ)_B#JVx_WSC>dbPEmbhs^#L%Oz$!T&be(cJ5Aq4fBR=cu{NiPnC&USAt$=axSy!YDa(^@^D3iGO~3@VRCrJm4|EouDjbJp^# zy4wCZvp#b8COOUPQn)bxi9u57rr2|+PB5y`pW^V@Z_b%^p{qB9boS(O=bp)(Bbep6)yirOuOG|t+gDey zUn@3D?~rOroVDn|;V{Rv&$rjM@4n5yv(iH|j%Dkn7!&TB(%A;MzKe+X#F z_TzsKmHyiluw@|^o6%JlnN7bQ=l$9`gOfSMwj!x(BCE`s4R369R$s7tpfp+JyHMEz z7TYkVF8wC;@)=Q}6s(77mt2x4Ip?v<4Z@_umtLedBC(;AY_J*cU z4s`k7_446d>BxysUr+iU!ZGd4Q;`sxvxdUcEq5%q!j$zPypJ<{lK#F9uWCinmI*f& z-q(yuF+I37L#FqzX^huG8So*Z(w zI<|A2IGxlfb;BfUOVj4lL8(jg0*WfQLZ0e6WS?5t(dlJqfA@-Fu*^K^e^SY|#(Ts6 zMo;;${Fq#Zi`PQqr3+K89^fnw^Kn1Am;XJXG3fou17y%ba4vS#0FyGM^iXC*yWHTL0u60ZKh%kr=3SryK6Yl{yT zemvN!th;{whk}omk9(FM=i$G1x1xl853fPH$OoS{qE}}h`4x5ABG@3XuV}aWk#&VS%^KWK&hn>6yYSB7 z?e}_-QfSK&d}QU0hL2v0uhqD2@Qa9KpX|1C<}?k(bN$Ed@;^GhUVqy&wAaGzc&Onz zty@1Q+rcqGWF0B_hR{bxr!8oA2{@`yu)lu8WZSJm^LD-Nb>99c`2BhJmkZV& z{d3^O&W_VxYBzWqEt*@wcz4m%yjyL-MmH-yWJmVc-$|+s{OsMEuFC^0RQ=X|mn}+W!qo;t>6V!q4=#A821pw{;eC(}g7N)7ZhlGZz1yx`Y{UkmrFmz15qzwyPruBAMU*Jqds1$!no z2b@~G?(V8yv5dmN14_HpGy8T2gf48^G4V6Y-6N-h3dJ;I9i+ZzY`a5AvQIKJ`cHtSfTAnNNQ0vJg?_ zRV-gJzove1-2W${UjxJbK6r4)^|SACQGf6KpC5|q?b}&pdS=6xFCVp^o~{@4;#n7` zdh*%J$6wdp>YeTF9hUpy)pD_dpNk)gd%k#-5OVFy$5~y9mtMa3De>>h(^q1W0xKkD z>@#b9s=lx!(Ns-&U1(Uo!Ca9KPHRP%iCXBtWxXh~eg)^gl7b^Wua19NQmEd!@~npL z`y!2)NgaRsk9xirG2(pFv3T8GjxUQ|_U($5u~3*(?sjF@vzW(o0^}oCeOgkx3j%iwfKm5 z`-+l+ITtmBrVI1FIbHc;TIb#AD;Mvx@w_@GF_bwpC93$xvI|0MxMx0`GgqnD|M0~{ z8~At2WEbvbdn7hpYQp<-D=!{u)_x;9UpzzJZ^|vfecqq{MI08sWV&^+MAXCr=TDy_ zLbtsRlnRrHN@nRhu}tIR$q7sntX5sG&a!(~9k`}!Ua~*q-p&K&r3Wqf{byL;=sKUl zEYM-T%1_5%lbgSj^-zN5k4?wg+!P;W-<+hi^HbroQ(N+79tY*LoIA5-X?;S^{SA!# z^BKLAPamJ%$#A@0Z)%Y6=H%cx{)P?ybpk&BR1%6hBNp1eSCovMw0YsL(qyk%^=PorPEZ~yn@1-i%?$6{;6=|`-?xdH zsl^2_1?{h{|Nr08`23l7w;oIo;kvbNOM=c?_`mcDHeSuf4OJRnrm&*=R9fi|BGH>9uGelwr~pi zEQv2J-VoHN9umpYeziGr^}Omxj+}EDQl)2a)J;s|Ub*mngsJ|{FT$OxJIqe;@7%JB zGfwux36^fgI0;$HT-hyC)APAK_k238zUx)dgeiskJ0x!dP_7bNfB0N-vZLI}NrhAO>iOR-ewgxV zh0Tku+^9{OA=l5S$X50?Eo5`c%nmsiSh8B?_^I31CvEMzU^_3qDukQ)RCUMpLOq>_ zzh-~4{xEM>W-If}`CjfX_pICI9@(ZG@qEIXfS8*L=1={VYviR0SVK(Q_UrSCJ%bIcAH?_28 znDyC^b!Oswwd-b*AmvaqVwlw9`|eTJ{Mz<;C{zPvLyHGmE6WvCK;~scb6t?^t15# zckaR|ZDAeH8HcQ_v}(^}HTrCFedfAw`t*&ZGZN}g%rF!0dzyTD-%}s2drFz7-e?9M zIAi9p?w(SfrJ#GoA-#RIQ(rb7UbiqjG?r`mLd#ll{-EjWu4x}M;$D3u!{PkVrS%yu zF>VubxZ_ilOM}Yd8RsWSshm-?Hg}r1=(Xo{hi-1!V}WX1y_W^^ve{DteXS#Iq|K=9 ze?FnucD~mS(ew+7N3xB~oo@9`jBtN5@yVeb$%@Nn7A_ zkE!14I3@ZHZ#mQzVSl6jwO-dL8L?M8e#%updU*SK^@$T-4!NHBW>IMZMUs$nA{?Hd4&kxoW+omS@d= zz49r&3$+6Dp9ybTwO!_1!5i=BO6T2TYM0l#J=v@i?A2vqqn-0<`jIyd8fV3iXk24U z`Sw9syu*3fcd|v}L&OHs?U0-|>^?xA``ma5=D0 zxVuE+$Qe`pE#ivzq#0-H-I-Zc@1W~(_iU~2?q6LTw(a8XRTdTBbH2%_-`QWAr++u=P;G?o zp0{`XPOh&DKPCCJWad6juGf-b>fiovn7&WEaperp4@}I9ITrnVe6(;$=apwSs&(dZ z+Wrh&n}1^!!vQJf;H>FP)sHWJJC{-%{Kemo-AQD*XqMcD$2Y5-_-d~%t^O{4?o0Jw zr8}lSxi>`?Zc2<|J*hqYLUi;_+0HEQ&fQ$EZTLi1{SZ>I;Jda=-&o|F?D0J-Ym%Gt zU&^lhrT3!isKp`X4fcX&GpD6|b^2`Z_r$rDDj7c8v%R{;-x?+*&4@MQzu)tev(~~p z{N>b_mQ!~eZIy=Dz;fQ7R}OJxTX> zmylXKPiMr4iCEM;wz-8u@ASRSW`AFOwP(8jYyW_*KRO1? z|2Ma42}CqMu=G0eVERWUJ#)(m-ihoBTh`WGbNu1+J(4kOLebA97MG{LcRMC_Q{q73 z!tLj;_HvlV-sF0e9o|&n+Ih39WLo^hSqxo&+vW9dPwksoGil;i)!VL7Op}yNMNMOx zly&v2S*?4g?VK#QwBa+0kVz1W+LEf0$=qA|e0TiQztJ&o@{BctF5T}B{&1+Y+}-45 zyY=wF83z{$T(M@gTr^YV;fv%SX^7KIC1*4b)_5cOjt2XdqcV1?a=&q@u$yEESatt zrKS+z`BQh-^J2Z+v(4EKvMVe1$cEnL@OrkfKE3>JyZU7J+bn9wwcR~7ZCbUUZ|TO5 z^FKXoEM0$Mzi{1Vs|Opu|G4?<+OuE#ubc1xRrft;M)sain}v>i-{OnZ*WP&`sS|h z2X5~y3qD+3YGdL!!S3??b1IK=cqeIe{$)S9_l&-~+%ieU?=LG??OE2N{cr!n9?_>? znq&n1jqWP3<*vIQ{~)x{M&9|)&PROv0`5I^*OfG6Z8cMP=zYCygFpY_12cDiXcAQk zeV-xKZ@1Z6U-8PM39d@4cXrbrws zOnJ6Bfg$6Ciko<4?yuaU39aidY@B^YUGPTj2Dfilw(k$H`SbH9!-pknZg<)AoH(cT z&+ws%LdGwnRO!-)V+Sp7-Y$*3xKp_z@RZ8`)y+&2`o&W@;{<ZDOI4M`SPv5Yu24x zH}A>%?Uw92H|uuxFBjc=yhMD4d1!`awGHd$kb`qASTc3IwpP_OCVx|O70yd=%GxJ0 zOMmnCic2DMLZf{=`=aaJ-(UCbh+6BoX2G}erQ3zLb-p}0ymakb$!=YZCy5Vk?+kH0 z_=j(T!S;n*mv%Fp*6PbpvodTj`02Ur_RMaE1&TSgUbnvrykE+j^+j-t#>0%<%ojx~ z-7ig>o3$dhAoWhY@rtt#%q(A7ZDKYuDeKobaLBXZ0Kby5D^5UE?h7#mXQX za7#n?^@19Y4GA?CeGA*KbD96&p?k*j{i8=h*LFQmdq1J9;rzRYbLP*ttK0bN!(1MT zn!velKJQll#{9hd!-sSJ|BY=QFaCac^PlRbv(F#=@u*O2&-i<*rdhnK?qEJ^)12q5 z&i1F%FMjwNvwCIK?z>yQO$%?byL$f3UxrIw^B&Cq`NQ>J)U$x2!TY2$H-BHVJGka< z?6NodT^ii;bLF-?UodD4TECDJX26{@uMbN&{%mSY;&xBhR~X5*Fv3zptxUOw$> zYRb+pN_~g&I{c2mJNl(FRc4vrd8yQZJ?dMRo#qw#({$(f#^A~Ine)HZpNg$wkZh38 znX*du@wvyRewzBaiuRpre<_e^`|K1ao26{ygsI1+FTO9}U%q9h)RiEIMG+Q($+h7b zbGCR#s+(7^xoJ4MxVz3fyX&HmkNvb0cm7RCSn!#Rxt7Dgx#1*l)w6bnpHp)eFuAPq zj((KWy7YiF-|R`-O|-;V1)u&6&k@g!tqaU$zZInHl*_(#?SkbQ)xY&>I(?a>wR=5v zG#1xxtUGz+YW}hyv&S#xA2T*g46!U;rgVet!9^~HbMIyxczG(xBD850i-P*b!p}Xg zHRhSg+4`KCRjr!-Z7zpR=c;|jrRu7V9bKBvJkKKctBlr1X{~=L$Bovkc{PLQPf~r; z-(w7(Z>WIR=0$cUNd&nZ}tN3vE1q=<3hiD3Nhw4WqTk?1vTS z`bFpW1O6uY9cNcxQurYlbD&1qr$GMCby4mgw_Fa+Kdv}a z{fK4U%2oQ8L*Fn>6}|r>e@jC|MY%(XVRw-5S%!6?RXbL=YDZ+Q&Z*_MIO^5tCAxbF zZ_?t^@tZ?q9gY;g3%to$dj7Bcr4x?1<>lXhWtXqBa}6}IDXN>>*=WhzUi4*&;YB^E zBVm10G|yKr;r#SQoo#N#e1kU^e2;vy;Jm*(wdL4b_U+fJ7S*0BR(h(Pk*!@CK6zT} zan;1RMWI*S7Vdd@EP^9%={JwJ_S^@9{z|`6d9?hWWovKcDXmG$m)kdqXY#!B_P4z1 zpuUccbIDp=`FWFXu*CbsCwup089o+s3M>8fnEhnZ*9FUVpDa?SQ*_}tGC^UMr$apB z#Ttf=IVZMzTe!C5riU#Tve21zB~8@nuKe;NGRlEIxuQjLwk1nyf8>b#-!b`_tMsL{ ztr;y%M;5%?(XVq*xo2%si|X&nhUM-XU%OYRsQ3!MPVugoDzbHl?PI@H#WNeMyH{nV z#XgTaE&TJ@pXm$cK6ZTDc1x@!c16?dH5?+5O;t^ehRjoP5>56@x*1wk%HOHHZdv!= z$p66&-`_`SO}pt`aWYYNpU2xT8(j70h?*H%nCuV8_WaZlX#9Ff`hyikTXq>Nd%0oz z-C1fY6x>6uF29;7vUmAjxAawgwV5A-)NaPj$gv4oJmb+U_Io)`f@fPSO)m8fWILi| zckBMbQ!yu=wt9Wmxau#Qn(AwR|Ij7=8oNeu#q9+)ZztT*sZx6Cv79g6J9^Tll?Gu= z+>%;7GkkYX_$%(%W&iO07eQAh;cZ!ZuI7?%`H-`I3Y^j$$fj!~@s-FnV}h^QxPf z?h-NeV>gLF8Hn{?>e z-%3)3k!RGVU;EAAw8yv0TIFk2upE1fx|qG)gapZeLLujm6*}3>@BRtw6#sDaL~CxT za>dWk3Y=pp7uk0U3}o;!^PMA*9zTwGwaxIwoMB@sbnih zNqBB$KPX`((QLElp~C?K#e^tM& z+49z0=H61_)m?k5GfhumTG70XGJQAZ9a^SVy60%<^V0IockaGkeva|q*Pxk4Oy_Oi z()2t0NmSy5N^6}CKla;!M`N7TjrN&k1t{GY;yiw@DD1cRr=w`SWT&ufMkUZo-9^aTRkDp3G%4|F`0K{O`T#{_FS5e)r_k z@7i^uUp}mOZq9zMK;%oiaK6pXw?8Y_*I9qr``vlpEg^}^6aU|v&2q2R{)7A3&i_Yu zl}r1$#}ybGh8MDI2SdvjBxh7L=bb+O`^DGydztH> z_g9TS)eZEYsD_+rHGt=?tjRXIioWK1(oNz^^w0e8o>rIwBKI~1fc*)jW_^-S7bLMvQmwaY>dgCr+ zefyBVt~35fkn_eX2Tnik)xWp*bKT>oO!&g+ zu2j|B+;JdF@A9pEueQjs^nMQ9{M7sp|KVo~_C8GgKDVay^xW4s<|l;BP`}6Z{IGq_ z{CjR|=Iigfap#j=-NVYd`diFPD|R}+U;a_`~^q1-RoL~Q&QL5DQX?^Jd$|G&uzg*)sOSFIl#59qIX#_WIKC8wQVVSj>8U&~(?%FRXF;mNMT`9+p`< zojbUt{qHlW+fl_Uj`&uYPoCj^=IW_`2iJR^^$IpNVKDhA?@+XML2vHT#WJTVrE0ip zXPlpKt1jCs@Wzai-wT$PuD3mUOnZ~z;+K`1OG^#8mNl0>KK{T)scMqgj4B4k_PE8{ zZT6|oos`ISJ(JnY|4fgWzWU^cJ0dh*T>sfL4Clo^+> zn4htcRe$;O$}_th1a@Zs4R4Gqcb}ZO+1%K~=S5i&XTdX8{`?a6gAGCkOn3RB9`D&V zgWpZObv@T!y|Psob012*f3C0ocb??$1)L`@=cyg%Z&Zq3?lj%~XI{cH`#p0dmo{*> z&*C~Vb1#F&iG10st`k^4GFfNdYLU%&eB1H&pG67=B6k>ErtdpaGwFY!%(_7KSqswR z{G-)tLoU?we0W_aRGIee<$;e?T2Efr<<&$=#C%_DxSY2tw(Yo~{-Nf2)~Tr%WKU## z+;r&bH(u{44=*V1cs6muw_W9eXZCqtI_4B1aj~RH?uwhxoVVE~vi@ne*H{19XUhHH z*)z5C?mJcHlo>GYS5;hF{qu2Atys^#x$n!P7bnO#@G^AY6y()!_cS=b=<&74g1h7K zLFV@B*Z0O1UpeBb#HjKoj-k};?7n*8o^@%Cvz{ILTIOSKwthBeg^^mFJ$GaCqsbB- zicjR1c<-3=i?O?_u_jyGYsKw7oLo%;oYVbSjwRgqU#OE{9hlZe?YMuKp ze)(f2v$|x-`!-t(87+UVPq!P+K3OQTL65n2-R}v`TuUZ%F1bA0Pi?{;F@CMi$3mAS zoHS;)`xprW?B`m`E3%VJac=cY3?K4|3)uLF4Q{42i>q==A;&s%%X7M z>0OfxH31LwTP^3@wQNywcyU3}$w$NW#O_Q7^@CTx2<`UXukeBA#p%RX4UcV>O!#`$ zcz8PVz}v%3e;3Hcm>mzVTYvpP-@RQ$5vg~L{e@yr zWGmKu?lYO@8`>D>d%iZOLs;g6%!C-*)ssH=3LX(RvHzXKVNxabcDcgUK;g3PC;K+N zbM@DVIrhNcJ}L23>xb3}+OsUIm;H6fJu0lRH{~lw#|cK8ljgtA&TneuXbxK+{UEc< zM$_l`zZXee&Yq0%hgzJ3xz8wDGN-@E5;K3?R)24XqUhTj%O~B=t$e;=Kf~g^tG~R} zF%-J2m6Ia6VZK4z6wgK4m6vk1E|Bzdkx*MEbz7P1pMtq;aTaUl3htVVuUIdC)2VpZ zc#w6%^79u@ZI=C5z&qtn$K;4B^Y=`uDm<*Z%5g(ADIDcO}wu2d-M-(6l8Jt zdCkrG*InII;tb!U2L=H)C)vIx7n`)sGcnk)^WC?^hl%??&M(!tTg$x6IzxD?fnuK6 z@#(i}_urQLP{G+fLq_QBk!!ZUkI0pOP%)JH%{JrImeQ0n3w|pmJ5)?+X<6U2(PWxG z>z{MHiENVMw@ez@Y)(JR;6M4Xljm?^^qE47jFR?`Glg5f9bnXcYML88A!E^_mKg?8 ziz7-VoxNE1{mYrh#-F2hTkp&AInKG1)!nv+U+T#BXRa@Tj4xQsJ9pyy-mI4=_L%KE z=vnd1{lw0<9~bU1=S;Bn{n?oFbn?3+@2%%N4Um@ixAWopW8Tki`C<1utMe<&&t6=? z9aT`zaH-O$(Ke{(;3;`QS8ILCs%I?Gp=<%qIqx%h25xJ$dA6lQ!-M@XpTE8PZjs}O z0W&k#Z!%kZ-kf!9^=6f0f+xS9Et769n_;KucK+k*Ww+Z-#$~pC`?Jhk?w4-V(OZ0? zN$+1LIGYqp_?=fYo!r7B>$>l|*7A8TkM6VQvb%Hc0sE@sZzW6^>l*Jii8VCMVC0&6 za)Qvm=2+q%~(??cr-M9py)UZA_H{d?LUl^h;x{^^|GHdRhrv3T;{Pkc7=Z~3;U zciEm1J|}wVfV9+k4$i%M-aqc~+kX0YZobR`8JA$q-n#Qkq|LXY?TQ{#cG4<}`$Hy`=^Vb*c+3zfo^{D2ej5Dv$^~t7xl0W!L6s5)< z32?KPzsq9#V{*nZA?GFQ^6yo1A7`+eZ+?E`Cbs0pO^Kfua+E6n_X&(ckr1iENRjs@$7N~k!@f|~RofWH$PMV`Rp9aT-V}(D@CO+MZ?6JZ?i99dlRtfoyV3e3aPGH17q?wM z6aRE}CYFI zeP}zu;V+vVpvW4q#@A(|VbFd3xn^bjUb_lA)|upUX0fa1OI_W3xX4t*Yi7rjXtpo< z|6j(pPvo_DdFZ(;&xU&E%9owHEMCU_cFlkM|Nnn8gLgj}G$qa+`)e&~Qc~&6Y<2wO znf55)R_@4BMZE07V z3LjTK)9&7j zSvKBU+3}`(d*rr5apD}^feC6?gDT&x_PWqMZKa^B)uqZKJ6K$qnI%+{O5~2ZZCbGO z`)t{az@9}vqaW2VXoM}x5D^tPY1*hM*nL1TE%@!6bxBLs#GY7|DN^n2`zA9ipljBq zHwrN)XR2N{NHjjb#_>hT;l725Jt}fXQ@8v)(ZPA$QprZj+tS^))r=7sJ`+ z&t{yR_xI@GP#L=e71P}|$`&oxPAaKAc;4FOxyKbhL%C&-|87{IDA&C1+TO{tgzqpv zl`m|JY0=574+@@pB~gfRGk3XW%{7~In=JVvH$6dn5Pu;rG{E_Vf3wyk{!2#CCdONaEcHn+`wWeG_-KSCz9o&HB1z z*BymAjZS9M1?E1I;zx(&s!NL!;*cs%y z-`uOZd(^F2fTKsfJI~0Pb=qa?zx$1?_P*;AyvStz>F@6&vzC4RX|>p0$}i7tgK|yS za)pIk{OW(6|F6G0mMvd>{pnCS-P64Dvd$jtJyXS_Ev0;T!Pl?5nG4k$q^B5}`te=U z_R31+Q|6l{TOB!)Kc_%|bHC5v|e8CaHHs-f+yHyE{?Pahd%Mwr_`mU+>zkzAV{$ z)3jr|itaR7&Qd$7W|hI0;3INZ=(*mCQX8{I8$+E}vy9?58hFlX__;{&{mcn3|NQiq zIz1=9R9*MMxzC?IY<}5(n)~ncg~gV_>lWY7Fi8HhyIbL(d2{Qd`wC~&{;?`&J-Tlo zr}pveQ-go37FHj-9D^4#m;7Grw%>A>k>IVLAHO=d^UPeADD&z0yVtY+-Ij?x&?xaG z^Y(`wf}dHeCl%=YWb@ysdfI)?Ux_QCwuc25mrmWE>y`YgV3V2r=^OeRk8QA$nYwEI zf%NRz9?U;C{#dzVDfiOXMccQsdAv3`^5G1>SG4e^xX)(Scf4Jbn=5_n`w6BFyQP)) zW)x{;miXUzvO7B9&NsMv*SKICVR3n>T|M|A}o&l$xL)*p_S#FZtmvOPSZoXT*E{dWOxzr%k!fqTbNSoZzcncSwM^nOJV zPwC$mD_DMid3W;R&5MP;FOp`8OE2GD+F@38Vk)!J!XN)MWiE6|&YWv!W;ns{tIdkf zcmHkS-+lT)Qqj(iFMVG3Z@d2g8$5Hi#jksd_kW)@@5F**4NA)yo6YCRZ%Z_3-_pu^ z?E+W93;w2;M^*Q`_=(@j)KT^YXTR$WE{dq00& zZ&M|?BlfC#VRhEA87aQ=EBrtE&ri(aw~ThW_tPz1MzHIbeoe%ThaW!cCH6@s_O8>2 z41LPqsqubp@85G<)K9d#WXFD$@Nas{x^ZJn=Q8I4fwo;YA9XZLWj1$`cAX}?=ih|a z9d4ICDD6A^Zc0u0%9cxl+(NBWGVZ(mPPgE?6nbKM!F>aJ&fYs~oM(JXjWKG_)Oiw^ zeDhKM1rH@R1CKe8>vkWUvT@xk&8;2Z`0veA+P$IZ&nb;^=k#Phon`cQ(LyK3O5tA} zZLWZhB3Csoo4nnvmEtmkociw)c?ul+AiL!dHzF04LIzzR= zu}el7hkH#brhWIi7r=Cc;WbkhuY&TPR^7(Gk*;N*FTR|;S2xK^BvsC=f6cKT{e>*Q zjHDdR{RMd%n!Jysh|jiAdc%++Xvw$k@!aQ?`T8c)wrpsXSlF)^VK23<{BY(jqj}#& zkM;e~;*63=p6BsCas8#@*yX%?oRkk6pRoR5pVYe0&TaW)0c-OPO}B71eyh!fGJ*Nu z3?$WNM(+?GhY|-&WdKT3BkG-}6c3i_zzaCvUTT;k7)h-03W$g32NjfMW@3&d*M zCM@b)a+vFD15Zn+#3QxYGk-1pBI2Z|H{*HYvEydy8{-19R~WAhdH-z}M}*RPDaV^l z`g0_1OuPSaDOZNKLyM@~W5+Eif~HqX`i~?X)_q&X|MJ-fn;l+X{e^=&QkJc|^|;2P zQ*1GVrig<6hKEHPO;zu|xEQ6;$aJ~ot>n(+CA{j36T1y}3V%EQSDN{V+_9S{dMsAY z+Wfk(?UM+%W&bo5VS~x@r}9ZpwH3&Jn#wBHuw;AtgXs(=$!}s7^;#ZXe)ImcjJb(C zr;m8{$V_t!(7E>d;0Dp=D)}o%8EWL@k{1L`&bYP|xjN5v)5hCVxP)%&Bsm<> zT*G(bV`7W$(k_nlE{UjOUzq&h+Mw&tINye!kx|hG%-ewh2$0#_y!pycgHE&-pFD z^B~Rl^Vht!9~XIbO}c!lZ`HH(f@6t)H_l&mHH2MR@drmn(%Q~t?EZqEUTmnpl(TK^ z#D_dl=3C0_xYpGOOKezeT5Azt%G4=oZ>hcNf6+UWU4;^n2KjH&j~6Js-Pd#?o#)ND zWA|rY(!Vfa!SjPf${M%$rz ziMLxnzD%$ACG`I<+yB3Rub)>|Fne+%eWLU^eV?)eMlb#D{N-d%IHM!g>~h&!TJQRS zBQo}#Vo_70HA-w!nx{#)^=y8-!MwFtS6|)l$BT-thG|Mul25xlNR7VBc<=k_XHRCa zW#-0PxaTfzI%oRJEPuhK1b&Cs$uI7Ay_5=BcEZH8ZBl5Phl$x9ZS#ht-XvSK8_IG! zkM5mswe9mA4#tb0w^vSSw{vS{cXLaYk4b(dc4fJ#R+CT#%eSl&_PGacFZuHz+=#)6 zUp-5J_4EUqFPm)t7~P#G^YZA0M#ilHc3l+@`kiYGbKdOOZ1R4Vkz>xXjW$hF&icN; zXq=yYx-;Ri$KAF0R%d*hVrEA&{Wc6z)%cqJaWZ?+9FuZ|{uQyxiD&1`+i16Mnt~y7 z;jAqY={&yk_PaFR?Vuo>z?JfV~O4(fxyg7r7phgzK7Menw$zd9N{joP2f1+scG2{ z7v-!JGhA{uH*uxkb@}w;D(O~x7^K-nN~iwy)Vum^SL>St#ow#67e9>M;gyiReQKIb z^Yny2QxAp5+xCCjbERG(kjvcWK;!#_?kN?FLY7Kb6ujKcW92e5tz0*F?fJ0z`91yr zzy43sUohEcPr6d~)`=qfRx1m-&V6vnDAnWEbQuxJ#nP425|Z0XS#?glJHqA4ynQP3 zlSieSSN^+rIA`0o2pymOmEYg2etT#0`nnsDhhJQ?Xx@MNDFgdw^_~Emp8aYvR29^XX%Xcl1989$x0)`fm9Rhomo48wK^}ez@?M=W1e{VbWpidQ}s# z-Y3N#-2pPY4$WUJC|cgO`)kJz28Fp<0{MxDEIpoIWATvm+HAQqaE+S5nv>UZL_N12 zPS!a?-=Z=Uz$MaED7xOIJi{%3aI&Ls=8f?i*dLpxAj&Xu3uS?L+1x0(( zRp#}vwc3XEFg{W)pY+kpEorUu+GTFNeY2_6eR}1iBpk{vN9doa^41 zC??AqTR7M5$tA~~Tig%*I6LWc;6*F`h@5{Hzx>xM{dH--@$diZHkV(po3qF&)$E=B z`7HKFK5nt6S-C&lPgeHG%s3`EKjzKekdmYKJQgz^l@$M8zeH!9@xfN@GpVdyECIJR z9cx?Ed^V!*|HR&&AG1D`up0?4*8buVvUq~>%;!fhwlqh+Wr(x-ym)tA6Z^a)zf5!w z9lbxn_z9bJaGCTWfBtawZwX84_?HRII&*pE!-F?%_il-H-?FF2VQK7@`W61p;RPD8 z(JjsoeqKEn>c1syxzF6sA8!ht&)4VI-u?BH&VBdVe=@I4?&-Xl!=8TIa#f7Dv#J1UJgUR2Zl6yRH5cWIr|g3!*@y{q@g*xo)K^y^_% zQbR$GRmi(UUa#bcOHLNsW~TByOvyT!7`^fJkxpwiYnR_rMJ(4XN{k|>q=~QFyD>#E zCZWKzVe!m9rwxk2eEKu_>>XD6yX}_ZO>omsU%*p#@YDC+sHgs^VUp|iUtMG0d+Xpd zFL{1mvkiY2yfFLoHu1(xN&e=CCM=>ijijuf_Fd%(JgmE7Vq*6<`<%<~7A7}`iit_h z%X#2G_s%s9lShAVO)y-yc82kelU@}vT%Rxb_H2rLrPLdcGNV~4Zim6K57*PLtnYke zP+|OI=GLi4o<4KzJd*h%GyVAKi!6tDEvLjP>K8u@`FP4~+X7LmXPgJ5mLH3IccOb{ zO2)qGf9}_$w0H{UsCY=nteKj1Ns~Ej`Ghr{%-T}Qub(^k@F>bj@_E`XJ}^D!qz0d# z((I(y8rd_x_vNxIigJh)Z>eU`IsL(MQuCEx(Sg?%$Is4-2of>yjhgXN?qdN1qwlKz zC+-qSPdAsH&1{IjDP`zjur47YXg=FhjalLw`>X?8zwMh}KEU zQen!g6j+$6>Ki|PJ7y_+M*aP=r%$WiKRn-G)FWx$bx8HzZN?iI}6t=wWwDAerBn>p<03H0qre^l6-vxWG2jxkm59Z@aW+2 z>_Zw7N4O%Bl>}0@KHhj#Alj`U=g*$Tt&JSrYb|#aJhEN1eD8q?r4!_x778da9XHCU zSG(|tLo=3#edFI11&5<8Zp=N*lep)x^n9}k5C0n1{NM<`_e+KGbceT|&CLe~o+)On z57J)fax|_vPqvMJ&a_u27B$@bo1R>D{9=&K$~g^N=U8S4drjeJRo$KCl6v>yZ%e20 zHHn8U%olF$3iInbf7mG$P5DSDgrqK5m z%-=r-SMcW;t|_9t%Vz6dNPksx5(`*ICgvSg+IxM z15G$W_8y&3c%j#V;cd(@8J}H?cRqaM!r*PCs4g8Y>JaA2`Ze>M=|@kY9jb-1jXwn| zuTOPXwO*Vrsi&a%>w!+gemAFAESw*;!veIX?q;h!xsW^hV#-{%?ug{?8)B@=f)|Me zrk=1`ZQ{gf)OP%c(NPmUqsxc?oXfFubyL3>H9hWp-MY<@25Cz;K27u2Uj8)K|8o1! z$T?cS(${XPkFnbFTQ-p2Ybl$;JB6IaA8Qip4Bkqv2irc-}3Ygb5jcY1+7~D z1f5W2+nZNyZ?r+kWbL~g8%c$WvxO(Vm9=24*Sy~%xj}7`;Kq|i#=F0IxrDQGiA+8! zc!phEH=kqSAyv6;l`d&%g-MJ1HmAn@c(!SZsOb#-8~b=dpW*o?%l9fVJj0S-dAV+|7l!^Fy)X9>k*#f`BiY0z3cm%%a?mA zy1lsc?h|*%!GMpiB$W0pf8(<5kH72WC;KD3oEFKlOxdvLY+U8BoGI-KbX(sBObh%X zrr>hJ{LH$TXQ|@lK7S%ton>PBt*^=Ac1dvk+@)G^(TS~W-NXsu`3tss_NJoVB?&gSiWzvhYe9gg5R)$%^Cu4&H@{+fR;)F^3(Q=)d^ z4ELKs2h2D9Ii~aZo>+0_wJR%E8NXfgr?&EY&$UNxdy7KyuJEr)btzW5`)hTEOp#cq zGwbVhhe{f3rkfRglg#>~&QZ8Bs_RggPKW00$9sRbYwd}i7^FXIb;!2wuRU6m6eYkI7w*UcNO9kb)Kk7o$+y!8vLYY&fg zVDZ#Tw8->OklrD&ds-G7qgR32FJHZbmu^<8>-^Gx?v?R1(S@l?W5rq(pIWZP(o14P zbizJW-PMWVEc)OVQ0vfjQp$MVNiMP9rx*8sojm!l^;w(Fn_}Ku_fF^ie8cg#4ci1Y zzRrJPy%S1LPG26l<8W}b1P{+w&sQ=Je3*^r&ozJ7*nGHMykTPvOUkY#U9G(dGn|)h z)62@_mfE>hp>p20y89 zknh=o%e=iOliz7X1*J)FFJ%@B*iw7wisy=t`w}JGr#M6v&vfNs@yjeKlJl%R)k5e(-&%+f+Gm&CKVf z8+4YeVZ1f#RPtlFIXx0Jeb{(r zvr6fSK!5jhi-RuS%($~;y2i8PanIB8IuCRDJvh-Rvy0&q(~~N{ntp+pI}@6f*u9Jn zymu)P%@Na$<7RsE(dWh5mm97fk=e>K?FEN-nrzj|T1(8zuz!NLQ}+VB#uWxyZ@d#XY^oFy^y5q8*=zY^ zZB5nJ)^KidGkM%1D(rP5e&w8l6NK+RDL?yr`GmbILv@N0e|)rAz&g*Y;P&k$ z1t<9znr?L9pTL?Dc6c_o$F1bR!eT~-*0ZeZk3YDr^!T`Nkj0{fzDFBA^?hp>GBUa4 z(W$slV`?YUhl4G<6&JQny1QrlWHY~|LTB`j@tBH5ZBCE*HodBF zK6I^RQGl#VDuQ1k9?g>RU$2rIF)@CA>m#wm*wcJ}ent2RZkmyGt z^AMS`BkA{&$JaxaF6KY9BQeL;{GosEoZ1yn`P@Z6?(@vms@n8?!=jnR7gyYXX+R4Lm7JjOdsJ?Dr1 zx*aw@?kmsqLW{}2t3Ezia+2A{_km8F)y_ZV(@Q^v&%b-mQ#PDkS&rrUDT~Q}(mtx( zoyKnvE`H~c=6;_$DZ6d#_u1GaPnlqSQ#I_$wyK8CsDN(u${BkC%QeevY_!)}SZ=Fm z=oCEj$g{Sc<$Cpnm*q>ZulDnvWpiK;%ehCLbI;vT-*csC+D2wRK27Rb_&1q z(X*6)ZLC~?*mUOKF*k~8?`;>@&9i5 z>+RtsN2D0O&)(Z3U1KQGpgwKSY@6IiOzxG6Et?8n9Y1ckD8BGs&R@yNX2$&QBlH(t zhQ)l6YEo|#`>Pg%yj{Qs_^mbdDq%@MP{DNATCcobW~UsK|2<0UsU`mv(-o3$Tb zIdIy3`qum8?gugZrY>dfG;_u@MY}$&>f=-YGS6#Mt$De5hZ5_JA_*qr8`19$3h`I0 zwcWTxMu;i4W71j`dKmVJga`wk6#qcf0v)Ha*I-Tyl z@bj%xx85w9^3>IoY0BH_XL>ju+4OU5yBOZPS?bcXz=HynUWU8{aZHVuKlrY!I^(1G zyukVAjIF<|bju452De_VnX|0w!|M1)0!5vxolO26b+g`}@cRwRUf<>S_Qh;Am=^WL zyXQdP-wl6u)$I7p&h}gPqL$3|%w^9TPOvWRbNzVB?ev0|3POt~@9@5K&?Cp@n^dE! z_=hJyKI9%|C{Q{-O|39pg5Txwl0+@tze+tv9(>PwnIZW}?2@=tdUNX}cKw|!OS1l6 z+MM>feYRdvY~Cz^GNDUH`cIz=UlyI*-1>R#-h-{X`Hrty(c|&CeYT<4jM8^q_ujpn zSre6eY)yFcZZWq#TFNa7hL(X_)*rd2d_%50S3%>AY2NAFY#Z*TzQj{?+uqhH@7tYz z|IA|%H50RYG9hLBWmDq$4Rele+oZPq;10Q7wZmU!xEC(%K2xgCy{Y#KQ;y_^_tRb+ z_G+2Qdj6HmgzY>}0=g_0g!AZ%&bik;?cTwkclf$KNy`=OxBuq!^epG{C*G6!Co}y& z``DRpyIIcJpcw`JvhQ`C&HHuoUgv4stV`2BYg-2fE$B1ktl%sc;p+*~E|}14mlNlB z%}vo(X2GPA$No=Wc`mLC(wDt;rLnX$_jt9}w~JFOEGjk%RvcK-a`ksjq-D$VMLGJ~ z-4_-oK3jHePfXDfzC#bBQdg|lpt71(!rm(DgVJaDhtr;LUF9nd5(r+VJvnE=6CUmi zrHuhu3$AS5prK&1e5Y(a57TUY2VWDhJv|*((#&lRyAxP=lO!^f7_J8|;aGj^W`f(< zzt7{}x9$nJreW^#>;G>Jle3>Kb}#z=CwpJpFAXmiq4|=F9yT0QsbD^RglVByLK@>8 zPQx3`s$p}kPs-?iW;}gI+SZ%AD__mLy0vh({$6#iIiWYDWbVHGZNB5@Lg@$FJfHJV z$#M8%&8aJ?`)Q(bw;jTa+i;TwYMd~`(T0YPN{cu10vk6{75Y0 zOcIXBcG52w$<#d>RuC-Vt*XVE9y&?b)A8QS;1z~kOL=$d^Mzb-msDnccwnZ2e8%LW zg^7oZryofu~8-Isgh zea!s$^ZJU$&l=xU_i5E}sw`q@)cNo!lUtM-f86yH+LJ>^H#p)c_i}lMAQ?<)Uuc-w|1*_a6S>< zC!X}@(w4vy&)!L;+NWes?Ac%bevQmKw!#xv0+$#C@NCL_>?9`Roi#mR-8+Ae7t>SZ zLms>SnYA-Z^@)=Diy3ooWyz@>>|$Wmc=sh>Q;E2$*{es>v-byXoMpQH(5<^?xDBUx zWlbrWu6bVeM&=t8>#om!OnVN*&1;l#_@1C(IbF5R@S#BDD|xk|XOgwuN=Cw*cVfQ< zeUHuMGuU$`Y!8bWv%@k@|A~WYL?(ns#jFX+NMOmmZb7 zWzDkGj6Lrf6Zme&)0rkw^6yN&6@?XdE^pt{SpE28_wnX@`R~5F;=R7l?C`yC%&2zx zqnnc6CX-aw@j4kzsO?{P=F2MY9R2@$H_9X|?lwLV?$p@&WlpW#)*jizMRTJrv~^57 zG;8OEjOdr27Ejc;ZG5Kg`IXO+h2q;(ESWDeuC&u>`zCpF%bByHVg*y!wU`{XvPeyu z@Y>K(XZI5MTOs0qwWe_h%~QVZm_6sZcq;qGu3rmk1C)FNV;B3?t$cgv$lhDhk5^2YwezT&lciPu)wyv;H|H?Nnpz$+ zWOSQ$()46llWnZ9cg2K_vCOJL?oYz(5|+PRct?4i{glIflh!aVzkRaR?PleJC9hc2 zGd|C5YuSHl&ApIU?7f$_A6RR=c-Hy9axV)QuF0}8f8;r_Px)glr;E4J6anE^CJK7h zk!$K~boQ^w4}bY`XSRxdeE+(W!B0{=gVU#qZRXK5e9Kwk!$62o;4B^T3zC-^cr2iCmD*kmGUzF^Qv0?ZFQ5Q5BIzEllHcYuaqjP z);`($m9e08wQR&gj;~zl0?WCle-_y@aV~GbEbf0Zu5LEn_|`7KSFL~L?2xS!%9k!u z-SmIr#H?b;V2ScITcZHP1HwSLIrp8MA+no9D+|AuLzqZ9GGIn2_ zy!djJvW(2;-Iu{ib=!!r;1%47cOZvU`gM%Tmm%~N0Nc3JFJ-rKF5@-C&uW8qzOsgOQV zMyn6;ulTJuDV;dC_s^zJdylR+c95t|iz~}GyiFi8dAjkO_EZJ|pD1&Kh7VOrj~Gw8 zZ8x5qx<>aHrOsLC z+A7R+a`Tz?jd2Y{84N8a+1fcA9&Tt|=c3k-l*p-4syfYe)$|9ULbF76xPFW*Uhw41 zCYP!c9md8t4=xP)Ki#VLt9|}G+i&mW{#U+UH>29+E6<~lqfv#2X7w1IUwXdyp~btc z8}~HtIpDRZq;1*b9aF^KY4qvF-P1eqUNX9)Q`|!IY2rgarQJKTTgsbG2pO$8-F^G; zY_*LOB6RM>PMDfIXKTu>r*~|^R;`}cwm9?d%aeDW8C43+Ox5vC7XA3xw&?+@(OQ{v z6X$QYxgxZU->2=pjnL(fY0Dbd*<8D#bAk1Qm+zJ>DJ8%xic9lyM}p!05?h~SPB7Q1F?q`CC-f=ba{s7W-tkoY&{Nq~Oi< zPI%U>nr9n-{PTQO85lEBqSM!?LW6U~-Mhg|YR8+S-)&ktU*UM){i$`o5;$KjPu|=9 z#alA{gjn9c>S<4mJ-oc^x^6EmPi@_(q-yj)n$^>x@->VVqw?T(A{L$ZNxi4)N}GO<_XVD7wxd+^;09=)dRA6{vAtmlWaiSg20?th|-CIvLP+%P!VZZ<>g#NoxN%Xq?kp1K~N zQt_r}Nw!CcyVud;dwecc3GPX@PvmuC)I<4Qe@}IdO33W)O;)v@{q~PzPmb7)Q`x## zBz`Ylec#~rd!4iTMLDfO*STgt6}z+Oo~_tQmUS0Bq$ewMrC0rZSoDzBQX}2;p{=H{ zTjU|0!$y8pMtxo>I!Y}C3={J2E1qU!)#bbIR_N`WU#};-_FVP3pgqlYV!F+nH@ovl z7~G$-?QbNfFw>;3H~PPsx_^~Q;v8&;LM4$-=uS~qDpSvX`3t7 zdu!Dm$$ETGW^Q?PXoc*;IrUqewD>mG6&Fu_zW7ee6Yg8dts-Jdaovh5Sc+~sIDcXJ z`o>%)km={AoX{`FfBiYb+Hr8#c_9ULg&90G>6}Xvnr%5-v=`(*{eAbEh6MXuPr0&* zB7756I~*f+uvAAqIhe!zPATKe8XYH|lqA6?H&=B}c=6SEx+3FSJMM*tnAtX+PCUZ* zLs?~Sf#wOGiV0$S#k>@FEgaPfZqz)q^0@UuN8O_PL6i3yM)|e7Sn}HEch-wv={n)A zV|l0Q#D|UzdHWs&9r(oF+Sa+OxM?4IA{&^YP2}f4cO`m*>Q$Zq7ia4q07su#JN6aOFIsIyeWRC~vIsZRaw%2gM{SI=6$<5AnqIOAEptsk@_N^)H1Sb&bDImS|a|&59__K4z-Sue+mAgKhC=2F_)hbnMF} z%w+TX&6J+FUh~-5GbS0g+|x3?t?ZoAbc(6{=%ebnP8w6Cl02n66fD+#UN<-EiNtW$?GE;6|ao$K$vnTav z%#Onr@(y!MWREUWPU4SuZ|Srb*ly(9AtW-rxCodY#t*LIzQFhVT5M$0F zs8=~_d%D1^8}8puyKgPJ8)?R_qCR~ygW=ADDVh`1F6kO=)7i^e7_wULl=b?cf6_YM6<8b|x zJ(c;Z?Ca)^Z*y*L`*V81WkxTqUqLndjP5!&M6b|Wcqr0I>s61d)-L8MjfELjdzOdH zk-QkQaK(y^7NtuURc>mDFnPSUJ;q1+wO7)`MXxqLS;V+WDX`0;Sx&!1^73?7rBA;@ zHa%%(sz3TN@Bn9Em(l(STKi8gJ9#5Pu1jO-{_06j-ZVVBv}A!^>ilW%r!R1qd}X`B zuyls@#KlT4H+KX&tnuoym^35c)y$%nPYP27z`L#HO{jCc=Q&~Vghe6dF&6PlyuTo$Aq>>ou|O<@<##%4bsEeAp*4 zQ|4k#Q^=d8flKTn+f+*Td|!BS%EonWlh{J%yHDmy5nbeB${!=YIBH1^*V0KBmekJh zn))sAU|oks@R5|>3F4Ded7lBo~KE6k2X4~DW!cQN(n+-DxuV2JF7uZrDt>!1{%?u6dbr=F zTjQF^#S@=ynxrd+Mu(Lw0)Qez3m-7AEI8Zwt9OzZU1xMcB$8LpO;EAcvWfa7QbuZ%FMKWM=K+v z>8Yx_Vor;`Y`ySx)6Zf>eOZw&j^}Rd=MG#S{X*fif~0$zl=`O9uoFdEvxI#(l3&mH zcz$!jk>k&zwnqH&YTNqdrX63l>n!n2`)7SxRx!Etj?qqoKSeC@T1J{@Hg~*OoSwNe z$f%}J$D%>7pilbO8(Ebm^BuDiG%~8!WT|hLy2~e7d{H)reGk8>*ur^x_GHf7=)eAdk`1QSM@{CR-*in~Wll-6*t~ef zj7p)JUB3=T#4X)?P(^vqtfR@?Geu8qoe<69>7a4ZoM*!1<|kZxH`$%xx$>7cQgTaO zHfQ&SzMeQUB+_{YchSc^6a8@4Zz@Z@aUNNl{Zk8H@QJuReLLBfN7C8LGLn zOD6HDVyKPz_eA7`(r{^48krk6)7q=V7rkLLG(6=%7RTw35+!MfPI{m_$d z`|64>?Yi=5+v|IR`q3N2-#ti@jp0<$oaiTG!osGt?8X|=5XnZ9%uh+qN>?uBb(oo3 z`W(~G4BXf^^Qgn3IebUXbl$Epn)oB-*xkm?+0jbJt5(V?dc}b|_llVLw54f(hf}zQr^C<}94!)L=dPlA&z0 zw0}e2x5>Qco0&E}ui@1+d3gP6(b{)4z4=d$r%dm(nSOj%!;S^E(K8y~T)$;!B!EvX!iR2tyySCFdd2s&#A{ZzT$*?1 z-f#LbW5x3B&L3O+*i9!*s8f}4@sT+p_1M$n{>i3(w;OAASPL`MnXTbFAOLe_?bch+|Vmzsi<*3vB=LG5L2TeO)G!`9R9~|GChb9fG{# zi@xVwT)%DO>Xk=U-B(=bchWJU?!oUJmv0|ATwXsZ=8PTp#t)6BY|U;f96a6ceDCy` zv(KWe^s;Qb)?cdl_=$7zTt@qwMwx2o>t@YYjhh_E+{iNZ!p&_#6P?qkrvslN(nCmCSm~xyql_@!o33cS;kd{<-|gbpM+oBS|st*7?V#SMK!@ zw)@Q;?=<0CQ`o|;yS&$X#7-q1H4C$fu-{r_D{lLMA$3B25ZB($Ny1D2y8UjNFv(Mo zH~Xk7&#Kb9JUgX@IQ~DB%ekm#ecjjK?N;*%t7`imWJEvcS`^z=%4luAL`UpfbDF`7 z6B*7KnetAaNk{rCzUOo*O>aL`z~cL3>!vWPUj~iqbRJ$lacS$+Co1-$N;$XWD=tNd zzBuY!q;*!ZwdZo;I+Jg?Q&xn{RS)w%Df{A`qTVzu?^in(oX_F9=n!ptM4~|4M}Bqg z|MMm>i8*j+|c9 zG=W8G3a{VU36qzzPO;qhS7AqkLy;fD(}S$s8hP*bYvmhW-gQRib>8XPrO*1;?cNby zx%tnkZA+z87P=R)Y+d9QvVQHfm6wjh@y`)a){`se_doYdO7ZqI#m!INJ<|^1KAv#x z&+5WwQW>`|ty}3AndP~4dlRqc>NlO=lALVdUVUNHn0{G?DRrCUjaS_7+!cGFLF0a>+qMU}%^6Mo z$IhEw;#0BXmpyxN!HqqV;*Jikmy_Q`e!Tg4{l0(Cw(tM_SAL#db)1OyX~os;xkYCoik#JuexXX z=&wfZBnFT0lyyE|&%Ek1Ui@oPsKlfPAq+D%MH9q3zMNMO)Is;HLlkuGimMrhD|qE!#7V+em9;tAa*!g7+fM zH~JyPUlW58O*FE0-s;zoZjEjdT*&#;Pq&1}bPD6~huo5eF-;-raauL^88bXtCW$^h zkf_qkS=4#5qr9Wmn zP2TdC$4u>*n#0?3Qr`bx`MO->QsH%(l|3`J)^kftPW%JAO(r{L+UA5l4luDf%`ui)RX*y`D<4_`Fe^0O67GCQj^We#e@m(Sigoojdd z@60!E>rcKDORBvZYm&1$LgM^=duNCFdy9oG?O$PgdExm=p*wQ@vgTcF4|OhQeEif> zoqE_l-O~H6QEjq-&G*7co_FVWdg-s2dc)aw^@fQlAGoe36gnwC?hcv3-8^Z>zNg}A zUcFkyr+rW88ABwW={FhQ+DGakL9A6j__a>FG8HyaQW5Enu&O^O|72ORmJn;EgeyPO zrUh9|%k`gi|WGUTC`93LJyt`HJj7neTT(&!zE2Gvc%q~lt zy`Yc14))f6x6{S3_lVpL*%twcd#Bs| zaWvSw<4m=gSyTG!9mz)uJ0;eKy*Smfd+!+u)s`y@cvq(#t(o-0?^i*L{VuWhmYd|R z2c@#DS$XaKp~VY-e?GZdao%##Ss#lf?dKcqi+`CdsmsPJ-w~;v@G~{_|C*>(;eLI4 z{pTsx+qy{RYpzN)*5NWY+Za%!x18hNO#!AGOI+>-9qM-EtF<$_t&(DuFtwp4WuB~5 zQsol4pwxbWO^gz8=h+;b*D)X1W6!488@*WXRbKbY>q2=~vcLH(UH>?t>Fv{t$FDEV zTKeUYfsfyH1LojR%bKd?jzwGcu+Pi8xBmk+W8?(l4jeYMeBMdFyX$qDZ_(hoFMIV&2R zHb~8jxe@d@!DNNz4)+5mI=9$8-LYeV|32l|Bh^nI+?9Ly^N4Jf*O4C8iR;!b=`_eq zb@BFMpCKTv8Fberq9bOSk58w^)TPFElGM|@yAHSU$z9AVcs-}kUvu`$|l*+SRmRM!orutQzZ41+%c;)s&Jr=DkH9e=J3y;c~z29l3(flgwXX@6N!++)7q=Y8- zNr6WJcZ!u;x+m&lqg(_ehmU&wgux$X43etzHhPxoGWnVBs9z4x5f zpYGh&wDuEDt2+Ph3E!|&!8B-5NpSI^z{Oj;Q}Sb$s4n|1ndT$weg68~=Z(qdSa-B! zDE<5NF!>zoA2sCzPk$Aikc~SkXuMdj!}7krLeaHNnzb%kAIuJ)u3x(2^OJ-(t9FI? zN%L-PnHuaCm)r~Ae|($Pe&4j0e|Bdm|J;7RxtXroDk~o6d@0!` zmu4+I`Q6Ksk2;TXSBJlJ`oH<;Qgv~?Oq0;fG286bw*GzOo3oG6R5WAOE|vBzEWdBP z-Lc7BKf(5<>#V7!o*PsSmbQ7`Q!cRee8|OZHR%!`3s>K>)okm9J$kf_rXFVL3wpEu z^WhtlUu-ObRZ%_5vch0XkcYC72gzdfa?!S0tc<@G&(3y?Z5sXYy zPZtM06|g;UhWG4_hu;g|r2AjGy*}ysfu@Mn$5!>&9JYU$sc*QGL-C_?{0m`^zYUMX zFBdQQXS&Nd=A?@J-cu{D=WI`mk$l`?@ZUY4Ov)@eBhS{hnz1S;#4mPzhuF@zTUl}k zBmCS_&oG!*^RXM{R&%T6pIjQs_H%d8yRF=(h5CFgT+%JV+bvAO`Xi<{5(pBmtr_DF2AzZ+9?>x}(OANJ_^2?=jD3N-Kk`Y!Vwzr9UhvEHKXzN=U_pFX=Q zKrFgi{Eft}}r~)__+1c zsc%LpHOCM0q&&9t(f0_+Q+h7wZ|Z7Z_Uuela?nktGhOb>O7?Hsw(NGO|e-$l0ykN#CzAiLPQy2zsHP<&}SMPg&#=K8wwd@||ten__t1 z9CtSkh%x&1srPCpWK(R&s>x7Q6B%?s=kcShX$M7 z1m=EW>zWX9nrCxfp_SZOkIcLFVy7OpybxtJylY_`d){=7kms}=WoCc&Ox)=G{%6Mi zRXrW~zb_QK9c;h7$b6scr6hZH$A{HEY8oDHjth+?Ur8G-6lh<_^+@xf&b`+Q`)dDR zyIK_1^Y_BH`R19%f64`Vb&?uxp6;_`SU)TO+1YDb#N0%zw&W@td@?C+Cs&*1>ZJL> zR<92R-JhJ3RCRd6QT_tm&Us#K2YJiRd=y!#miIhYTi>fR=W4!myL!IVS7xb4{(Rrd z=Gh;0*mUD^?xP)_OszF7zj4Qe8wd1yY-)ZWE}?kvLsOSW`Y92CpKisc#J~P1{JtRM z?s}Q``KQ}I-Mjl{mO6Vucb4ack4x5c_b{BAEqlbM_}vmoCp{jrDrI+voa zpZ9YfBrKNypZn$G{|>u<^DiE+7q9*E{o?WZ9=m_-yrOsWPVt$AtyujmX`!e1E_t{0 zk98xqoDGfB&0OI1t9x?P%_T1;teF0@lKpk<^5`k|LsT73-b`l{Ur=y%_Pf*Xk~}}M zJ-v1}HO8>RW0tn zpZwEV#*zQmRo72HEjeHQ>dOn8)U_wyVw}iu>Dj7Ajm`fr?t5NlaNE=8wwTT`4Uzu% zM{>_I_Pt-B-6HY-(@p;J@{39`(*m-OXqme|cNYF9GW%xE@?y@^&Uc3|3Px^zJbCeC zpMS+6k0Ju+#CxiXZMl{u6{qa-h4Z=kS*7PY`F}C)S!Q9;^T7XH{L|S#1D-A{OBJ(- zS#bE&$JK0`pK-pLEdG60(B>H|2K))%ooz(Dyw}|2nSH+a@W-joCh!+X#Qct)ytvCj zUpUw3a_8w%fH$A z#cKMoVS&q>G{xkvPy6vQcHx|ll99`AM06$IRlb=vP3Ut|f9&Md+GoXXHM|l%B4jap zo7Da|uZF}7i;ac6R_m76Yt(&S^F!pi=4PGK)l=#}?^_h}?!(3_?+ccs_B_o^cVGJJ z+_A@d`}_I3`un^3v!9g+MrvG%Q!w7~(rNd6zS~<`I=h@sA5!h${nP+ZmXd*<8Zd40+!tgP=IwiMnj(029B zyF&jahgsU0^*`hP2d?#b#ng~$4@_$@tsX3gjC&%S=LxM8 zr}#NG(NEzZ_4G1r{8s$}>|iYh8PFJd+otYGqu&?`B}uq%C*fsb?Hl9d)t0)JliMOYcia$p%&_Hs#^U?(V@6w=UZHzdmRws<3~pYr97DLHQ|Kg(fYRnA*(UTDH$owUs`d zquSSYtS02;llCtMaxa?5)v`%+RZzIV&j z%!r`u znSdQ;`(A`GWb$mDAbr}y>6|r7LfkCTGrQi-dO3sdgm~dO!OOBNGd?W8EAru+QBc?B z2j>!-+qTwqUQnINQt;~MmfN$RG!$$WxpaG1^`Y)u)~D~ic}hx4mpu2c*FQaf>9ZSZ z-P>argQr(yT-tUn;&kH#rriZ8jT{SK1?@R;VCBvm-=&o=I~?7#L9Zz|F)?%UvM&ou z6uX3(Cf1zDKOs0R=K7|+kFq~!88opf-#V&dW>$9ZWaDG271C$rx3(O(b8wBYb;PW@ zMvmU^*BoDb#KWSr=Ys5ltkQ190^Z^szB_g(vCN7465_Pm_@95ss-3qK4)z45Wz-d> zDlQbX;HjN(S@qf)F`smu|8cL<9#?HGi4iv6|4P>Sz_Pq;qNzIF?rhTT)q;Uyk81s$ zr%o1PdTGzN_H|M~yPeB-siRvpxwNY{wfd>OW(gK9eCIdyHm|DsrgHU#!5*h?E!w6O z8s+&Qe6Ne~kHfC6=bG&w&YH&Fv(%3#V9ShcCoFeta=d4*VaR$U(Ol{5mcVIJx8w!6 zll>j|UzZroiSq9@KK4!ItiBB&yLpxInH|3;_q0m}WNJwK^j#yjtcO$iA=69yYcC%= z)K=&+9Vj+qUS+|q-qpM8=<%A83aj6dO0jaX%vtAGmTc_(^kW6%o{3E*7CS@``0ri}T()toJG!Z~gpz zb@JxNdu6M{JUqXAZ$6l_Ha*`+w)3{)d)LF$OqGrp`gZj3q_JGte5aV7Nj5TC=kmQa zO~y>Mq&$1~m#ORgAH@FrH{p-RgBRjV2e|Z0bT2sG{K8?-(BE}J#^?Puk7J{7a{@Rgal?Jd`lA8}76-TWB&+w1aV6>F`w?LBrk zYl<)b?*0D4yE;R1fAW9(isLhX#jQ(0;mJ>BLy zzc}$Ct)(dPr~al6zG=QouA0V$@twBrPq=ueW>4rD+kXY&Ig5;W-dsFh+P7?Btm%f? weeW$c?f)sQ^P8pqQSTG(_xt`neAmspS@p1uwjs|C^Pl&QiT{`OerlKq0J51g6951J literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_c6/3564d8e8e45215ce5229a472b3262b0c136b6e b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_c6/3564d8e8e45215ce5229a472b3262b0c136b6e new file mode 100644 index 0000000000000000000000000000000000000000..526c2c0dd916d17828457e98b30da415b6c24e51 GIT binary patch literal 89842 zcmb^JZ0XZQHs+N(e5$;J5aNt+#)n|o=kpEPsk zoymK5rcd8`^4GU-*S_7kSZ7;#NuK9ex^jcn>;2jMyWV~-+rI6O*~>3&i_^B>mMQ(U zcd3np9i!9d&z>(oox8ZB{6x{=y=nPZEc3p9Q$KmA$z8Mi%CSHrxw5L`C+{R{+n0Yx zHIn##qy5Q>`)~I@zJ2)L%goK!z1;pjS@C(_IkC+Xy5?;Z`L)BSa6|tj$Lbq$nUShV zOQ-&ci`~Se_;s1-#9WEk7d?~0_S?Rh>VDF5clEbaBdM4L%ySne&RV>C5)%|yTw^>bYxNg35aH7E4N)D;As*|h|DwePN`ajC1+_<&%zCM*p$qxS-!m@Aorw{-0!WT)8KC z^VE>I|HdzQw9f`Ey`9JBezKjvLfUS}{*cdejP_56`K7mw-~X3qs_o35JMH~uHE%OK zTmRO^|J?0n#UHww58WRh|N3@r@7l9VQ^alU-+r-L{x~?`$@ao@hIM7G{lA)@gr0eL zm?hVHdr3%5^KS9;! z%-?-IVKg`K(%U_`k2w!Yakd0ba@l>mJtn*TwP*mhY-rL9gCv=yECzy4zOetcp4xq( zorizw9F9+UG5J~L z?XSOM)1O3Yv{o9(b=oO5R{stB^lpjer^5Z??*AT##0vB6|C9`yY*}gr|=kf9tHYDYjj| z&AmM|GkJzfj?RkL7Ocm78$ae>5h_tGb$wa%Z~LjHkXb77lOFE4>hCt;nwK%>t-`7q z0X^P7P1!$vU@3}~bPKq=Yu~ckiS;M0PSmoIDBl%ux-;r^%CeG`*QzhP@0VJ8E+MFO zVIF_g*}ShC?pwc->1Thd>T%+X`1Tb)*V$LxmbRZ~phF3#TtEN!ajY%XPcA->upkF1_Vv z*m&J0mp}8siQGPoN3AMvzqh~LEGWaWt@G01l%1bKFUf4uaJcAlApPamSef7?EKEP30DYmB6}&AzsMcUvTb z_>X(0XPTC`NEdc8Fz|h!CVGE?c+IS!NzG0oKSB(ZgZ33yy!v_2o`vtbOl@kwQqup%__U^T8S}l$2Ngz*^RlT( z!ez{t&UhcQ=})Pb@paRl+t)SI_~Ls$Uhhj=(7g57rbFqMOoRSbT-cLvv*6B;pfA6! z^BLQHjQTly%T|_R)hee2=gi~gcb=GAT9yCPed^N9HR8z-9H+9kzec6Ez27Xw>Di=%;EEAy}xBmPnzx~i>ysIX7xs& z5U5!7LyP0;W_|nE3dmI;6{L)>hHJWs?F~=fwnlHd9a(xy-V4>IuG; z7Z&HN;QZBmc(NaNZLw60VNTZ^~$;F-TD5r@~tbfN*b=_{<|d}&Rh`8`!4!7o4=>* zQ#SS4I@*uL?2iTaN#7RKKivCg@1A>%Eg|9DB3pI0{$8anx}iwEic#}Ie}l>V)n)Ui z^h7hu2JL;fvtMA!`G{MYywgPOx=nOXYwf$HGPkNPZPj(d?cw(x2Cu(<(CO8Kk1H=v zZkqc-$j4OsWs1^UJJXym#`y4x5vk80X&%evmD7$Dml|>(uM>Di+S-7T9N` z84_f+yI{-DE3Zo{^VU}GT{q$GM(=w!G!R z$Ej*p+gH{K{|r1dxn)9M>tjzRkLri>Hsv&|FMQ>-X_L&0((0(g!OO4r&ONZA=GDq~ zH>dmC?o-&XQET3+J*}(yQ*F~$COlYq{dI$Zh+k@C|N2XeJ$HS>uJ8pW?Oo*-ncr@4 zOiS!VbXNPH;Ay@q-z{nN-#b@6i7)e4`O&k{B_CwdUhZ+77aYZL@O!U^%DYU3<277< zsgd{1HN77m2;P{&bjh2$>ftlp#&v0t`p4s&~%Iqe8o8*0-j0YHHO>nrA=GIRD_#6@%T!q}o2$|NXqX;+5qo`@dZNhXo(m zyk>g5JE<&~YgJBCN!UBLBE{7G2QP={1^B}wt(bOX(|3csANoH|TxPF$b-Y*qr$||WYJO$n?XV-Csw9HGW!s$n`j#=e z`&e&kVs4m0IhS1xSM~0d8^8e`$+p0r1&QGpeJy%Adq}b*~fA!jUh0mUU zgc6l1=KZ>K=o^n_siLswe~#>wTo(^R)yznP%$MBTd#1MZ-k9X_TV_}KF|qpsTcp28 za=SzbYbSI(uuq(_S4_W3)=Y4U)>VPiM#uaOqdqKJaPZ~!f9B26F*VN7(?93$kLOSh zpFA^v2_`JdhN5hrUf6gR)$QH)ajjiPJQX;C6lJyJ14tT z@T?fmg!bIPGgnM%ey`o@o%t`l>`{KA`n`Lbgx@B97T7y+!djNT^f>;9JFYG+|u;ZZl;Z}&ZxQ`L^~O`cGk*m%Fm@$`qdrw4ea z6|K3}8RjVz8MALr{niaeipKqH9852oe5AbIs`OqumDSsuDsL6`arKmxeK`v!U9PpO z$*T#?v|?HN{p^#P(s@Q7Yz1c(=C5~%S2fAq$QiRyq2bo*&n=&C=W{=w+$wqexZu29 zHi5fNhqf0j4bqF!3iK=d_-l!+ghPnpiiaF(#!B1wFI@Xxy)Qh3tG0h*gyOCzUOwXA z-_=I0e9Ig!Y#o1BaLr>6rZNMu1FQVGLfTiU=uE19)pn4vx{P;2y3xDHgl{I?ITgGH zt*LXw3McJ5c_`buBAlmg6=!Q>Z-yfCuCV^sr5_qaJ7y>>4T|`-PJ6a&qig#$cjLAf ziW&m>VhJ5A=-zUxQa+%Aii#NHMB_1!hkrf-8w)qt%^Zp6mUGY`iYx>tyshMF0u~Dmh)vo@$dAarIs>BYX^!-BRnj6A@ z2R(S}zr?oVP<&8jx0~BZ`L6gcvzWz=3KOyx7v+hthB_|X6|wfplG4PBO_yY@ZOPuc zRP}Z2Ez_6IcYoaVSfu+l^1Fqe>w@+hc|l+H7&{-F;d>@j8bccAc+tCObOpO)*gY2NHF$Ck6-*;LZ9K#FBUu4|lTMMqG7wNi>W z>!MdToDx{C-8c8&xF`6!8O!nAo|T0!1-jk;#-Elfzt!WRWj&oy8$T^(|^{j=27kX0X=%=+*0T#saWAZQf7QP<*C$?Ykzj=#Q7 z{dx9RhGJ@WQ(mL#9<8}kZajndzZ5 zym?!5ngZhj(sp(UPx8%4ma#auaC(^Pj{DOm%`Fo?SQ)UP-pq&Z)|WS#Z363$`>AQG z?2-69@oSQn{L9}Rlar#Y?VK-2>RN{dmNkg3Yzv!yyZg)sx7~3)bGa&37>WqzvQ_9s z&N)->Ats*WJ-2U?@s-Wpows~HXYoW{eDZb4z6JYzUuxZVJmJ>s_xkUu#2xJaLwXvg zJ@rq|>j|{>bmuDY>wf=YwpPm8fd2tk=AKJgx6gv}+0G!3h!s~B_A{%C?{?a-GVM*; zYOZHqOwFZda}C&n8FNY&e6YT;CaS3}*!=E|NWt&HNf+ev%Gxh8ySG)Wd%xwSdvf5c z&{YDG*In4uzei-Qk|+!F{``4eUXl9BPL6aL10PlE)jf|+Bov!Gd%oW_UoNTqM$SQn zn%Q@DUViv5mfI}GoMnCi1JftzkNIqS7Kl&idFtS(yE^NZh1b2U8z--*wK(={R{S5o zmqBl*>kIC#W1o9*_XD#Xj-MwK=ei?&nrhEpr)sV$to9{ zE8R~5Kg}yrSz9HM@!lkIs`+Q}jyZed8`geEU@2-julb>Jf62oSk*;rdcuqW0aOmYT zlhsSVr(F4R^?=!W*_fVNy$^qIL_Z9Fe!Bm(=g<5f?^XZ(X8iy5(f;rs`Lh52ivRn) zQ|Dl)%YuX9-^1jRcWi9=)v!Oy`}_ZClB*^g?uc8~e6~4n_rYatW=V1r(_iH0Z*?(U zw3s#K!`xde_g!{p3m7?E$riYe>0W$>~8~1^Wlv_sQu$1q`LF#Lfo443Sbk=oZ4_;(h=80kK)9=J?KA zk$iG*=l&n(=Kr14u>E($rl*GNGTl2Gyex7y3CLV&{O8nD9-4`|Zso>J4Xg_NL7^(b#tLiRN(zckTymUG`m(=L$HI4RYj@ ztzUPX)2vwNs=1&r;HrAw6K#UbCQ>OGaPOAv6eS$0vNVMF`Y@)OLm z6CRk^q*iQg`H=MYrk?Gsx4rW7-bYoR5}3ob(Z9Q3+N&ZJr3~J(o)5Qg$ZLyTj!S%X zjp3i#r;v5M;nDVM^Y=&mFZ_Gdygqxw)?=&RuARQVO!~F{wfJ@U@7}#Ro3Aq^>$AMn z{%<=wHf`vSY!fmGjttnd&+NhI)U3^?uZ!J+BGHoe6P$DZhCO+RuzE1{FU>7y8Tw}`->-AzYD1E!TcW9Q*# z_LXNmcxzTfaZThzeI2!qlhb|#o4;bZu|nSL=!-W#oe4KY7M}4?-oTiXZB}{iXK!(U zsO=P|Be_avpWa{df%mn*ifM`wY!}YmvgmA8juCfYc@SUXXWen{W6re2N0dTh#OIwZ z6m$1G^2?(5f{e`J*)JRa@)f4A>j_BuUGVx)Qm}E#n;!l)i+JaA#~r8Zd41{4ITWhd zdh+-hTb0kvCtmr^oZPM}FXR$FNq18C#pRa`f5;!c@w$24gk7Jv$rznvxR%C$YjOFV ziD%Vh+#R?cZ)%hLyYT@l+tCzsc%pyxQq2dtCp^j{Y*a({G&JBrQ^;K0hrM z*rX>s`|16dKi!Vk*s8iqr?_)24~gN8C^*fiDO4?%7045iIRCTAk;Sj_r@iLx7A}lm zy5pRbv_y(tSB?I!p!fo}dwE-qEl=-NOy2!i@6m44uAp0dGw)i7J2^KOR)3im>YD6n zxOSeq@Kc?Vs=iLOx0M{%H?-`GY`bWATx2y<+fymOp3vWKmek%lHm~p4{uw{qeDBxo zYc`BsC)J)A`zvEoeE*&03+*J;6L@65pDGrQzI6ZYGsoTB%k>woHn({x(<^a|k3IT8 zLgl8D5k>EgPMq;DG;EQU#V0<#Gb`36XLN6BC=_8^yT{x;cMkIzvG*r5{%$L1(cH|k z%*r;0>&A9@qr>I)ZFB3F=|{Y{?V^7DQG54cPLakbCQCkfa0f;`%aJiT@GM}??FBDd zD;74*IU)KyHoNiX!X2t=!5t-L29vc@RJuc$8&6%*&rDRly2Q@)$GPMcqO9(JW-?u` zj(S+V*0WdilWm<}42x5noN&Viu?b9Pe;C%T(>`GL?StWrEO+jSJWH;w_E;qG@(fR1 zb$O~_=#%TN_5}{1ZnNUf$-b(TXnS}s^Yy=dK0gz@N_M+(c+I%O#+H5~AmT@<;GbXD zXIWf&t5>1OE)>`p?dbY*NzsJ%+~;+@=fqArnokiuG0Ujp;(}%~%W2U5p3q90t}IaEYtzfN|#5V!L};iG7}osy-l8Ix!hM% z%KdNMK2^LudB5()y{f%GMK0Y7y6?m_D}Lb|kEAmkOk64@X+bHDi*D?7Fm;<0 zI@^e4U9H2;i0EI(J3a+$2tS<~@|o-SmXE1xqt=Erm2lCFAP_FP22yVe4OQaPmP=NAGLPiF+&GM^;&}{ujov`|n-&fUeJd{~nr1*tY)VF>Sfxshiw!8l3b+J#I z@4>NBm_tQoBAfr+XQ`j|OG*20GZRj+s#ve|vdeFx*Y{bUMeR@jn9iw|G%=z;WBem$Z#vbj)#oc5X*kgWk`-R?GPQB>3dp=G_nH z_;|u#slGGkvp%K&2Rt|BE&tsA)S~+5S;wE&els?_Jh?w|?#$gjqW5GDMbC(vx3${0 zt@ee9@|BhkY(XV6=Ka(NoAk`hqD@Ktf>e>vtr2J(+{81 zG&|%~`zJSXuB>z=>*g))3p~qTzPohk(6=>*8KTjq1hy^GvtD-Cw#fdyV<* zH$7}~jXk2-Hz$Zi`d)U zJg9c_7E67Y+WBqUHd?P}tiN{k>f}}CTl<UQX zdG*C3KW516eLK_g&GhvLx1{j!o1NR8>D9H7akj77Z{-!=WAy?8E@vmm3I=AZy(V$& z<@BAmHpdGrIaMd8D-66A?N1D0+-yz#y5#k5WRXMEQa({l}uf7TT zlNw4S7SBqJT37zVH6~!r+gL}jIjtHB+MN6%-46PpkWX`pxY4dsF^>yngg&t9kytGgIX4e!VN&wB3HQ z|8mW|tY^GOUfYX**dBM#{GHWvdxQ2LDQwZV=WR_@47#f8_VcON&Akq{5|6S*9!{CM z`Lgx<{ZES~uIo~{5m96o%Km#&;z_36g^JAvBy`R}gH3_RA^cVgz=o#Fo1syx}-m%7hg%)Kt|!pF_i zzrT*y@cfqKjLo(T`E!fnm40=6Wq$LOq2FVhfgWQ+%vvGhVv;Po+L@|B~$58_Oiy43`>yR#oy& z369>H$A0{kY1_7=za1Ak7O}d{-?=Mst;5Am)fN+0t80B78Alhdmhue^3o2r5cI)pe z?mbqvtE8Z(%8_^CC$^ZXpFwN)%?wd&5>WX=jFdy_kK@QHB)~@?f2zhzxu{5G=KC)w|tc%%94fuxQGYM2?AzIfSNP+CIlu@0{iAsdnx8T9-;iJxh-}7>Zq=B)IK0 zi;lw<r_%b$hAehc*9L7ipC*W994XeD>_xvnrkDtchO>^!D#o<+$4~ zsGpV*$y@PrlZ?Ufw>eDOS8wfZetfe1OZDDOHYeYxhZRWO4l3B@v`{}p_`~kWIZNda z?Ypx^tM>uR3}6=ym+_weL~N8NH&Y0kVf_375zbzG0q z9+ew#E-e&3FeiIT+hHf6b81#?j@3czCLtWbua>fu3K(42m!J9eklW=`Kg?#|;bv{$ zlda9sdrtYXfzg|q$Jbse`yZQD#ggCaePI5L$oh|KKFUW+&wlMcdGWH-v!y#lPaG8;I{i=78{Yo;2=MHPpxc+GAl zw%WM1n(f03E{#8Nd-r7tGFSJ7|9gATuyvQ6_tK`rng1-a9bMeZH}uXi?#Qe#bTE8$~n>o1*xoyu?5-B}UqdYW_n#(BLnOXQ_o{dim~S8UvDuxvu2 z(f^?IfcJYlnvLGyzwyICTq>`8`J-no54P#6-nrMa^`)f!ABN`J+>W@Px90!ftGCpQ zZPaH(?>|&_BxYjgE^CvFQ~%WNe3lpc{_o?nv;UlSn!I2BYGP^_uhfsdGjtE-dYqqe z?fsrY@AC}5($wbgRLt4PvH7&817C3U$IK7Sug}~}eB7q7DkN!o^N%}gRF>ZsoTR<% zA&-&9;TKDnE|e8Nt$LyNB&!c&VF06%i)zcOU)dWLB{A;k;WU-gcIlS#3^2+STWx0% zrG9qdn!dGR6ETp3(?%n^6ch5Jn%4^M^%e=SfR@1HBY>%9r);UC- zoF$mL-bF?F#l=-K6DF~zJ5SDf7{X?>B3(peqd)60$@y|{YgUW^^$aszInWS zI}i7_^RzFCa8%%sex`pbk5zktcYvJcnH>jOrszcNdu}v$hFX!beC878GR2h5S6=*d z%-YOzEoF+%KSTcaFJ@l#44YED*S%>NfQ4NpI* zvGFQ!9dCZj?wv}#nVQO0yus`i_f&LeJ1l#{*{Jhn ze^ST#ZP(}L{<+I&s2=Y8B3LYbXau-0!ut%Tr#H2>7=^g#EUE*q1!O~Ni$LC6H zk_=9KsbZ@T)2HiU$Lo44!P2qptyWgMu!r)^z~s`#psC;E6#mD2*l>@ zHEt#y)D*K7nkCQp_xZ=*Q;derOP%%73q`}tmuyd38qxOueUQQ_^XFLsdlD=;J1y&< zf8BhbAj9{>&ndRnpY}zBKM{>uBkEgtp!V6jqXvB)Ck^(#a^SLf_eXMC7w_iJ<^fuB zFYrG+((>@7d56Dpgw4mxI~Bbj6fAN1cKA4}Y3vHi(rK64tXLLr=}HpT^ze}hJmSh1 zEb;Wl@d7P7W3}_!>#`0wSNwg|E*{-KH*mVqF7wdxCG!%q!z}{2)yf{!$-Y~|d*Roe z|JCL8d`=nV8NH_d&72Etww>X-_LPH-jqgoUcW=#PE)AES&4#gYB_ZC938(F{io$=? zO4NU9yr#~d6!!D#?2_JVA7zUzqW1rrIYmyS)Ol~nQ{J9^E%_FuM(NtJb|%IrOIL66 zx4$pV?W)0FwCoE*ajZ|BYF5c>vldMQuNk_@`aRYRZA()#{hQK19!k4pb70X%ot=j^ zPGpW%QrPBuEX*Y|?a{3N+S6QCid5 z-#WCCuklrY`nd^83vEpI?dv?d%dS{&c2-fVvT(`D*;%XX(`8MqnyhOTO=H)XIPGA) zz!Y`i!cW$q%|-vdyRTj5=HVCV=bL&!(`S9))2WZ%o{8=#i!%PgbNOa#yl3x?&&tz- zM32qiJ8f0Oi~Cy^OPK9nqJ3m{*QAA$g@Pup>R=Mw*MC&0=5dR1luzyRaR2*-hFAap zlHWaL)tnWpw?=q<{dckb%kTQnOGCELQ?`9*^~!o~LeZAx^>?g%woS`CUEuG)a75R5 z$yTTLVRNE$ZC2G!e(Lme&;PX7t=AQ&^7H-8k1@FNu{>v5)Y1B7z>oeMKJ>9h|#=4HF z;56IJvkEUHOQJsnUx{X8zP>=vYS!gN<@56_15dsbZQ)tk-}p3n_0FZcVg%2`a~hjp z{{MZEQaHokSHU~}Oke(RzqqL3YyOU-9uwEBObdIav~xnKrGEnVr>Hrq0x?C)^j+V- zzMtK-EcouO)34_5SZ49#`>aK}I!Cp;-v42GwEGdqLtSx!xAU4ZGIhiL{f}d~X!&4& zj_cd|+6q-U2et$rYyGjGZY62$*m7w%_E`M0-9@4M)QP^0XBlHuq7A3e10 zO@~IN%>R%5mml;CxA#YVzH%zBzk1iSS@SK53w0yJ%U8RyG=$f2JEi@MnLb75z`N(X z^D|ik)x^4Z#0zqg{jB7_%|7|k=9m134}Vrg?=g6Ct>@7uBbNWaVqZl1F0n3svtX(( zvu(Lg+tGk>^ra%!GZ;g984esq{dvAc+8&NZ-j z;WT~9>;HS*w0(ZppOso`&$Omyf_2fXj3D*xfoF6NJTiHwQtUAGxUcH`P3$M{RIF>7 zSNEtZwR z=3Ku1g^>$>Pbpp`$h|D(&ioDAcDCtq`Cpe>Uw5yzPgcQxU4C(JeOcs5r;UOC65~tT zXKAjRU&_!RxLG3ZqSCc1&sP-}Pc~p(VjlHa&U`^kp!8kQuWSAucf9QVdg_~?qs!v| z?%ek?`SI0T?~0c#Ve|_4J9Ep4eg2z#ew6$@ddz#yt2=2|9;~r*a*}o}iqif1smAnH zFVn+TlTRTQ>l?naAH1qO!*O4QEc?0br*F*bvgSzhaxnF+n;=<{Gwt0Dn@x7czc#*P zlZl-ga>GKUuXv5?tR(-Vr>0Im9se!;#e`Vj1E16Ij;(ede#$%7R6t{e1>3(4S+WJJAM9iO+d2X5qro?%^{8WBmc8V=u zhW*aKwzJE!zbyWy#l|u5_jT^33EoQVM}Bw)f99Uwe)C7KVh+d2n1bjDN0Qr4PA0MI^(9kwV!?1F4gP(Q*x^>kg*pPwv*(q*ciR(-07GJ`i~2xXCHSv`!0IP zwR71q7namsI57LdkDF~UF>9{&FtA&bew=ut2J2%AwWA-ml8IR9kW4cz5oMh0z9~p>ib?XS9UN zE3e*B@aflM9^>bY@h2}^)y?nTTKn(Tw}bzdCtZ}aUfh?Wb>X7N5w?YVpQ``dvVXAD zV#gM?pSO4Z+3;jbW)w#`lgyD>qJj!BrOm5jr_`+S$gxh@r7!$=#hE8}xz?R>TjwxK zgZp{4yz{#2+vW4$t~nm(Fp=MIX;SjrqyE|U?~i;vnsV9b<=?*jNwZwezL?AM-%hvj z@Bc6_i@<*(g_1>+Z&o^`xAW^eoX{x?S@0pZ(dot!BO|Vvz0+!!dYze4_k#6i&91^@ z&u-klkv7}yb;jF7hW8%#uKK4;uwDG|n#%F4Js!;EhRx9hos7XEva^mIc_Z?(>VZ~u zU3O_(eqk=Fm%HA}-pI8T6;l4&%*)K@t=TIuyDcz$^RbV|pT9hI?!L)OHFo!x^B-Nb zaJi(sOz%kG)IX;;AHH};#xm3Eu>IQH{Jflh6CNy)dB3mYGDpni54)c=TvwSgSz9`6 zXTzm_7cYnX_ac8M%1UpJ|8u9H!i7C}*@HbN=M?HEh4B8(?!4+ePi@kxtU0ceR%{xb2ldLrMb0mfXq(%nCvYl8aOsiKr8zz8wVzc?c)Dfjvk!~PU&wq>v?Mz=J~FE+cvGm z&gP~1)Y6n&nxExXUd(!{#kjO(2FnT7uS?&44cD(@laN#wKI-_J$9?Bp(IY3@e=eC2 zqjB!$=7Sdn(-eID7-m<$>+8(3xqYyBMr2C=ng_G2A3Er%Jme}ck+%F?6H{UN{bwfg z$bx#GySgx`I!@R%t>T@NUxDTff5u?hl!(81`@6z3#6KNamUx9j>DKba z>%FE|G)C{$eBxuUKVs{N#~ZBnfA7~)?!4OUx4!C%>}Rbf5-uCRnwOqrlU&{T_T^^r z_2q(+LED`lnJo1dpI%bT|KM!@*RcFY9plLnm*2|w_?3~kn3dHlqG_~e$Vok{XKg_#!jzH#^l($Ghf_~ zT>O(FkX!TXro!Bk7aKO`eRj%cv7Rt{hyIg83pU=V*RZn|+M#rInNMEZ%QF+23KE|z z>J<_C`t;qSpW-`CfB)OQH7@(Y`zfhg$tr~}D3~#8+4300ZL6-!Nn5kq-oEwIdLyUI+|9vX9P`*03GpOp z1g$QVc0Vhip)#ei!YVuTA^TYu`IHSU!IPHOPk6ob)A=Pc}HCuhPW!Y8L6ndb8F&U2v9R=6U~h%I{A% z&sDh-dL!V}{|O7T6Fed$zPs;|zO{$q9akx-!{l}{Y--0KVMi2j*BzilEXD+{9o;{l_H!U;M^SjgyN4?h} zn|@UX&AWft*7A3`*t1j1dYG%&ycb=Y5+HttW7;{T)|D4|l&r%9KGy_t^#s>w7@y~V zm+qvLepRGm%QqE9*^25U?(5>4-~VbncSwNMV}pOy^nwLWv6+coSJls7-&P+{FXixY z%9b3HD7%iAFPj%wH5oeA2F{N`lJZ%0l|HxTRFl=PjmWr>&S(GQ!`tRi9roUb^G=x*@rj54q}JMBHs(E!Db{QDH^ z$}QeKx)h=&dE8&ZXy-HIRV|*)f1f4E)fGyvcRBM%w%zf#b&k~Ti;lHAf+j{^g_OeMeg ztY0}Z$ooJd-_Avkj)^y~l@Xfa`?b~mu=IMrChiA?ia!D*o*y*I+mz899mK+{DZXWm z#g3Mp_dBK*KYjN6ZS2>BMxX8

    it-I;TG=k*vOt4)uGpPTF5yzEVO!u+D1M{8?d zJiK|Q-ze$Ty_uEo&2M~hI2wP4sgTp5P3L@i@}YB+A8zG*u+HJlRZ4M-i+XoFjpO3e)cQH?%K6Zud8I31JOdpfcCg`L5QglB3vUUmP)JF3JA6U)O~aj{|pK1Hd{KaaQ zFNJTH@BVc8`rqKHT7};~gS5oUuiyX1Xk>IvMQyTqI%n{^-+Fg;{LajijsNcd($1>v zX~yc{$5m^CpZMJI$!usic+jw%QSRY-8JVlT^>;pRKj3jv{*Im1>A!0qH|v#|=I$wq zu8w8-;1g$Jm2S52yVZBI-A-2NFF*3~Psj{g{Pa!udinh~DlXlqxH{p>GoB_#wS_?| zw3mtg{dhGknb~vB_W2LPdYdlH2{hqVJC$nfRK2}l`OdY**_y#7m-fn7g~^pxTv~kW zXJmh-vUU26SN(~W%)9KInp>mpr71~k8x~yOrn&cnwfm;EqFbKmZl3a&Wv&bR8sVgj z1z$zF?Q8Gasa7RMT)*&TX_z5Trq8FyZ>HCL?)6J8K9?DtR($LDZI}F7XRezX@8|C_ z{T6dTH~i2O&X&0PtzTIhTegbtme#+X`Z7%H$|Whe^eW|-cW&;;&0;WNoxtC??0r|$ zf|s{zBt&YOb_e?X+9Q5(%0c5@%bPD|U77g7)OthIG^Y(+-!*T}snM31S?@3We){Vh zMgL0Dcm0WGv@gFtVPSjEv>yi(8%xxdx7l&Ldz^bP_5209^g9Bb+fT~I6tVx`IPH$) zybp0FPVG(6wcPt+j_%jO$JwjRW1Lc~e#&)k{i}CPB>Upy4ECjpE=ykMG|u|aaq9jr zmG2qG8cDzSC0PRvqRJH*>ee0j=(wrvyu90Iw~krmUOj)p7{EfKmu&LhQ+In+ zjna~ui1UV=i+2A{DA^uq8MW&DeNE36@m&qeLZ^2JMbCULD(J9dl^@IUi@j1AufMLF zFA%$N>7I#Noa^U@O$`6F_x`)4>WYmX`t6r>>Qe$`d%Dj^CCznT88Gkq%jt8uPDLCG z6>+TH+;}{h6wZ888SbWejlSgCWz2iGF6ne7?8ylUS&%Hc#V%ocHxhE{;EVOpNuD^d( zq5tgDJDgqDtzX}k*(Buu=*=6O@`(!+ZY_Abv3t{;V=cdnZEtI>^ND%no!H2c?<7mI}F0k_y&+R_`o;UW=&P(bR{29N^xjg=4E)rS4@Yz+1Wo8$p9d9-CZ)~_% ze}d!d(@#qrpL%p&mGzJ^IB;r5r|JD)XKOe0>1{ic8E~chY1^EaUu8ubiUbcyhu>;S zn(O@Kh>ee{f6j~}1{=N`G|QR(-}<6*s--M*ddD&)#oB#bojd168gfQ>d-vL_zL;>a znbA5{`^}=F2OIS+e`ehN;-&Hrlj}bW;xs$ej8u=bZIw1lxB1Gl3Yn^ zzj$vUXcvvrT-hwH?rg_=x&g{t%*FE%fkMKTwxw#J)RlbqS+_hlm-LeH|XE=*) zT-@3sJ?C0ta>QD@W!10L5|%H&(YRacc8~h{^0Mu5mtwai|5|g(t4-2>=boqy@|p&6 zyAIdMzFPGD|I7IE2B#9&&fS*s?dyE*pefcDR4x_|Y_R>2Y2bI>{#NuI zhf8)coBLRn^aiG|tZ2{qcC+G_)b-2C_u1A392a5Tc!B3-;KNgo`ZvAa$M@ma{p<7h zh@Ig1eZ+fT<`hZg>95?vP1`RYW_kT;;^nnd|4n+BHaGC`zOySbRjO(>DT=qcDafo( z`k8mb?n%(=sj^dbt;KeII(6l6#k5|<-TQoww&uoNRnU06T*B6Zb*{gCnidi=HWBFAnH=a}pro3?D(b0n90Z3l$RHdpuvT*Cw#-O3WXYyED8**GgP?6q2mW=f?8%RGfuJP=;RQ z!M%IcBO?U2te3x|t=1)YopDMLH}_f_1Al3M+5fI_5BWU|kBT>iH@PVNSZ%DV@v6ve z&5Icko1|o;W|XFz9+W=nOi7~AhHjZdGRD0)0rMvihX~4`oy0fbnyf|dH@Mdy~hlBV0V{a>N9c;O3mY^21 z^0A&xj_A>{+y5RMI-39SfYs_8vG1>69^00pa_HKexwvzWAT`za0rt@!Q(!~CPFoDWygX8bNKVVb|N>OuMa)s-Bje3XhC$Ti~ z_rD(JbsHE4Wm->_if*#BfA`>$c2(n~G=X~$1>AF6p3=vxX}o#Ln{UFA>q0s{Y~|ba_VN?iZ=L2hEz7&# z>m;S8=gKHmAD^63SLW@s#MN)nFDti*RDB~U>)SXoOj{62infs4GSMz z#2${2HI)h5(Olhp|51VDQo-A=LeoATow7eiYu2)B3)!4o`Iw|4-yQj7l+K>iq^Xva z>d=(I9<)yF)(2U$saJBpZJ7FN#s2RpuV4N;_iLRD*Btr&KD#~lYPT80|J?AQbd95I zadh`n^T$)4PG#Sf_PX(S>nU&VUvVAlShj2qX#Mf-O;Xo}e}~Uc5K7cu687Hkum9po z2F~NxuJi9yFS1H{Vd2a%S;;Y---4u{NT|1T~b2`_{0@7^D^?prGRdZ*sy?~|t6F`k)@#GeAM8_Jv)SZGiWSqW`-{(>a%)&^DHC|@C9kt(dk9C9 z*#3WM?d7d2lUIiSe|7Ty4EJ_Trt+5G#veId10>lcf48kRzOrrqHTx^#>l)1_zHpC_ ze>^AsMuYm^jUVSOlw|o`Gke1SY5R|sNo?|JTQ7Pjb8=*&!0(B|p0nZ$EDjzNaW71I z^yDI!c=4L|Z?cNMeUq?~J}GMJ*5b5g2Jb}n73&n8*h1rPKj7kUUbbLGo?xMeM}TZi zyzgXnv3aW!mH#Z*9HIZ@-y{WgS@XA3rb#z&>R;Z_A>*@lb$zdphFat97cz^q-4#BG z1+R^-_tx64_EhzsUxCnuyRG7u`;Ro++RFGvYA6S{Wt-evdZe$yqxEfy^`etsV&;~t zdikO2NtFDnf6UJ>f4Gs>JpKKzoa&hOJ?GRdBjT1jEEWmjxAa-fa%|pA$4C9^>Qr7H zRIQbLDQ9=ero)QG?0}6x{cClr!V@6{{8JwWD=R6@+ic-VMcl(PqiiWum{$b{40viV|?Ly#4Ut zl35Jz9fh|s8n-|Dusw8*SU^$#(-}d0teJ67GMpJqwghR&?crq8m$;_c#=1FZ*{PD8 zRznruvz+T>9`7+by0paYTx&+?(PaL(^dQp$0WQf)8%tAFH%z%)DD-@5W2V2Db;gU= z7H2;5@i@fDEO&K!eSY4lH``zFH7wrIw_ZK{1j`M*=T&kFhOMeH@+oZZ+?0*pmDWjb zzdK_F^ZSI#@)KTKUvP1t(*JQaq_X#Ti@c z=(nxJBFrFj`d6vwiHy@6pSsu8?Dy8<`&|{}*{!2KF%jhHd^u@X0K|EaI<-O zH27<3`@bCP^=u-4gY%9rU0i6n|7uJ?XvaE*U6(F|f1Pq+s#)?biwof|?;KpIVXs=c z@7wKftvc>=|LzKjkGk+`o2tQ#rj60J%udgiX|ZrG+gDq5$u5_Ff@N@TZIF{uXW#51 zg$b^29W9v+c0P37J;Bp{b|Kf6pMje%KRtDOz4ujB>2-Yp_fIdI7F@(){MJ_EtZ0us zGSkN+a!k2?u?-$Sbf1dSE zs@a>L_v?Q5zO1eG2Etf6hdn#x9c0-e-)-{3nuR#m0X}?!5)%wiiE|@AU6LHD=+N{_$ z{x+6If6hNjiBjTSynToH=il*Z_y2ra_N9Nn-Z}jT|5nZXblClVtlzh9>ECWfF&r;t z&G~XW>*P^u&VWA*kLTQ&T&_4V{X|jYUGHV@9#u|rD#&^6;r0Cw+XgjO&sH9Ve+MW0 zZxdXW`rTyKv3(0VKIC3`JZ0OCSdF9%vmk^0-)jD8=P66czd2hj_U+%sDGQSi^zZLl z?xN1K^yIYt&n$y}Cr_At<6zTn%?$z!S3CVIs~k=L?Ajl3_RN(nS|SbfO;NaMec zYj1xq>s|XPxZ{Glzyu%Xne&&4y0p&JoVkuA@o?yM%io*j{XCRUocdWF=KA;7Lf)7Q zFRfmh)y;VP_n4R8A79_&RFf5^ZYM+aw_|Xe9Hi)nVuesf{eRauPMg5QsUQ!JcmV9TOb;XpCxBdV96HLnt zyr=K0+Lz{X!z0hQ%d0bQ-t3F9f3|BLx$>=d%Jo3iPdph6Tp14-w0N1yJhoQev+Sr6 z`4T#1{yD)*oNa6m4f-c&&e?YScKjOM_}F_lw%N=!Tza{8YQeuSi4=RMxS$-CYYr%@rMa)ICM#ziTpWzQJO0VoJx>iibB} z%=Hl2-MoGKSH+XO%Oy^SJX@T2L|a_wgG5z^-|xIz=ok3krn!A@ab-rDa7w^x_4frworI%#8uaI1 zdBwR&BW3=&E2Y7V@muegx7}fClS|nqc&VXjZ++IE7H#=!a{C|jNz6X;IA=q*PjZuf z-fs0<)^oow+_N_Fy7%F@!R0`<)c=!0Vzf@NIkQVmuT}pTJK^)J1I^QQ*uHu>81_0F zJ)5l6<8V^@R*_fU)+LTbwJJALa&jH!o6PL{-BAB$8rLcLP2W^E6*Kuhv5v0ro?5(% zN$QYMvfA}CcLSe3{c@l~amBrl;UTgq>y|TR+;FN&+*jxmg|DRks$M-MN6v2>^4=uuzPWCF zmi4R}?I6ADE#jgJ*}i>wy;X&Y_5G9k2`{9RkFX?Mi__z)}WXRf*U z@O%0l%cW^5FK+e*7FdgaopmolYT3iwDMe~Z-a4getddSkgZEjuFP|e@I`x3KQ)c5+ z+aEh>wO;7Pba#CHk}Ff3=y%;T#o_L?3r9^>&GgPQ?mIDUp_kOvm_#4rNj~kfKL_1e zv09<<+A^NaS{~l)fvo8-eBI(69&%q||NG%j?mydaSDcx$Zdqch<{u+@jYG1kZj(el z%)PqvI8*dbbF2Mx)P0xj4C$#*J9Mlg>j{@ZS=}zfc`xo=5cw$(<<{tV{ON}yQ~H*d z#(vLjKVM?lHu=TL*};;_-h^zkXvntnZ2Lv3+R0yk|=8m6$~Ha$&aB=L(g- z{CU*m)3-Wv{-3mr)D;E3dIdrUKIXl1nJVt5vBRrH!E1+%Mt|P@Ma2(Y#m-z@!oqPX zZ{ood@@H-@truhpbN<%n9pc(iu3VaKeDUjYgQd4$+vnu(y;t)q&?cJaMbtLkRb|}g z_BN({QoC$%O2%TY@z!YG`A;UKT|E`Ucx{`1k=J9z^={Ex#bKITFYjwJzM?vNH>cdS zii1B+E&FG5=*p=JroX@ENebRtpsbnyyY0=zQ+3nsF5e<#@?ql!=CHrhFBV$8JTt4J zX$e!j10&a^yPLEhz3F+S5Ue;S;n3v^ytp%C&2>qPn71b{M&LB8= z`YVIu?|1&#|ERF3``84XRUz|s*Id5$|JUvOouZ=OB~Eb7`6efjW4FCXzWB+f97*w` z>+j5UxHiipEoDkzf%{*(3!Dd9UAK7O6YfouG+ScD?CaGvt4MAQ8%(} zT02FTuf{v0X<_~`lOO9Z_21`-EibzLW`0u68|5?e+77-?E3&m*nzAFw-_=d`MYqTS z+ejWx>-OI=;qMkUzstM6Va*p^1ND89>Nj^DGFxENeI&W-XVLfXxfR_8vv=n-D$ZT> zeRlr)x6QkMx~)3(;s!6@ z`J$rx+f`%cw4OSWccmBIa+#ctZZ`&0gd-^kEqKD** z;?8E(GZOD)zkj!%Dr57~dzYxp2@BhXeKU_MihVZQ@Tz6=O}q6HeYZbt=WL&Lkk9Jk zpR&mdU!~7pz4YYj1Gbk#MKo*e=S#!{u|D#zeAlv!K`pjYq1Ed>=OL5WyEVIZKRWyF z#!bD&2PD`#-6s`25!I7=uuxO$%!@|OwXgRZE^mzdRobDWsoA|~iclz@gyiYNxou3# zV=qd_9p1HqVP$97ofi#1V)wNO|Hy4KbM?RdP_|&gA+vWso;ZKsv8l~9drk0-!#7iQ z-+i@}|Grw2zJOHH>3cz+jI|#zl+_<_{!_N4QsedAv-ep0{L6QXx_J9f{N}24D51yy z;&fI1?^CViZ4WRpTym2)XJ_9K&cu}2KI?8@SgEO=@XoD#QO^@QYoi6;`>@)~Y&ms& z)`#hLK6W3mVt;z_jn0-&0wp=uzkg4^d!$J#=0)Snw4XtI2G2#r?kAU@&GONesn49> z>-VSW*ObT8+PME~9y_3~%q7M8>ryOpM#c`~byg(@emYmK-?L!*Rhcs>OCNyjnn^-sJ|MCWJrUn&t zu61oUzbn42{`1jCI5F*V{>=@x{g#>hHb0ilDerNL5VVRYKFz=q>Ag9qE&0W_#VxB} za-F%u`&Y0~aGI)b=ar`CcAqU~NUtsWz9Km~_)g=V)cRfz;u!Kf#;(&OY9CKT!JK zFGi#0Ekb`yeSYoDdv$UPi$k-ia()~Ciz`wb8IEQl4`M1-ixKbba6jjw`b?R-S(`kbTNSL+Eq^pV{J83gf8kvFgFbr`L=N2Bq19p8JL>|=^IY@x|0DRW-h-AmGxCIPxti?T++Ih&#=k%@1NZM=R@@eQuMee>K*@u=6fYEm6~?p%R^ zlTIw{;->v+m#5Y4Y1$h!%_Rs#9 z$@NV!VqJ&voQGi{7vvj%XHME8$`K`g+U)t;b==jKmYa{eG8)f*@<^dB{RYqT?S6U& z)4$H`NZ&rMaaKBq?ZTL^GB!8mL)PwmC3tPZtuu1rvV452rSHCzDEC#`@BdZuuYMuJ zs_gXi9S42)>Cc@zLG$I3Byoj?OTN6a!7C=dyqv!6ebvEJ2ScJPU(eacH0y%wt#uho zA33#X_fN`NT^lzwMEqdbfu7$S+`UITrgK04dQ;r(ZTh=bioH_oj%(&et4#K0jH-OzLCmCwB5apY0Lb(DU`Y!SVF(3Kb$2m2%U%GU`w4JpSj}x%>7u_bO-2jGrl7aoHnsqi~;yuK$MP)sIi!;`RxP z3Q3;H+9w{J?Voz)i0p-jO0RmI-qixB%X?GX$oNYa^jX#l~~;-aeZZu?mu5@9-l0J^XK=bT_zv7 zwtv#Gv_5jRr0D5)C7Bs&!56rMI8K@Hoj>NhiK{|xii_u*=|8k4SC?@K-<^?NXwJN@ zKjn1BiMRIGm%Y2cW~KD!>}8s_yUdm{o2Q-P$g1-@GOu;jhhx8#pX+m|2*!U+@8Vt& z5EFXn$(L11e&rdG3j-dTZFk{PZfz00GqYCY@lqRXy)H;TiFBti%0c&i$2~$G_!u_)@v#2w!3#cQ)StIo$5$Zm|F7B$U$;R|891JO4}nvezES+bAn^t z>v#NF_)Vj-L-nisNxApcaZypX{x@yc|6Ii7`>*@>rl=`AGi@Zo|0*8;(7@SV_=0uy zyIh%~gDIk?r+PSbTBbagn37@q^4*_Lhl11=mfb2*@z0nqzVqZOb+PLzL0SJy!haj{ zeGv_2ee*K$+6>ntH!9R!^5!*g8>P5ht(qqBoBx!`9*5?lv%7e%*T(PX_R#MC7qz*i z^WduAQx@IKY%`d?F(7SQ;}QNDpQr3g)~Q^^QXzJ5vc*Kt5|fD?N$2`>A70pD851QT z@`vYhz|M#y;fI&s$V^eZdWI!LQ^wkMwugUp^Ic)3u5kSeZBDa4iEL{X5SGy^{cP8L zca<5_(iKkUpZe4a~B2m z3||>Wo0&x_Kdo5bbLC-0g+_K~8{hjUh1aUcyx%6cc!lo% zvtD+$-|tb%RoJL|hrwXGr3BQ+L@u2H(q!1sV`#t&o^VOd| z$Z(5o{^Z-4Ai62_y!UfWoAN`qYF-sj+;LR(k3SpNHs{|<-)nc=*|pGMrfk^BV-h!B zIWAYfuemDm;D^vBGu!T(%`u8Cv&-W+xBd3ZWOKYz)5qv)9qYn9BC zPbGR5>3Rg63qD-$$RRA9HlcO@to%jjc2kLRtFTOthaK%N>T9xn#MaqvY`&R1Q ztbZozdRuIP{|ts*=k8SAFMrMd>g&^AO%C%aOxb!nkMtgKy}OEoL2kWN^m3^qixrb6 zJW`#J_(}1KNk*owsNjF;(z$Jm^^W?vxH|q3F|=t-J9X{5lJU~lv(p0BIHUwv{5kQj zcdoE-xUH4#jJ|J#D<9;hot$$3u;+ z0y>0u>Z?RO*w=D#X~0g-Tt$s}yB@?Xc)Rs>Z^3Rc$%%`uOrO=}BPe&Vrdw{+cBcys z^A8$dwLWjA`R&}-?!Nzp z&J|{`%M`mL$$5tvFuN+xs9#p}_L%a=VCN}2nw5@9?1`w~Hv68btCN1);A@X&k0qdjAe_tvJVR+Vbq^ ziiw&_tr3geFL zDFw!JyqK@EvL9F&$itBD%)rGdXRKmtpOi53ao&H1n{B=C%%Tp>-{jPMK>wEby8US< zEPUd2TYdg=^Go+9?mf1jX6SSr)|uPmmcHZCimqTy^~cSs6X^~!&^nrsB%k^{K zPSM<4(4xw)&_25*iOBR_k3>em8>tWGUffd zRi%%wl`vXWGV@0s@7z3neVKH&eqGe>O7}m#dp_KokhsiyX{keLfZIc__6xEu~#TFWdP1+ReS%eu-SHzPqPfJhi?f;k2i|vFES3 z$9LRXtU8DN;j+{B5|`Wl*|4L;B89cavMB!E?dHVo>YmpQJv5rwSyS`&{FIY_z8v)J z=iIHz{yKll3x%&Qd7jl|D?d(`ikJ7jm}Yl8PJiZdW&f1z#!`umiP`Q&CRXt)>~lUi z)IV8P-!!@3Z;8y=zkJn-TTH$FH_VFsX2kM4^J@JpJ5@J@hi1E#e4eg|c=OOlJ>T?D zY*m4uvHCscq#eQUzr6^aTcdxY?boZH+VaU4n^)!KZ20+}?NRry?Neh5?ncUc`)O_H zzT;h`Ecm4D!lNIerW>X!7FMfdPm^hmnxVV7|LJWx$?2iljH{fVf7_6pJ6*fe{qf<+ ziS5t--)&4Yn|$+@SH-DcOGvb$K?-QvdFob`LBWLF)xk=pWkUFEYK z9KUnz=ax*Lw*1Wum(Mq4XJzbgymIO6%zr26>;3o`bK^(%3)ZT*zqzT|cUilAHmA`v#qzt$w0zL}kBdY8TIo=iw#Y4+CE>ZyIx`3m-}+#r>nRd;^v zdL9@4)ys3=@YtVvVlrc$u6>>G%;?w7%O5zovYYr^%WZi%{q^MAISZI~ZVhv&%Tl{( z$Np5N%dY*{y;j4nmA@}V*zMQt_3tiQ`t#Dp1vcI%_VqS*2UdIV-(B~7=}sp58&yVZ zC)aK*yi|OgdvAJgjKzVTp;JB?vl$xFZt35PSL2Sd>3p8QR3n4AUGRy;CH36n%hVO3PX(mE33@(1 zc)iNwjqHDqd@1{S$Bj{D^NjNIN|S=bZaSWv{B=WEWr~Yc^xo}%&NB1cPSq%X(w_53 zVcoI}iTO#UEct`zJ|N_)DF{+#~yvgx;puYY{y|M9iw&wc@p18;1~OT^|? z@K?LD1wC`$_3&tmi~ ze`}M$PYdC>=NiRd?k;^3aWF>M%8%Q(Q)W5qIxd;tLG@vGEM#6O>~gt#^nCBiKlau+ zGC>DJHe|i?7d7LPJ~81Z|D+q-EbXVYANh-$hVkk4%zn1!uJ5j*+%pkh0^Q!9nlVFp zA#?HP6YoW3IozBy%(rGr?d<1&s>L>6ds6q~<_`81yx)E@Y>&79_w!gHK7)`GRFebGl#W$r#Zd;4zXrf*5Q z*Eca2<=$>Ry<=V3)!M>oH~yZJOzuDG`*!2{0`19fvLlVJN2JEvWITDyv$?&bH@EMU zui^Q?nX7e5B0iiqx@7d|oFexWu~0jE)~f4^=Pv#AKgU@%@X_XoS1Ve1*8aDcYrlQ# zx5NJ~vfXy(ka!+7`)$Z2b(7n2{fFkUFe^{{t;Oa0Jf4tvr-%^##{I2@{&D^LQ~{OCU&@1Bo)=c<}b zXe1?70zB;zk6!lv zH}rn<;zOm5;rg2=k50V!q_=lN>F>?biMi_eEpLB@DF1nV_VLdD6T6>o`ZPbK?&g=T z$EGh`_2=;#z5UN~)|I?jCKk@c?)9sxTDocfv0G`4^>fyWYFv+qicjmB`}O_$O`FzT zn4g+lf0S?fZOO=k77}~^v#Ob?97^A~F_F13Y<^NozT?C5xk;>3`^`4o?2E~cTN!P) zuyAf)tpP_;)N<25$9YzN`~P`Hs3mWMZ{pe|f8?|6@7t&7Go z>L>d4NlHmBejsx9>1uIHZ>_8URf4s0S zb8E?hHS5i{1~Om2aZBb$zwtJ%XHwa-#bzbtU1kcu86E%XywQ$_0qjv7%Npi4Ep>3U zlsNLARm^#1@2vE! z57v%Di9zm06MhMyvM#R-PW;x{ z|9xWQuKTt&nUDMw=A7LAWk%HpEsM3+a!=NFG;VaBm??h3r0wq#l?%c#x0_!5y}8L=R6I2+rTcJQNvx^-(ayL( zuI`CVOqPsYhfgY(6x;}xzxyqH@`HdSi;S9I-z@xbr!VB$vBtep^FQ)LJKQR%IBs!u zTAtFiO-?U2csyQG-*wq#ddjBj>!r?Y2wndtE;i^!Rh#!|c{y2S^$m8@qe4rVx0fm9 zTT15Ec@`I{9kSeG#Uonsl-o{06AV>p9$ zM@Q?=vx&cbBgJmbg4Ia}mwk$rPqsb4%HiD3vT2gMtov1GGnUQGPy56Qwgvs3VZrdg z^F&z*U*4m>>y^r0&!j)as7MHeEBrcj_)Kf_DRrY0lQteQZaL{t5aiyi^)Y_kTf2*^ z&m3N!e_Ook+jkEuEr~N{Tj$7c{I$f&zIxY&jx#GivvV`$2l4)Tn9o+C^)d*aI?*c4P?=Nd zW|1d)-oY(^Rqf_v5tkXWSA3CO+AW{GdGeP@!DlxwsV%K|^?P$#dV;7)x6UWCkN>uK z_rJXN=f0TCx*dCK?aykS4y$7Dl_)OWaq(2Yg-M-$Wyj{N&sIDwIs0L*JvF_YPo~&6^~ed65P=3K#W^i3xHE*v~v9>w(HR)%w`UmDkCdT1U z1eM;MTg?$CX{X-?2H*e7Sk4+MQ=CpWM&(%-xgotzgbv zE>+)<7nfvPBn!Ol*X$Q@_Kn_bVPPMuQmg31F8)Hn=&ju8!lXSDY|czN6`Qt7@|qv( z5k{A$pc0Gs4N9-~`=|%zrPp3(YnoJQXCA&Q#rgQ#;0oq~oQhSllc!ca{oR?d@WO`_xI^?y`@O??!H?&=QBwhTRYDrt`3{ z>ACaHe`VFA6KIcj8A2-bV2`H&(T$PL0(CoYervU|3Aqbj(rce30nwmK6$xMO_=@2zuOJ& z4+GqF8Ln`?S4ulokeoVz$Qz zPc`N{9bG2A`lR$L!;HkMD|PO~#ooVn@7A)DT=IE;d8Pc)crDNF*t~n&@2ce+|9!vv z_3ZN3{?dQ;?i1cTbG@Xw?1QOJ`e(J8G=J@=Q7C^cbeel#d6@Kiv$(a~RW&d2es@)I zGHA!A2XZ;S$@#Nk=eI-5g6}?GSa36z>4u2rPSd);{8Jr!n+5V3W*yv8FJk-t*4lH| zOS2YS5^Q(tJv2#3eY)|pF0Q0M9gR#UzQ?;)T&e4Sy`X~g2>V{vL+|$Z{f;`G^D2RH zW7{gDsNc2eE)OFb@7~+|MQLm89sBffx0JNzMB_{ESJYVqFeD~Fa6j;?ocY+vB@Cvk zY;WGXbyKll{E~>_{o~QrJf`Ut7iHJ+yK$7Sx+PFh8PD9m^~uRw-@YBY#s9kZ?bo~4 zZ_iE=FIXv}CooHM;wIy~Q_~esP33K|Ys^ur*tTuqX$h`fF@6iHyeiN2Gd*@=yB>I= zR8etTf%Mv~5wCtk9yx(klvWU#4(e;8jT5`d0pk>tlsK0^v=M-`Pyvy&%9j?#)sCWw9xJ z-7o$v64-K|n|n$O&%~VvnY6EUCpLFTcyUhrcH_nBZ96u8Py6NAaQNfHO<6woUyF83 z?KpBwtV(eI?YtaEmAXS;&%VyOo%CVe^Sd)7A3H>MsOJ9Jv2o+h$+8D-ne(quTA*%m zzWo2;SjPYM)$gxezqauUZ`}Lm!D|}!Fy3}*cxw^3CMEfRnZHE^gZf9dZAuOeNsS#U z8)SXn-TS?B*6y9NZ(GKkRiEMisczEG|EpJ3m#%MSkpFh?{O@W{o=Z`+E7q+G4i694 zp7fx=Ds!&y?d|pxx;;x|ecp8Qy_1}?PkX+e74!F%wf64z^ep1Sqolv~s5esi#;1YbV8Gji_5pTG9YXsvtsclpzcA*^hz?fH9J zwz)AHy%zY=eE0(Yhe>`PokWAK)c>{@Ih3$!p9s67rO2l9kL#7+2}*EBJnugEgL6)C za!noMx{3R^Bh(ID7Jnr1a%V$q)4Y}E_UUZz2>7V;Io?4tRV93)(JYhPFAo_6KoCPpnz=g#GAA{;nzY z=5IfBZkaYK`KIOer9t=h?3n2E(`AEQBWvCQXFKzs|D#v;o%jBx#Q9|U_bX4=@dkX6 zdRS2TeWmvH3PX!e{~8vAN5A4Sk<{9@-Z4=pX}#goJ4sKCE30xP+45JNRy^PH(RFtS zv(5h+YxbotADh?DyUxR2kmfhz=h=0$ebW06K9@_(jqziC+V}f>d8x}B<@3IVj(p$d zB%Hips1gz|%}K8O+8h4ecFi?WQa_t@AMQ!(bC>_`ck=$n&f8Jl3xtAw$wF%>%kQ3<*(~rAqKDhkJaI1Z?#B;}4%yH>gZ2W9pm<-K0E>Gd) zWXfebSen;Wy!-AWoB3C+pFDcfWTAz8!f^{eU#|(TYJK#|98_e2ci*3XZ?C!OPTTmu z*8euWKBHH~Wn6PzZ*TS5vi)Xf&qho?dGFpC#n=6+oBbzs%BwFs5t+%&xoL8AT8_7C zU(o8KOXcc5bG&A&_^@wsUciUS!h^^8AK%<7vH?O{<)le-|T(X zPtBI5t>N^%E?Y6_YUDGcNrz>#C^Rqsur`tc8;<)>CcU98% zjX#^CJy+j$-Q#orP-?(A_S-*{r1}p_+|iukw&1?l;+%I;9r7HDb=2I`-ree$ee&cf zi(9^{uALKMxqRc<=AHFvZ_X~8&D6cW@LpYi`H%X_^=M4#>0-4O9CROiN~=5)y$ zv#0e=P>PBFVD~Vju1EDleZF3Df7+TYQv>E)$+{h%dtFzevg-P_NS4C_j_T<>+byjQ zKD}5l&xoO|T-vr`N`K4En!UerYI9xUk{>=lpQ0!C{a(`S_@={??k&9VRbi)uN6YlM z%afM&d2~+tFl+7Pdp|YTTh2^w*&?*`NXF89xh461g=d+ZLj(UklsGDM!Z?F%_B~^P z851+itm>zo(Ok0QU$RhFcAAvAb&IU())lH9vAJ>W-)ogC|8)2k2T%FEYG>rmIeWA0 z;^X6w%z3jvf9|toX=|EZZnE_=@3C^)DG^ovoUff@M@@Qv+KtI|wMDVlH=q4Ef8Ju} z@^#9aKbCgSo3HYs;)+K4Z2#w$M-~~|UjO=e=8AWJ6K>dfw#^lme|zw}=4+04abwrAItZLPa^ZvVh|``l;kKMf1nqHi4iJd4x3`Oc|D;j^C9t(kv+M}6i0oLc6_ zD|4P*m@k>-edk`|UJI6Id;)6BpFgg-e{5T*PWGKVMZIH!84o8(Y^ylfbBg1xbYiOI z;ZRK-mmE{mHxpEiuTN$_khZ(*nT>SA--uf~cK?t`e%dduzn|lZZ#JXV^K&7Z>;AC5 zy4Lse_nUsp=EZ;A8~`>gjZ>h_1V-=O05=@8Oq}SzhdVr8RcL*$b5g)<4BwI%S6G zI~0FAa$xP+_oix3w(8EcUM{}ZykpnnhN25obdR%Mxvg`2sZ*V$UVrzr$C;IjmpE?k zeZ4l#@>JsgJ+U3T4}9Qv@2K9m>;2?Kj?;U$iwNFNJlVP8*s(Y1*7mEs`qEd-S$pdI z%1OJ|J~HUPtiFQxTl_jRmuIUu&aC1+m^S(9=_zdYUA>gGm&d$iY85Pz(dJR_=-F8O z?bg?-*jasFcez{R=q5R;-pDIRi2A+k*#*D|OtrslN`Sg)Vk4Tp3 z%@WhFJ&5tUXjI6~y?nMYQv%*hTO^J{7gZwBqn?iOJvhezrT*yi_AbGWNWG zP1@$Eau@GL#mD65t?gcDvAnQczRGrNqL(oUVYP_s;})@D(hzvM#Wub;}@&do9Y zcxfBUsza|LC!M%no3OB^p>Wdj<6WAZ5$(%PvE22#D1N%z`|N)GT#28B3pE!%cUj6S zCh*`Z?=G+4jjC(JN-Wnb;P`*ZR8XMq&Wy<^QsQr4r+!p(=325l@;1*hxz#_SSodDN zwEd>p)ETW_ZYQg%eB@GF{^`sONcs7~WS)xxbI{f#=R}P&qHi8A+4AY-bcdC*zV!Ut zsna=M%hLQ|x7)YsFWVVRb)5O1UF4za!zC4W-8APcX?@BUVb7Mw`cDGeT#VI8IPZQa5(#*hCeg)+`@x0n?Ifnd!Mtk_TsyydNoF-S$kJJ zO1QV6*LZVCkA+IFjHO1y+Qm!CF6>(|cV7AKMU2NLH-DbIc}cn5lO_9e{S!`oY`u7T zMtSa;i>^kUDz(3lD|G&SXUTu-{npAK0wPWU%OfK=TX&0^_|-3XKR-PFbmV`5pjG=b z{%En-w9R*{BX$;I3omd-g!a&MR}uxwX&{6}Nbxeqnh zSdPEB>2`GC1&;au_w4(qEO4R5aQ`PC!;1ykYh~tdd2#Dbw!HGx-ombP>ulIBerR2O ze^r2_>fxO+OKkPF_^)9w39wN)^5#pjh`j$2yO`}>Q^iA1UcT_Uyw7U+iJ}MYJKB}6 z|31Du{PJb}Y0tzHf9^SY^P^s7kTk~(m#7tCSAQ|GKD{OJ`}WhHk~aU}UhB-(|8isY z@i6vfdch3Kn;pG)e*FC`0Xik6M%IX9=JaRR=jrE4Ez+KT$!qPjD-OFKRme4Rxh9E; z%e?qsKl;*_626xRB;l^5dlCOP+6z z`yx30g{}Ahskd&&hx3BT^5wDox4nb~O13I0%8#!fDmK+|@h2}+(iP0G*xJL+`P_GwsO`!--dpEoipVrCU*PsOxqcEMzUo7Zf78S6^THh$t06ZL5{)SZ*-ee&AG8fRPe zro^@HzFSwDbbJiq^~jkLs(Q$6Nuk>9}*$zpCN#dw0&Ok%shuEE3*y&%>MSFjP;vZElJs>^OmK% z*KFId#dQA%COr+qf{eT^rGFYbv%BuD7S-r(Dol$tH`&}3#&;g!@hJi!O*A6 z+}b)?<%ReIcs{T*AF|=v+4yYv zCr%MZ0t98V?2}f^yx9c-|m-y4`QD6yM zZtD~0f~hSFHd*tqePq4M>>hCCWtQ!{L)$~wZu|D_hsX09^~*O~3%yMHtebmqf}0-C zSNm&di1n{!9Vfhl)p_zI-<{qbk6@Q7=A6?#dYzdgOVYAxI8uRm(?rA&e+zxm#rGm+`7`I6sF)-Sg7UYP%l@yMLYwi%yRU49kS zEWWmG`PO#Zw)maRz6Wg_vW_c?U3c%?;dx`?uCz0Er~SG3?)$4C*-)v??}TFlIPbpk zIytedyOWCwClMp{F?T)o!1&?=VibDwj*+8 ze_^wamDb<&j;nv1U8=#sQ6IcUOz8N>KnLkJ2`-=Yee7fJzk0xQu}o0DKcnoky05v@ z^Yw>hqN?UCGW0E((%G;;IN0~oglBt=b+uibrqBGrdo^0@#nu{5-?)$yZ4$AD(pu3E zxBfVJ{%C4f{-aEL`3_G(p4^~AOD1++o8G?I>gL3X?{n+l{82d0`sb2rz@)l4N3%Aa z$ef|_kYjV6v*gm`+%?4ujNA@y`}J{yW1&s^TAh?Ew=j+<6WaxCw;fF5xu#z9Gu)TQ zIkB5n$@Ov&A9LdjhkduRWmT?**K??EWY`&?$^5aoeQr7L$-)N|9yYP=l+>jZ&kjCYyAIfD6y|yYxauWhS%Qv z9Vp9szkg-Y)(0j1ZQmCJB^L6gFEL!~aQEi!&Gpa!oa3z4TywzVq+Gai1nZ((bN4-OVvQ{h32)h_6Zxd z91YJl&$#?CD{ytCi9_U_z3j}3t1iiXC=mSU$Jn8B>f^6w9cR^FOxMn(J*?>K&$}nY zQeEjR;BTJaxhZBgQ^4bs#yOIE8h$SjuZ%qtdSI!Rm#E>P7f(aw@+EWvm-1?JPHeI$ zt$Q2dA==o?n%b?gdBe*oR$GJxLw3FWrJbw3{mw7bkKb-{p7q#av*T#TRE}$Y4Z?QI z|9!BP;9BE4d*Z~pPk&fz)s{Zy*&U#_XW0hxeeTotv1@OiwS9B263@Mx?*z8LdObnv z{gE`b^M0>nd0bMSH{rLJTWBko8S!Z!P;7{LyV#B? zV~6TeYrUGDh2t528`Cj+k=BCAMr;pood8})R_|5->e~JIbH-)A~Oeaq2Uit0e z$?~JCqk77e^Zo43nzQo!uU)^cu`#7ZUgLq{w+*+|+t)AFooO#MwR5gyRH_!Y;+!=Z z+f60%jFtQAFS00Je;=si*mzi3Kd^Gef#=~CPy8!cGf(n#Z!53ddi%!D{tr7}Z8|0Y zaP!o!tTF-tYQ6Ve_%0m^&;GpHd#e2-yEWHV_fFl>^=itGn?{!${$08g^UpepGcl^V zwPsJ!k(B7?(#u6Ym0sG=_QyJZQ|j!N_*3O#Ob4GIjs56*BeaKMZTdzDLz%AsXP?>J zopE&iJiWaPVVew?BxmbSGkdJ%5b#IA#ZP#)o_ELl6WgXN+O~7sm*Rc3aWMTnd-nQ*D^EqsLU&x>Bk^`Z z+Rced{D&@BOxmUNK#|q7MySZ^hs~qOP2w)1U*=g~75FmolUIbVrE1NjPo6(a=6bCP z{i*pvS*0uI?Uatq`8L~kOuM|FwRVY)$Tnf4fNzx-if~ad4r%qzoAl8==@^inN3PF`m1z4Z7npv za3%K5i-4={{c)>UowvR$T~eDcVb%Fv@3a^D+I;tlo8I4W&~(@TZwqctn)M+xdF8Pe z^B;K0-S5+$fAwyLm$lxTS&1AHjh|hl8bm`TEqHRP{iP;@#FU`tsZPaWvvq#N+V2y3 z@g|7p#_`1hHD&kgizc13_6YhS_|w(n9M7rbF!%gx?0b$}G*WO_>J-~?pwK1!(#7fv z+5CR$ZCNvzO%5_L>lS)mX1Mo|FX=AZaoKX#_V<=^3a=Szba-kyKVZ9&aQobzmf+PK zXOoP%o$~vW-6l)Ee7F6<9Xal;Xi4N_YsH=>m~AS*eedGgS(YKEe{R|SsGvxF`R6{)@GS0=S58*{={(Y@ zGktEdmD=&M;o8wXi(c$qndWB{!JQKIHAr;rT8<}=K0W&r?9$N`wD9eYCjsdf#h7j< z&7XBr>Q0U7i=Nb;&o*rzjvm|UHs7d7tH1e5+lHLoH#%pYElb#WUph1KaF}2oll8Hq zAJZI*wV8Oo^!|B2hk2=__<~yB@RgRzd#9Q_^Zt45k6r6)f2LD!xBBdkR)PHcWoNw(tUMO^t4;s#vbiTU%z~Xa39`uU-kxRr&{Xt;?{BtL9)ZQP z<@+S(ZkOtKcWRw*-!m~Y7^Wp4C9MOu8HXTdocD<;s6Mo~`*5(VA-(veES|cwkZkw2y z^TeWOhZ~Pdp6=aW4k=CZUOD*{SlTsR{=D!9*Y)+M=3ji>k#_2S^3%W%LD$!?>R)>5 zchXxuz&l=gvG|_;P*+dJ*xspoWG+^!q;jotPceP8_gt7G1WdU+cwzi!03q7ZuNWyZP}qPA1D;MKgq> z*PA@ccxiBTQvRgZPV!s}UbC)W_(eOMp(8_~(pvug)>X{Y!qcut9ErFv)jiZ;!Hgce z=A(@)=F^SdR3((XNb2SGo4tmI#cTP$KLH(usz*0CoD1RDRdVcjschBmMMtJ^&idjS zJKO5(9LXb__|)$h`6fB8oUOOx{)G9wy=;j1ZaX65y%oG+V{`AyQw4t!=Q3-D$#yD0SN+_?!A8S8IL?t6ZYt^QBf z!O8L-EL)z3eKkm2vP8PDL3HD;4a*XZ>-bl7-j?C>Z`(Gnv+9CuyzvIDJlp(|a{{UR z>n?2x;C#cK86)}Vt;4<=!7y_hhQGVM%dSb`i3?g?RJTjCFUsnc%l#csdBiv0*~Os| z!~Mix=*Qe28a7+vmNwrx{%^mm$%L;av)H1;4mgXH1nHfMDQSrE>Fs)WiF2CIi*GO1 z2HG#bo}j(^{mH6Z`}ecl6r65;UDjd#R|)TeWwQ)Ij-3t&OF87wdBU*&g-o{(>+MJ9 zk8gd>zwLmT&+NtdYWW8(CH`y_Td~Qrp3UX_=9&-pn~fDW+9_|SV{&@L^D?daTb(5X z*OzstZv`&tms#_2rnvnsr*l(x8pyOi{(Si2!>8^-9qT+cXx#kicUZCdXH&6-s>z1f zy?I~0uih-jxKG@}J;}Ua`KQxcPn30RIkitzJ*-5>(^Yy>kRRW4C1cxSMy-ic+5et6 zSn%@V`4|3_e4SNaIYB+5*bl5 z6Q90${3biScy%HNvsL_oX&O*=o z_#b7D%dc`7Jcx7MQl~A`v+USx!G`TW@;g{xf1Z}|pjz`tv-EM(BM(+8o#)Le%`+?I zofp#Ic7elk(~izB`ZinNE^N!!JugxCeER{Pn2Y6)rX-0?adO(p7aCb)ow}WjBuHfPg+cxAqv;FCl|~%|1&X= zD|6Llm9MJ{E|=(RcM=x&&Rd_^a(>?GnCI)(-_V+pka7P~aoX$yYXd|T?#MMBc3JcA z?w_5!`zBxeZM&q<#>#bu?_}vsXCj1hKeg|;5ix14rbg1uS&!EFFSw<%qStHNr}TMu zbG)-IvhFvHKbQaT#LuWR?;WdeMK>>)`&DVO*ZrRF_b%LJEP2xAdYpM1@Azag5a7xI1SXx}nS)JZJQ~8Wv_Yd1| z{(T`K^&J(*cZ4dgtdX7LKWXO6{0Td)>|bAZ^5z%SR{pfT^x|t7mG-;mBEN39ZEfA$ z&$ao0{7m&p%a3u_e2Qoi$-8EudF(9bBp1!tN-2k+r6wYWyMEff>tHfTaeAO?pL*(4 zfeMpiip*lI`P@#L`?S8OUXNzD*?3f}LCaB@&!n?`WA6VJnOV6E%L*kE&dnCvme?s2 zaz{hIz%k^S%bDZ*L=H1Z>G^mZ>tD9d>+%MZdi(tE_q_}6sRrDunYzuf^nTFdWis>5 z_^B*BZd9apKfy|fyZEH19HUvpO3t36hn!Y^xz*{K#FMhAh*7EX(}9&U-WLT=>FRJ( z6;iKTHTj4}n`Y|TuSQBI%YV)7y?;KUEv-4vA^2$Q2c`$o+l`eN*$;bgSY9&RdcUwU zDAC3=#6Vd>?D<52B;N2N`ff>VYXp6EdL_tqXSqAC2%c)umU%=^BPq;KH@EVU$$h?i zC%HE7n&o@>(WxvC+HAZZURRnVX8qZ&R&DQ(DyeMc^Ox=vUo*c|8nY_d(a?YH zEm1!^$JaY^-tyXC&r~)Ll=X+BqjixwXwpI9CY zP%Zmu@^M>#4yT2L(AkVG4s-5IPiw<9Ucz=arCSwm?%+DI`Eb5er>^iGfKrO zJ?Y{}3%<>wci*))8hO3hS>kTV_-fJ15UaYdi_Z^~OxMg5pD0n{mankiMZ0f8!aF$) zgKG=6=5H38&|u8z%^WYvQ#fg|h@o%R#sX$vzSbM;JMDWH2Ba{~R_@fl$hJsN_GzbF zD3|}s;M3x5`LDFEdIp_!R{l8c4%oypLRCTewy*DzY}s ztKal#+!?>6&VSZz@M*~1mcqFCkHinQ#P%1$dNHjReV3H;-CLRLpSwiIYHxr>lIm2M zpcb2-AFJ9I+&!}4$}Sv-HKmur~(l=L=> z`_tTGjwxK&y!(yzgy1l?`W)NIhG8|U`*hznw!aHI;r;ZM?%RW}4QCvj-|oM`(2M6^ z_=bNiznIu$b1zsHzPK4YL2>^dokI#gcswtgU)Hu$)tBUu`NX+O@VNTS&nNDhG06Gm z@~E@h^%hP&6*}d?CQg@wTb6&3yfszYLdL%_$*}B?*lL}_NmRwM!@#=AgyI#m- zOH=KvJEFa34Nl2SFA6QQk$UHonikTdP_jNel(6Mr`M zvon_+wO}y6@an?vL8=CtH3w4{N?ioM5R4X}i+nuC4{i({6mlUl1TPw3_`TC>0!nq31r6)6-l&lsn zWuEQ#+2(f2Qq8q%f1Yp&d~@Wn-{$6S^{hV(v5zu)`j4eud{mz|V;$rrNMojs^ z>h0>dY{UT zw=y?P=?vTd?CmzeRMT~b0v4LBR*Yq1{-|YkWpmfo=Yo@3j!ruK#LH~y>!M=W>4N|E zH11jK+j2xVadx?Kxz)jsQ!M5=>GS6;$a|Hr=+s30zLEfwzc)5qUzK+`?A$};*Z<kRLbH_XAP@!#-5h#H62d{&+Jp%92m1D)y%+pb6!d4wP>AKkP9c>qm&!ei_H=#dEjW2@O}zL% z20g)Qdz*K2{jLUHNmcZV_n*JlKHImvYU{Vm-i>U{iMp|ycla$z5p<2s` z?>cM$E-`<(r)KY0ChM+ueqR#$|N1P*y0tZ^aeC|9&u`XREO;1SxNwbL@q*8Mu?p-h zrPp2RzbfA4zaz0jqo?1Kv3lQ@w(N!CvwZY6Wm>b`Jl40>@_^FvAR}*1`(sm=rr#(l zD7QYa^^Ye?j$0WU1-E`YbNr^|nqRy3DJ9&|-7h|$ z_t2@-y;89cqUFt#zrC^Dab)788Tye1@7*?}E;*Ph;OZ%0uD36GLybmy&_AxvWz)O^ zkIa+3|>kouK4y~vzFDj zp8Pm@B{pV)>eOxO_x;Yk>kEIjVa8-OrzJlB%wp%yE9zazeSNR~@}(JeQbI|dPktX& z)pX9`l3tWu*fBB4-fH=(%Kn!6m)Dz26BkJA^gJ3krE%#xt~I@1zv}8J#;sYecXh#4 z1;KS$*TNQ^TIQwoWrB%8{o!vX(=S~+`0tcsdcn1$wPH-pD`qgW_T(~_^EQaAKKcG* z?T(I_2RCtr*IaGbW@xcihn3fIS9qk_=G+xQ2NO;2#wU5FUTL22 zCEZupc6ZdeZu%&+`}UTZXTOF^b9>Le(|zzL$K7@3S3KD6Ya@Pd3Gc&ZelNA3%kG3} z-pb>cI=d$zV8g;gm#rty3ehq!zmn#`ofyB*P4duP*;JdGll{3H+Ack}lbbPfQ$e_< zsL5l2Ir8dv&(9CPR+KU2kGGBAk}oS}U$eZQm3f2lSQ+yh4bP=ukZY5UgkKxr;dZ?`o%*Y%Z0@YA3d-;tjKnI z#lGspkvj~9Mb0;*s~wtm%2N8w+Kp@(T{C_?J@)I>>9x=PoI3w`ePPj?qrc8?^Z4R( z_FcZwlp?>feM^}3DlFc((V^{U;v>s>kGA_oJ+s*?RHXQVQQae1OFubPW$v! z#rsMx70kXRnJ;^Nc1M2p#pT@F4R0|gPQLY2eAn-vlgiy6dM!SgrF4JsI!8Z14 zcT>$bJjy?Xbc4KnWMsFR7aAOio^5{1Wr4W;p*<(JD!!@6{_Hk;=dnGW+*4(&37pK>qZmyd($4+)OqEX98!8A`J52DMGUl9sOO{quXasivHQ@Xy7U{&LSU$?RvH z@!w@leP*zm=7I}y9?n~MCz?y1+PbXAV|mY#Y2Wg5PxUa^E~pDkTspTZTY2mJF5Nz- zMgcmH3!sZ}ZCDwf)S!eiYEq@qtH{$8@&}C|W1NGQX2YD=1|6)7s)!yxu%Qrgz`(?bW zVO7kc#DWX;db&B5?Dl(}on!VBeYkT+&9?QgUq^nOE?vgvc4|f*pKAOm_Sy3LcO}^u z9($;!^+7Fn-&+}_`{BFw!>8=3eC+)EHYcxrX{njuWybga99D(xo!8R!U0ckHX{K!2 znxbcazS(bk%`ST*`s>}hA5Z4~PrViSZDNnk{5!%idMzr~7O32;lJ!iNw1<$Fw9N*Xq1|i z<(<~A^!VkcM~^N^rLDhjcOXACl;xwZf_mTGnv;8#Rn(GoR(^_46F27;?^|}#Nw?;o z?BqSQO6Pl;GwW=Qx9(rQV@J^hos5j!O%Bul?M}?)UHO46eeK_Ehp$Ud5l#PTJ$*SJ zld;#M6MtDw-jA5sxM8-)^NgpTj)(hKiv79ysrY?XTCnMs(i@h$c5yvfeJg%aMgRUK z)iK^Z+_MBy&#rtXd-OSbk<=wSr3#7ZLcDKp%iG2XuT70H<#Q9(>3*AFJU6QPcf0$S z=tuo;xK3bBw|j2AUUA>*;n~?+o4>if{j%rw(X(qdU45_WeCyTw z9bsz>4a>^UwDP>Z@I>?4?_^SXl<>7sIqA-9 zoyp7}|EXu)yw-B-_2U)Ji7LxCITyMv=O zN^_Yj<*}CAC6#R#=X_#`yIGhNlq|2*qHy<%;nRXv)bav{?Z>r@E%SVQPPKgc)Yc#y!yKmb>D!L- zSKZ}D_yn};CoMQ*^40Y1;cs{TuF7HC_3G({O13?GR`CTaHT!rbN;tl_Z<6w?^=Uq% zYU`m=hD~QUZn&&VIe5wH&s^qXVe&^39weO44S98>prSST+C#Tq?edrTn_VZ~bci}J zf%U9)|BkA|?{v%VSk9A4l>Yss_G(J<=bC`r$4MJ*X06UF37A{xp6Si~yjx0?eT$n@ zTKr`DJ9D%Awz18<)-Kj!dg;fb;NN@rvp+HS?N>UeUG%%`TeLjeh1>tQ_2Sn0s}#MUC5qX+G-TF4$!TZ4NKNTaNMsGSOk6)}`eFC1 ztH<*e*wIQM%1rFVJ;iCv$+@&YQl$_B#3#-*(P;wQ192 zG9(8@mO-D~Ca+-3KB3NEux(RsOjfhga6{S=2e+y`3jALQfx zUg|U{pUmc@pA|KG$=sUI#MOeK;$d+ICAUsoukpuh(If3SH%?s_(zIH1 z?a--Tt6dj14?T;_ujLPJT;g9&Y~|4^KY&4)Bk1b!oheXYJGKG(X0}- zllgldOh3o;o@v6G_rD7iPy9{L;##YEx}mAymS=U)-S=e&cEuj~X=EK`)El#FO|2UudWt$Wc(yp-Was>*E1W&8|M&Cd%V+ufs6LBO zZAawlDScvOlKp;l&wi$x-}onQ{A~Qojjv+8)3uaEz%=&x& zXZy3(_cweOUB74f^AaNo?vOZ#e_{aI#f6K(VrlV@{>)M1RpWvP0LYuV!hq)b=dCtAHvt4 zKN|UK`e*6r)1S3xaXR!Ke4gbceEh?Yd%xUgPpe^isVJ6x`K^DEp;GlGfwM6yZe(vh zaM*p_u}?~TlYT7wTsr67I%O{XT!Xc5?_C!Ex3sWpbFF^m)t}FuS4meKywKrQ_~TyH zqAg9?RxY#8HXpv}Ti|t8{q^MflZmb`qi*uNbi37_dt=MJyz|Pv-wb=ia&8?=vi-rg z%<9|EHwGTR%jY~J zl}Npol3n>?_MK1uj~3qlR^a+^{?^R9DXTJn&Po$M@H6^mC090^gZtvb?8F&q3`tYA zoheSjNOHJim(|`Wz#qxj917)v`NpcF? zPiTD->u8lou$=KJ=y-cYyUWDnSKcK*WpvL!Dhq!3`h~_*bVV5xf)MKb@nqt>kbN|A{9XC9RHdy*jz#%9P&l zF11@`)8;9LoBQpGiV<8o(SLuR%!>$t$|E!4a-+;YtmT`n)G>R9V})=rushD(Rx>)=5=^NumS6?IaBtT zevSD2;LnpamJ5QP$?R-YeVm`+!#-K2x6zy5sP4nPi|PM-xndUbZ!8d!zF5M*%VZLA zc6OP(+E>^2zSb8Rqr#XJ+Lkl?37L~Hk+HDG@~8E;zq%LV;*;cE<=8j4C!gNGZQ;}S zCCbifyM3Naaulj45P3hz{NCI!hoH0uUXS;gRoSbboZ;%RE@17ydE})d`>Jcvax&+X zoWgcp%252a$hF1k+JtWD(+1a9oMC+QV6Ec1z)Aso|Bu&J*qrfM7x!mDa__-Q=0@dQ zyh0~M9nOm!QJt))JB4rcqP0eTo%2*@<+4WEw#s(jl-{&Q^Z%;bC;KX{8}^y=T+y5H z#7X+0$P+&Zl2EGn98+zjX`k%5l5>QY z`*CroCAqBU)GoeR#Fy^(GE^?bo8|HoZrdr|cbeYCD6X2dCdWwk$At5Wm%XwY>t3!n zee-4F>AnND#mje@D77rIdYTkvblf?i*-mEmmn!$WWt&UOuH9+BfA)h+!?u0@YEoBP z{{NI(oX9+VT5R6lx}7EWzwX*oQJv3v9-A{5 zv;Uku;AO1uqMi6<;=2p47T=dHhzLAzH7ohUQ-A5l2S06NFYx}Xllptf)t9dpOIEBg zIl?ooWy|#$E#YaO^4o(8mUaoR`BeSsiPQt7^Or@9ij$jmzLK0S=IO=1S**cH=lA0` z{(k4YGh=3U2B@4)dG%<+rM>AlO<1*l7XMvW(iJ>+QT_9|nU_z_bUmzNRyJd@!Xe&y zPt7Ja3w(SuttmStVG=`Y-Oc$?-y$+nl)kq3+oo!Xc|KQN-L&YDru!4^lXXRbODB|n zx|-r_c_sARUN-&8bDaOa>XqF#UgxnnQ8|9emgP4kQdWPxn0Jq()Ai8wBDc6@CDAI} z4=O${JD$J)eOzadH}C8^?TakSIW}7Du&~bMi|$A~+9G`ZgxHQBmrt9<1$Sn98S!tQ zCKk75?fNzL^>Zs5HSa{lN5r4BiL1LgCqCwgmhx?ZMGOTR2EkEfFU&Xj>g(k1{nx)T zM~XYPW(VU7zSW!wYb2}F4==g<-uT?VJ?CY;rm8J6{`j`vk$?B94xLnk*`D4xSCy>0 zv==t6y8nObPp4ZaL>M1eYdS8P+BseN^bW~aN3UHwee2GbGk*2Yr~Eeyzq@>{1EHJrG0<)@pty0>J6V0-d#L*ZuVSue!2HHGv1nn z`NcoD*nGb(fivWX)KWRSiv7mlE7G1bMp@LYZSDutQrAx0?k=P?^me>zeC#&CCv;FVy!JXw^QdrhfdRImd(68?%l~e)9Xh^hxGG z(?4nxk6CUq&lHoloRU`Ty8Yvf-IISgXS1>_d6|+h!NV$NhhfaM_1p9B8`Xa;SzjMw z{c>AYmOfurv2n4nsfy{WgZGbLK7Lr(RYdx$W!{84ZN1!44Zio6=V&GD_#w?BzT;Y| z+HDQTDJP2jdbr+K?2u~yG?QJJC*9uBZN6hr;{Ut|lbzeOAOEP$zxIZ^iNDKn)-E?w z+0Ff@ADs?qQJmMO^5{j6{{KkhroLP^o1E~I!d_f9=UhIgP2!2YSaGCN`OPK8EzFH_ zNo!R09!}w%BoQ?I-nn3%)(z7w=Kkq9`kjIE*@goLK2Di>?&Z(jFH;tl&N}e6lf#-@ zTEZ-^OWfy~|;bH?Kn9n)I9U(+l&`vVY$Ebjj^jQ&MA|YdM#P zL+TE$2$qr;A8NVxFlc3*_&R^OS=h9?s3^{mrP3!j8l;5(|NZ|bUOgqx;Et)xOey_Pl$d zAi#H2^iZs%i*kz#H-mKEsrY$wIF}hp&)C${9CYbaAe+7+=i8uJ%?25sdOMo0hVPkw z!@Xng?}M|~h`1aw;Ftcs*5%ebxvQ6+AKLrK#_S-ncz}G(fW)e?c|J)PoDR1dAwv`oX4}UlSRAa*uUykv2Pq@zZPbENI0T# z>8759^Ry|aP;Vj{%e9vMsIiKAL>{5mF^1eSaCRV>1J!*&IrqW$SNB8wmI-*sNkpMElejJ+SxR`4%gkuINCCy z_(-y#m{UM$`R$@}hw6;pWyseUC@3h}FFF75?7=174uZjXdwvSCDzjJYT3FCxZFzLn zL5?psoF6UKT6T82u~xZ}rf#oLRZ7*7imSEEpE}uIY`$8x%S%YII&fX&ap!|-!3N*w z=kGu9>)&^V{ou*F2m~$6CLOywfWDb?)D|mJgH99n5_GqT<9}=QM%OC%&&! zUK5pHu>FGWv#ip}Lf=W@(ON$utm z^~TFSNBjud+Bd9_gcrbzYnH9YE>?FnBcqqU?|TDUmK;LzjWCW-DG}?&2-u}@1*XWB95!G zpL;A3-P@6yJM*Op-!%5p3#T6axwdB>_snm5V->r#*4;YrmtpT^VT+?XUY_w=%9_W! z(0$|HmzHkxKWsTT@w|Nm&yKD3uTtJkKd|w7Z)M7x$g9!jZxqa4pNV+Uv|T0CUyHDiLfpaz1 zCsyg&d&YOQ{`t53{mL6N*gE%B%U?|W8d{{bdm#sVYk8k}%)aXRAv-n-*G*fk|MSrW z+v%-dsdATC-<^z)Qx|GkR+gDqcXO*kQ z_P2P?nRq5t=%@bUPc<}cRUHeAawUMRc%V(a^l0(sB&)i^G^%xNp?+in)ScHcivanA+rZv=R) zcifU#U3D|=Mz-^tt+_u>#oc;;Zbwg(yzZ^bzn^^loXW+s+4{A_th~QAH;%mxFWt)+ z7XQ%gOkkI(l7i@-o`b&D3*A_+P1dZS>Yk%nhBI9|AKc;C>VJ=` zIpSyC^6Tz;^U6-|VLPSz?Bf~N_f1!xx?*i( z@lLY`>r;4U+vs#51 zST8;K)pBFurhbLLo~wSgUD$JO_JkcGM%3yw+&#fN^(pS8r&a&H==q6B+DU$W=p zIn!h&eJxF$Bb>ESL0MC0!6JoyS9T{m&#CD8XfBd?;n!s8bT1=wT^%E*ivC+mH^09v zr)$#m@3c$1*vIGIKTO&4t?nzoSg~MUy8G9*^XvUju8C=UyUu{gy)u4k{2SIaVg<|d z&3jh!s%0Euu=zS&XwAuN_mvIC*JJYjJvnfFspl2NruN(elSDpy#_jpRs35Gi^;76O zHhtlsobDudBl$AF?}d;4$y;-pC9B!LQF(0rcyhVmMG-@9z6dU9M)&P;&jKtZ+hcp< zom_(se#zgp(Lw&`@-A8bkj0%Qb32Wsc&|otKb!yE*k?U(2`=71cS$OAO z{pBM!_fC5m6W#TUYm-NDgUHHNhPI)zdO!6);#$7LHQFMh=+Af4bJn4=*S|ihvQ&E6 zHO}3Swk??(!8x_-P@pc0l2Mae+Eg~@!qmRGuf7z0db9o4IiK1thj_(jg=vd6nePAj z_?XkLndf>dHdr=EuuXRG;&|@xQOW(=h1Eap4{_xgH5m6^xFU7JPm$*kkBmiswszK$ zG`@Q;^ejWqo18W}rBV6l^6j=D&(EuVSQdp%XIZ_&XR8C#y35u!PL~>1c)r=^73F`k zJ9S>pci-?MRRvbIP7kgf-FZ&IMUg?rLGDfbtxhf$wUaJWtM&%|6s}*tW5Lg9x!tZM!sxoo%fwG-{}|NndqUpLF@@cW$1!+!#rc6X@l{kQLmWSF%u@AvPAPcsz< zD=*{b#&5xE@c?p29e>uGeTn z$sv~m^loMSdk<&e#( zx%1`Y51mWOH@f}n(XzGNJ+szdH<59?$aUL$x6Im8GY&Rw^}e&Qu;ItV-xqW{yj{LL zn7Sr?Pq48}K-aT18anR|Tt2ShIKxbC9!IM4=lfT zO2@6)&{{?4l$f~StNrXIPve$1EwAyinRhz+gX^hi#u?w;W~wp7m9G5ZVe)SNY|T%i zyS_iYbW3Tm{Pn^$86U4svR7-GWcm2%yeIir74}a|<5rsA#qp+tY3G^=T`QqRn>kH3EBM zjjnuN=p2_TGrQuujMwUGEJ{6sjd$+PcRTSuF8@NF!kW(#cU~K>eIRY}qaSru&~QV7zJ4d+GP_)L?~h6#;{*seR^!el}8GjG@&gMdbyX%B@Ugc9@!n zZY@61e(7i^qn@g;lMYYui_)XgQ%|1U@MrJ(^fSWBY7PfVQ@QL#Hf-bKePDEO);!H+ zPc!;XE%Oyf`nMra-*E23=-H;VtFNR)iZ*|ny>b%Y3T5*)X;k*SzBT_*^|}y zxx}(9``q`;3p?Am@bSVsT30ITaz)l&SoQRPwX;N0(;{%<9<=f1W*a=gpfhoxgASHu>Hk(-k-Gx^3+>(_8T3 z{dRWKC+`=vHUAKZQ{MmZNfvMMw)n%f9$UBHC~13Kd!TjRhfSwjFIUb!xm0vRX-h@y zEY|#!Uv@@n=(kR;?|zyeKJ9v4&bj@!ssiIun02S@kByGM7o%1Gx1=sP`2MQ}r#8L! zIgx#OQPR&=i{7l0EIJQ_zD;sJ?t`&G)sWLTv*p zFT1$BzW-ur-JKJ7U1h%6Jh6>Gm;2)8x<@-yE+uomzAW*5{p!;Tt1sNIb=e)at1;G} z+wV{FitdgX7gRaq>%LsQ{U^oiSwfmL$I^pS(`ydN+om3TenzS3^YN?fyFc9d`Q7u9 z)hm6T-6@TlZ{9JoZn*hYqs43?>$Q&Qny&uaSgsdWEVuup8r_s}ziRu!qlYX{h#tv# zqcVqY3;TxBtW8T#d|YQg^XQHSnUsKxKb@&}Pm4X+v0&rk{hMxTf9^}4Y%IUypa%O3 zZ7=qRmoJ1T8$Un)vu2LNlKG<=Z5j0@zt5gIymFWCryak$l{am;vucxh z-+j+d`xVSJ`ps|g%YU50y@~J925G%5&c`|$t6!d8v&eeSzX^ZN_{{rr&`__4RnG9` zfA*PXGTH1ij`?Q%_@W!3d-MH%_jz0*?;m@JeK#zaV(wWW|IlvL+pWy^@HaERw{FQ#sh)E6d8+fN;`|WtnivM= zi3us1P2%OR`lj}-eZzZ+@n*r4GSY=gxngS#1A5xM*t#JtpRRR3o^h1uaGT)$14j zI8ZwCMrQ4QnVBc~=goh-q_FDj^?1JDZ|}c8x%fE0e5KQ$(`Yrn={LA9GzD5S3hWv)r)U!p?Q7FQu#hiHSaE~V*k3IrNd;} zu~PmDo5kEW8g6dj6wBFMdQXY%r_xG|(4cR}x4Wh7SaHkgSF7S2%^jAHII4s%_5alP zA-pp9;YN?(RoB*iV6B{L{dQrL=qnESg7da<3$n~j$zTG*AJaNx<11-eS!GY)Ra|Tr}l9;-+VryL+YE) zuCn)gb2a#RM3QqO7n$V7u2<>4ze8~aQ^uwF37*+ACls&tTPbo#XkGJRuPIXdQopIl zJe)V>>yvBCbdGyXsoEuRuz8Y~$<^51L7p7vZ8cY_bVr1@*{-b3_V>~%%zXXI!+#FL ze}&CgIt%VGEXrNfCH{G0%&BQAdV=cgA7|B0)_WEll6v|?RvgcaH`1{uUtie#K1DMA zA;a5V-QtD2XHA-Sn>Qw3LP2biVD*+I@44OIedjazIY%JI#oG0&vyo%kuqu>`cD!gwD5#$ziTDKTOZ5myS~r-&7DWLF3xB!xz{mh3SPw<-Sw>SyS9* z_qjbIEb_n5-qzhLmr}C}3Np@BTkSq;n>Z~e%E|1*0zsvt%?CFs^x0(2nYu+)b?^Uw z->P3_DsR8%b3SbEO}(n9?#InfgJ#~3sX4~NvBPlB&z#CsPvsR)R$9w1>wjc0Ny7Z- zjBmf$Cc1~IC{~&C*Ru#tkYNixXeYdfBeAmeX0H6!Z}-h_FF$jlm-}c%OOj_}B_# zO*hl)rzh7(&wZ5tZ_|zN2ZC+Z!lvKVHze`#-f22__&TrnGd1gjTjCB!nCp4(w3ELg zT{`_w>Gv#Y@5E0|H~0!9>du~9<=zyyFhYNhy|K~<_X!J}-#$KP?w;JY(x&m~lcS4F z7bj*Oe8Hpm?cr)2n_K<3Wo`Hi=69@VCl61VcI|X|jJ%&=`{NC@kHq$?U3JxyP}QJSQyI)n5J9u%;(+(dRB+E|%yeOL@*VHqU+P zAkp#m&7sCtSAoYm0&a7!t^8ORnz&l%bkL#gE}t&uU3zuUTe-D-%g314t{bc*TpqdH zJw18D{{^Mt+~S3W`Ci()zi#6@>!|*I(W;Q%2Jbiqm37>g-R@+?NeBKZco4{)7{j&a z?m-UbvtpB1ZgZEL-XON_@cV1;>SoA&tGc`D-g7m0L82*ru8UCWT)wx-B+N_@*V+@<6mESY-9ASMK@g0U2JR+(EwGCxR=OSU2~X z-@T|SE}d-sX=c<-(Q7XP_T@ZH=)1IamqX%@6Fm`M>cgJjyYOW~+S0wt8X6buuspor z)PybicJqp-EO;o`>g^Nb!Sd?l+PJO4g|o%(Iv%q8x98(($t`Y-vM+Zx2y9|5Tb8Zt zI_ZkBDDa)zaA(yKTck%Sep1zX9&GS|9QFM)5dTw;lnZu0{ zP9JYCt9o_mz`8GQro_3vJ|)#4(l@uMs6rDLLuZZpp}P4Vt}U{$t&U&Y#1BHB-xa;MclW5{D{kxc$HJT^w{3pqI%##H@Du)TSC4Cnubj5CQQ{Lr zkYIC`%|hI;sCO}W!CYfGVGHoNdeTTA9(y`_4$ zPkd6aJaqC(@#M$P%p?3#!iCq&)Kky0etf4+dl3Wc1YJqbn9bY^o<6L%cyMff&QZ$^ zZ|3ywajsZ$`^@P`#ak`rNzP&4LR5Pj=EyMrHWu0^l`gIKDdx4{If<+{vnHiZs9AYF zj??t_Hjh0~Jg1e+W%3VBnOxM@X1KY`N1N$zXMgs}TNzP?DM43WsA)UD-KbNt=p0jL zo|Lz)f>f0iyw(^5{~|5bHLc+-;9(yndY z|8$WbVFFu@zI7|&wCDO&su;gM?wp^0__3SsuZHFp{YiPHCpKZKx4`vRf36+s-gQu2 z;*;1NGk!_lZA*{5dv|q*_UeY4pMQz2(=vC>xa3~d&RTB1{!q!Dj4(a}#T9=hwZ6Zz z^8VhUKOr5dmgcd`zG+_CniwSgv4d~IKZTeIpGO;(+OWy*naMS$&1pf2OYFjqWP`bD znQ{{LzP?g?CV*M>rjw;-heo(%$m7JvYR)s($*=g_fAs6e^fFmb-*uPY#!9=*`D|5` zelasVUvJqQkMBl@Z42DekDPa5@^J5LkGFZx_vgv0cZ>Htxs&#RyJKl%fKunu2MWRE zGiGraeE2K2=!#LJTKxxyw>#D!@w%LNd|3>i>~?3j9xer^-AgvLT@RSM*8BXk__YcN zCAGCnJ3mXDdAVOxE^_yGZH_#@RKJT2`IqL%EY*qrc9dJ$rq2 zwD;=m$Grl6F1}cpD=lf$;nN+I*?p(6G3S#zpPPhm=c@@)X&lRT>dz8g8(xsWP`CCb z=jL*S;)m&nZ2jtDpB24ZkbBY1!2Gb>9?r~f&(eDzZTrH~ocqn`u>7Ro^FD9B5&UNV znTT`xjohm~_)2U3OPKm#$tJ_;jO>1!9tUljH~De2Z<vHnetj|CB zuYF5ltMb~l!AAJMClf-4|n?e~L0h8_|h-~@r+tQr7@`-r!L(>n=Ecdb$ez+>D zo@RKvXYsK+98RB%D$hK~%s%tL&(39D|eZo$)vKLi&YydX6LnL+08K0d?9;8+rr8|S#s&3m*3Y; z&U2__b+V94TWP}Awo>ZbvKw0L6()zgDtu?JPTEviTi{#SvsgswQ%C7E-mtp4&E>tP z_&@zBo3Q#}K*P(64cZIYxUc6rY?$2|k|DL9Vfw^n>IKHyJdZUJJ{=OYi<`m7_vvSr z$VIVpX%2jsQaKOSiTpDZ`SEVUEzT>gdCMz*T{QGQFR9uhvw6ql;9&Vj&1MU)OZKP= z_xY_nuNK07FlKMTEA{CYOyt4}0^Ss7DXed3;WG^u`YuqA|M0fl=gd>71wJb}ci*qN z!TloMU~*6QJ03oZHD%xWqu;*!^ZvQ4#fK=r($2iG}mx$^0j*wGDV*KDzx9{%f-lx6ADTH%*&rTWhD#!Ghj zue~k*?A@~I$s3~AOYeQ>_~g>2e<~8(2iN#^&ONrzIX&Xm&!2JIH{X9V$Fz`NYpTD4 zAlp3s#>ekimvV5g6OFE$x$^D2$9cPZ(?4?;rRZhciF@qx^z!v+@1hjF|7FQfqOJQQ z@93}kv?1-8YTK1337s(uzCF?T|Ic@FbIQVVk}^s$NBF15*Ez&UYot?kiBm|N7J)o8~bls9XL1J=U>e8H{m;#xz$># z+oUfF$n-L$H^&=W7w(*<+HaI)tKAw_VmbKhynR@7?bCPY(FRH2X zwtjIqQNCwcwa5FMGKIL_N_WAf%fxd2WX?}`vB3B;%f(5N)eai%H4gVLS??DX_{_a> zi|>RL3yk<~q?AkSvs!Q}^7!J7QeMm!m+v=de|DF-yi?-qxw(ydmOcL9@}#0^nd7R% zEM;%+6u*)D zv#F&Q+QK;ZUcWK*<7AD!1!}AYD;)MlX`M)DyUg>|KqEWm+!T|FzgKoQ^OZE-vp4;? z701qYGe#iL>?U?v}JU*9tp;TEvLX*j& ziC;p_jbCkh`l|bW%Cm2U91L4+!f~Z|zMHgpLwfn#=`$=Iz0_lN&r$H-tf#iWNPq6K z&9{97rd)7N+1Pfhrh2vKp~wjpacbND2R>JLyxiLVL(TKwcR#M2`<}b4pL5sy^cVYl zF8&SIf4})j{m+$wv(M@pbg@3;Ep<(()pDL+8S9<9W@Fe*^G306Vs+bkUKXjVUrLKj zHPaO--(47R-r99KbDW8q>wAW3!3mZdtT*&s6Yg<(^{#SNjrJs~wB*dX)}6hr!akcE zUH50d+G(}r3cua%%eQ{bP=B;Uj?HPK!mh3APIX1C=4|yd>}_9sw_@L^939oTlly_r z>XWg8lMXoioVuZCrjbiYTzY-L=L>(nu0OUx%QY|Re!qfvzlOl+TDeWupExi4_;}ga zVVO678DnG~%fVBedtR`AHca^8$olq$TmLKz*MuEbiV^~6r>jWtKPvz8%)9P6|AyHU zN)}nqdb@mfxBNBp`iqZmt-N9KR&(d>bj5n6O{H%dFOcdw zO*?Q)qjgPK=k|S5(wu$T9TzH|JN$g3s=^M(C5{W;Y>oUPw`Ibe!-v9+1akcM%?;Wh zFzctSEFUm2pz@%0w&%Ye$M&?nonxA0 zDtq$5gqcfaG#qwq5dXJXy>!;5OQI{HUc5{@Hc@AOH!pW;f5qM0qpA5E<-Dn^bNcjR z4qjFY{P;TX!41>sGu*F~dRkj=&YR-tX=}PEAb`c|&yklNvwwbBdNXCF*1MJKr*)}w zsRS?|346D6y8pT!=c2?f>-1&gFdHFG!!vI=jS}EucU|dCOHs zr)?9Aw>CF@<7oYxaw+bZ4_p5okyp~@^_h(3g`e(uKK-(FwqE7iXIiznlb>i!?z}wR z%yiwVy+;lteO)?rE<5kl(ibmT4u0_5KOuC<0m-856u$GjVz=tN3y8il>D|uM`&QR3 zY?qt5>cpS-Kh_>zRV}->RHIZscm4UOG6~(f*DLn@SgZW)OmvTi+seKC$7d%AaOhaI z&;B*t_}{$;EbGh_)|&pfT3BxM=S-1;_#?jD-Tl3WS(ko9=;iF%p=SOoA;xQNb#LeU zlB~5nhlCTq1?iuhGIO(z)tT9!cOBF}8U57n+??)P&1){#ZL~k|PK|$Y;e2=V!W9{2 zm-?q1+$gIDIE z!c9twb!i`x0{IU})zz?mEm(WhG1~h^^we`ZExDc;uun)j@Kx3QV8x^+#|&esO=8Oa z4{n@$l>7aa-{bA8|32oZJ;cjg9aoJpF4x>Et+!MaP9n%%ur%P{~n3Pz| z6>(!m_q@ZgbB&C<_iWkxv#5^yHhXrP-rIu{mifNfZ#$ufo5%C;T%KFcL+eBrg)(=Y zi90P@`taH8_6dE0pDwhmcK+GyK0$YNyR`m<laihQ4_ zdSZ*Q?Dn#)y)*i&Bb3j)vzk@%^axvV{27(v_{HUuCx8DUrFXo->%_rLsu2-Y-VMHg zjZXxr^VpS^|2yt{GX3m?Q?iDf^6%I$SWDR0)zTi?u8{_;3%Yh+}V_1au?O=n^fmv`mXnDv6;8_S+Kelh)3 zq%HQv^zh7y8Babqt__>%@h;}w8^yJs=AO1budWdHk>&n+o`Ur&z8K7VuAL~aJ^7Ny z4KquR9(Yd&GrYkM*C`1Y6|mhWYCCGuB?^1Qqr=rtiialiOJ17iDgFa;~NEASU(sxZIieo z^mY9!jg;xHO`{ZV*F>&d`6MHyK>BEX@YeMz0c$20d;PCsk$kvPCXlB;YroIK_LRtF z@Amqf=$QN9XQ|OK?Vk?w>I--6cH7NvB4Ze?_0iYiuG`lC(UUVegZ9e_&Z%%dmeDIW zDY(&&KP{f~x@mUI^JfpA?TWGbW8pjR-Phe4CLAo=>7*y(Vb$@;OK|eNh}3$X_{g~e z|F>VewS+m+JzG1^C}^tew!WKF*DrGPb!Tf4(Fk*F^3vEnX}Z_Mthid{O&-@%8Lvmx zo%OAEPmTHVE+nj`bwbDd#&#wBuP+((F3jFpbpMx?b%j~r#BFMSR_A@t$|-pC$}3i6 z&b<$<(w_rg_gri?+x>IlQ@(fEg1K5pd1BQsW~e_tsuR9q_37*rI@@+x?cdh1UweJn zb+bZ|sP|X9&K;W~lD9ABMpCN`o28j(nC_V;zO%SGBDLi{2}v#4I(KjN;$JMOSy_+P zElS*9Jt=QV%0-)P!8?!qkNPx2Tq((T%_XN-jVpIgJzV|cN3FBn_GQZq!e9D@xE(k$ z*}XpG!ZRO((}MY{mS{Vj`lEk#>e8*xqxCIHZ#P9J1VXoQJcG8HiyOhTIN;X!yXe#H|J+*9j))$)>JC?yYQa%r`07P2Iu8e4^EoL zF=LJk_on@;=AGuzVv>Ab!Z7{pn&2G~Ix|jQ*?q&NZqa-HcfK1sJ6Ep!_2W&bmQYX2 zrdB6A^)rkC2ah+c`zpxV>weKQR9=qTb=i`+tJm`Te7jQi?oEu`gX>pg|8u7A+1g|M zeu`I5r(W8kSMwelyIk#97vrq1xPbjxeoEOz0N3&a=OutQ1k* zylLu$(hA|sS%L=(LMQKWVQe^XWNKbt&f9w>6+2w6T)OzWKsTdCwy$;8ijr4#=xIge&_h-LFe$ zD&OGvv_5ss%d(#G?~9i4YuOpyIW~8U#gSY+a9opU%NqslW8ww zMe?2{3f~Ib`+8K_F3H+w+x$4jmnJi3zJZ5fNtS!Y5ldmYhWUGpL)YK4TwIbRU9Ejr_e@SQ zKCHCvQS~~-)eTZvNf~Bt_WM+>t?W9h$d~wHhhBiqKJRzV!oZ$kdUx1j;f>cfc|A@m zYPj|G@^1My_2=(ZR@$>}+Ss`#%O|8zP$KG-&7Z@aI<pM8^T!IKc-9x_1IXN)*=oEn);rIVPzS@_gj{r0UZC;!oSzXLd|TlezKq zpy|Gss`UzYJL|08n%;l-Lp*Pv;L*N=b*f&^KgBJyIJD-(xrd@BU%#KNKWp~-d3pN| zC`Q*EznELOWy8ilMc!UFCNGVjCKi{gIG>~MQQm`n*R_K~#JG(gzc8}jWH>ojl>O|6 z`-j)X1g~gVGRf3r`u-s|o8n?DT-NID2$LVp@hvjQk*||?WZoAbUfBsDE|A!CFjW-8} zPm*AFU3xOx%gUlmOHh8t+AmK{Hypkd7JOC0mQ{Fy-CIun`ekvBKkq$M3=f^y;5cxL-mYybB-_ayfl@7R32D~s!Gh?!$N zxAy55Z9AHtuIb;lEzbRZAy-*$W@F64HP4rPeIW5re8q~UyoU8JZ?61Xm(0G+vtH?? z+$r@FKffi!+ilyfUhq}Y_j38>88?c5S9m=8bm{kw+}~D$Q;%$Z8>_ZsMM9_L*R5r% z%ta+%mcMs8@mb%x{pZa;j~^QHoVcuZR)yvKt(PGe!%}ol`mt{_{&0!Wxuk6N&6BRP zw@*JdQAIE38{4BD3^R_&`Ckvb-fhaSv_fRNU*Kd}&uR1jS-g}jslFh#VR}}qi*0Av zLvi1C45Ekir)jXdJj!Kt<;Yud!Rj{m>u&Ga-qE{LzMlO2@L_v+^!a6KtL2yNbDZzU z(|u02?zLxJeS!D9?d66#syRD8t_|>78^n5A&LDf+Jl*2lSu+fxsynR9mmJ;9v-j@@ z4d#6(J=xOI=7&UNII_OH@L$JVdWQBXba)g`C1{!3uRO9Fz9X>JZVor6Tlhsp|RjsaNG}t0 zo*9~t7w7A%imNS1ESsU8ck$ptrF5?;zb3a#bbKbTeHY_wvw0ss?%u(#>VT zC3EhdE}T~E)+D+tQ*^_3aoNRw-Rq>R(zhJ@!s#54yEmuX(O$LZ%fsy8wtvPeSTY$; z>=XKbd5h84k6d2M5*^M3gzy|u`+w`w`5duVzotL?Q*7ZfZ9$^A`NKyimR|Ln#N_K5 z=Xdd|Uw)eVuBOZ1qOa#ZP}0g_I;@k|tjYi5-05=aO>+MyGzFYh`H)pShl4kEOr|=H~#jH8C+tyTmmplE; zNBLiGXvyrwoVFUKQ7z3^Xr9@N#>k$Et=w5 zH?+_8eAv48z{lU)cf4o)Cm5GJ;Y8ntd0YG^Z9gvH#95TI&>*jDrTq3|LNz>o$6nU% z&e7hHvfWg5u4!6xb!q={pCVP`gO}z1T;8%~|JiHn|4eP=te;k-^5xdkH$DYYGLO@g zTE0$?-f(aA=DPJPCD!{t)*KWOn$w{2dE@T9^ftM!iiB5NE1DAvua^JYekRA*G=$Z( z?6qEejt}qcS-fTD((|<$K3~`qv}AeXTl4St?{NDE{yO+u`LhVuGOLU)ze4vN^z(Q) z<7f2VMa}#{ekw-$lT=Qo8a3Qjw|lze_Uzv(`9VzYXMALBs1dsJ^vS&`dzvkkwPSt@ zz4mNc`s8byTcntJ*l~HW-jHc5^X$F52vNlry!=fH|SDybS;OiZV4nR(^$dPQv&S+M2AJKcka z%s#mvo_bA}T}St`;e>~BWjFMobox^PHobcs!?A zg;X32HcWO|SP;Cl^RdCRR!*OtN;4gPd+Zia?9Pu|8{)Ws*ULvan)<8ul=1p0TmIrd z@zyOz{zGV#X*=&!eb+O^+CB5&$`b^3$-&jkB9tEejl>(%m4KEcc(qJnpC#2+V-drUzW^`US>~E7S=3> z1&&E9Om{3gE;am#<}G2)5Oi>^Rp1m1XsLb9(SBI`_P*QVbqvS<<;y(e_?^{0KP4_< zf75<_q)oPF8c8657)-0zM+D@ zXPH-(RqtKR<1g{V(Lkv*ME!B%-b8b~iE*>-6TZEkuRL*ux0U>g={Kdi`4>sucdO={ z>yUIN{dtY`mTea6J*xA3(<0ySrFCEA5%*(AT;Z^5)(s5Sv$fGfPR> zU?8_oL-hO26v4jP8$*?o7ksc-qs}XH;Zl=B`<4~wbYx7#<$v)mUwvrVuC@2?25!9_ z{Mki!(q6v^H-pCM+59ET`hF~Z;MZUxCKY~=<+5{8m<>;_nN-2dUy}|uvejkmM6 z&F{Qs-TH;AYMP7L^i8Sam*!w#z+zR3N)CG364t8kkq4{Y=V z7HpW)(W~ysZN2mLLx!G~S^H!=rj`hB-S+;TKjFY3gAWo}DRZX!XqaF9cF9`f{&QQ$ zj%4;*%F`d&u9>{a=0ez1vGa~n3ununc`M7>%;avn>dFIui-qzx;y;{{*>uitj_l!o zO??Z>EEXsHIVik;4(HW3DWd02s_zZXT4kiVMNDn=ziG~I2Fo*x?{bK}ntwREW>kxoF6D1(MWitTgOm2EkWjD-zm@YA{LQ{CSJTUCHlhrC3pSz zmFp}{+*`0-_P}J-JJ|uVrCuoROuL%?q2SZoCx$grzbtLFUWervc+S@v^t(>}+hYn?4IvFXQI_{-Zm`+vPjOFbl?_()??wcyIk9B%iz zg}#jw4la@YRP?b|MLvY>LFMHHi|?7tJj?tKCh#~j>z?fRoj57lX~vB->B~3sr8i{U zI{e0(XEjfR#EL@)^_72{pX*FObb|#@h41DKh62&e9xH?sePQ|LRk9mP`L;++?cVTAGKeot@x0Fhf!Q2Kn|c!8I7T~fJZ;Bv z^!Q$J{g;Lj^O}v9{oI=-6SY-C&&N{y_NI!ux-A9f;uEUPN?LOtd=NKgV7~v}V0uUK zuW{V_@9&n#?&>{tIc43&8uR1d1ARGT@|~L}eKx;eYdU|) ze(}6{HCqM##2tBmH07VQmAKZ8R`tWb7-N>Sx-ur0GAxz}tUhpZmz8pt_q?Ke8k3Y~ zv^^}iwAEwp`m3z`Z`C_${yo@oW_jxWfC`;85l7hXX-cj6aQT+;=e70w{xVJE{y$@N zNATW_tlexe33}&VoKqBHP&i$^=p8fjjDzMPS>LZbF<^9xZs(kn*0@%=rq%DYOp|*d ze_}w$uXKqIFV;lve-U5R%jD~-Hz%U6@HJvuketZ}M`l%{-lx>us;<26a&K7O#fxBAb&e=pSbJ~R9ybgJP| z(bl7}4l@%UT{#fQ#vv^}!$-*ff1^bj`%wKF@XEpQ1x1*nXD+~nF69o_2 z&77;h#Q&D5=IaxwtEc{~@=KQ&FW#u_8pW+Gy!H-H#I@fanKcY1YM);_p?S`t&?U+{ zf^z0x?<{!|D|@Ig?)z{3i3$5&)jZ6Q`}3$Rdyl!9h`_A(`LUI5Uwn?Ju$d`4OBG9-1B}*)t)&;{M%-7$7CorocpOS zdeBn2@XuR4uYQr0I%0CHzs`TG3afg4I{ehtgO85ORC-prw@ANl+cK70;s| zTn!r{oj1?f*vzDwFSOubCN{Q=Ggydgq-#U2QIH zmNL^P#2X2;fAVsu4*1x1z5KJ#ku^(L^Mj0Y4toFif6G2{F$5=9Yd9$dpOY*v)u`%QnAk)}v|N-L~A5xU`pE{Uox@ z>+;kTW_IuN^zf6_Q>Lsb_I&+>sq(?3EgEIZCrt5hy}nQ5E7ydyAJHkhoZn6kj*;2f z;KfnPFlE^r-wV<&crHhNVa-rHv9_+{DbUEb~6rqZT(mlH+BjUi;^87uO}*S=~e0oGT~nd_Uvazw)_{ zd$Jx&oCwJgZ4rK)q8Tx%Nm!|J&aJN76-(anO{*NCkdMj(D+zrm0{q)%;2SFvUN+xxrn-hR1OWX93t zFL8pllhf0eW;^MWaH+_1)sU2-dv(wK^zpo7ReK zmggmr`~AHx-9EZ0byB@kU*qP*e|&zjiiAcwbbP#Xy{l&38#nfdcME^^QBoN4I#Nsk&g z{{PTb^z_QHg?-Iw_sq_Q?P>Au6gg=Y`9&0C4@FeG|DM{xq&&+Nt z|DeCs-1xfg9phI@sTaRSmDZ-#7xx!#-B$i6en(38@2k~Uw>tK^o_O>rYFV(;yq;4= z1(QFf=Zh%awX~LQ%Mtr@Dq@*YrK?@thb8m(^WV~YvMT+RXr83e)FSD2p3ru!rYoCR z9U9$UT;q@Jl0Lgxt@6$JelMZkHe;jSj7L9ToNE8*%_db@^vGhCz1qakvWtJ+IOooO zA0h2~`1>cXupdp2rfA%JRI_Z-ozrPs8CdU4V^%Xao#t_8HmAm`whqQb>sI}1zj^#$ zcxhChOnCn^?1bQXwG%HIr_XzkqjaVveqH>_yBT-*+&dgNY+nkCENKe&tk68`aLVia zw53Ig!BHnW)*2Nbo5_*9Zu?&+t1pI|mmBh~IN++YAX#eSr?5X;82Dxsy)%wEk)XGj z@1g0uMs0ypi{|7!e8lPPZ1C>5=-F`Ty3H1+1U*wa^{tk9`inkQa4X=Rs3c-D<>SO( zi|4)Ou{wT|A%26X^xF?F)Y5M+o;I&KA}5B&_lXymBsXW=fz?`D7uPN4X0=*&@?z%h z>t20P@1v?Z@4oW5D7DJ8;L-c_Y|J{L8+XrHVbR?3*7}cax>4hX6btDMf7}k*DWu#p zwQkSN2~~_XnEPhchI>9?@A@MT_8ngSwcws)*t?p0N+AZ5Tda&(=V|k4$;`5QzvgI0 z(}6Ia9>qP+6Uy~39zSngV<@-7w2t*el*h@1$E(WxVknksa$OLmZz8ex_-9#y?23uu59L(sz1}_pUi((&S{so^!nH9XD`kE zs9C2SyZP4Z>q|4YvhB82kEu~u!{!nfUAUp8A-bkA$Fu#uUWJ%8Hy^``{XSqtQJrhl6-ndRBkD)DPP zro5W-92QP`Q@U=_FHhNJEyfA=e%i4vbW&8|xi)bn=cI>H(}T{}$IqD<|9$<>#|O6r z{63UXYpBqdHLJmMlS*LJ2Vt9SHwz6a>;GOobxthF*jKK3%IX&x(rP)@&Dmcjvc7I9 z61~>$j`B#dA6^d z^nI<|?L&DI)67H_x9s6PkQMOw+HRh6&%bIn?sa;?Jsv|E=!u_JUGM$yGjZ zVp?PQe4deX@$KdU!>9t8SH~aNGC03i=KB0+bzPtE6t7LUkMKA%Mg-qiYd>qO@?_af zj>Bh_XZWj#-=62`vE}6Q_YVV3=xs>8B*qh*g(noZ7%#BTI#MeUopacjlWLwjPy4O;-(Sq)bolS)&(7kPpBk(Gj+)K%T4eIO z$&xD1{vF)Je_FwWweyZstNT%@X-$p1{aSqg6DKFy#_GNcJaqh$=8edU57!*K)3W?T zoJ9U=jTt`#Ygy}q!&hBDYkuFZ?oEi<40gZY?Tc1CeDW)I@AtfSMpx9H@twcbUi|#S z>ddldWvjHa^;b>(d~AnqUD^4crGL+}s!Qx!cl`4q+4r8?xvIY{R}wURw^ljFCV;V6 zNP2y+S8`&5tL5TK$2n%d+$}E2tdV%dbhXv8s)*(0gTl}8Z&HV>5}s2t9|d>{hJL79HX(K9+sv=9#?mynjpXKHfh&cm>ZSy_F@B z&6ZqMF9gpY+5Ojf&Xh8J!3Q(Mv~FKHa-8#=rPejA46dt>FCGdE3O5&v>M8Fji8^ms z{A?lT@#d4QUtgU&_pL9d@ZGkr4NT8#9w}@+Uny5}~p^Az4b;}|6XeSeekb$*U{4s z66g4h_P^V(*L&(uYqQV&Gi)MF|M_W5o4kjsUY)_vyMEWNd6{3#DifFSyn3gl_fA85 zL)>#ebLqEIb3Nb01bI9pk8Xq}AEDuiRw%qnpZ4)qTC ztuM>)I2-k<>#u0N$i<~C9b&j7%cJh3@usC*62Dp9&i>jsM|#5^i5aiO!+QigH`hJw z{?T$pe)i)4mT!5s_ut+sxoG!b+MJ3~&mH+^rp`*OXY78sXZ`ajqVJ6xn)!V;CWby? zv$%P+HYVhMQ}=F*o4Z)2S^O8CG;i87=6k2lY*>6HF=L@je*srjEn9x%E#Albelc7Z z>{_>GUD(dFyRR4aI$k_$+B)O5p)LdGQ#SMF>6bk6)+siL@f}?7f63uBD%Y0Zcz;Tz zIms%eU+Kp}nZDG*Z!@}&*D0U-P)r+ZHwP8Wss&nfj>c+UrB_ ze!R6j&02i0aMFQE9f$u= zoe%t$owr1Ad+e5+%+6$ixo$ih4zV)NZ!^XJ(zwzX*dDWZA9Er@t{v;%_i`??MH{na zUTN|yv5nGS)Tn-@MkUwIIPPowoeM2bdYIF>_fCDS$gn__GufeWqWG#+M>X!r6<#?K zAP_5JcXeZJ+X=1WRz^2f1M~Qu(=#93wBVjn%$a_tg0Xo^}Ikt2UX+t(a}vwIiVyNUE_YZN?tqF~;!C+N?<<|{{~4o=96 zvwB{#W5ES3O=GEzGj$hx>OSp~`M^^8cGmzQ^Jfhwc^+*)by2}=VTnA zBYPXKsnC42^=8-Rg;vV@+n@SBv%T)cC5C-{dvt#abtDUS9P$Wc$bOgn^%3I?$3=F9 z=aX+1IdAN}vHj=KL$Q%NDm2Y?bXEjzO<8@Zam(~Zp~o6qgwlO)W?RnMZ(X6lJ;h9b zb+(dgj&{-&!&cXnxiekXFsuD**sZ=a*-QSuVC3QHu{8!u`O8)nd_Vo3M^|)K_EaWk zttHc~eb2TkHS(4SRO@Hlz20^BeWYl4^Oda+4~x!v>ex4lDTA5aq3RvCRlIZXggJ3j z!fQ-iR!ve=|2jAJ`LSr$f=NG}L?!ooZ;@U#L4C*W=lVAoCja^78&d1fpT4Q{OzH~u zYpySXCGIM;zEpfuGVj1nn@9Xp&U@*-O|RN~_Wm~S_$AY?7378-4L7KrqG0pjQ|7G_ z2cAjF8n>n`3Yx_2IFZ41+l3QH=X?%a6KWR2z_h4l<&MhdE6%))HuBik($inWm!PqB z!|iYT0#3ZyYAE|wD(zoKo!?%Ex-Ho%98vcx!lLirSQFAYNUf{{M6Pn1#rTz50g z|IaG*XB6D{r|VxMzvtq*M;qrQc3oSw_tb!^9Lv1aYTe6Ki#z$Jo9UGHDg zpCYHCGjs3d$zqrD-@pE_PIhg9$(5+vYi;?m?ksdTv5TpmYoSqxM&zgK+hb-+7Cu%f zQV5LP#BkFm!rFY9`*HP%`Blra@=Mp=c(c;+uWi<~KS~obk9z&QE~xMNm#gl_`hVV8 zUkW@AvXvGcD9#Rl)|``dgSTP&bFYBP@Wt+N?bC!SB;BRg8k{<}Ye}E+(Y@QY?ccm; zWxuI>tllw;KU0ei=xU`KaA{p>{_DZFK_S~ju)*;K&;7|E|66W3c`tO?-H=vOu;I#H z7pWIZ&3Eim^ga{vBV&(E>EFbvS5@y9#Qm#X`e*ykPm7D*mcIOYWA?|FFF$5))bMQ= zRZwWUxMeZdtU148*ELuc`&N=j<_jsmTnMP9SzLSBlhUtFv-^@!<%p6Jf}uuZ<&hC zH#hz@*|I3oI+ly?QH!=nK4aybH?oRr-~DF0SoA|KS;ueT?yI}sa;F?!n0IRXC#&=y zpI;w0oTHrmUWGOL!21e?_DK1bH=7%~wglBS=G@aazos-f(MFv?Bh@@X(_Hy~ht`$4 znAEm!cc(6&ebsbX)_TS5W<_cSszoMMZ7+81I&{h=rq5@sQ&9PprCTn%E6{3ZK4w=a zb@=JAR~1S>vUa>}|81A&I`#OPXW}PvT-|Mj^Nl!5=NL>_SnA|(b$7V9yQy)WfzV$| zr}JhzUrj#a+_mKJn>DtlCI+>t#Xg<7MZzY_IZtEik5g?&x9P52>h3&=Lr3E8*~^h^ zcHttYN|()PF+S<@D#x_@gcw8nA7?2+Kik$H6i1~_VZ$iM$N1uPZtZzZd@{X^86af zf|M;UmuyHbyLET|_OR^P9Xva>{@UyxY%Sekwt{71fpfN6QG@Tkx#}_gS7!wLh>MqI z(LbW0+gDKD`TNhm$o1L)LMb zt7)f_y8mRd`Z!%vaa6n)$!_#$Ryg~w>64B+Nf%yy(fZNx@fzU`e@sqn%1FPr{QMf( z#$&T&u&z#?xUao8=XdDA@GHnsUT ze{Az!!n0K_T{(tjjv9-e3cCrnbD*_w#M~oaCff1(`rT;X8R2y~rqAT$^&Gx}~>9@P+6ci=NklQKB6WR|;uv);BDjypiWj)T=x8H67PPt|ZRg&T!TG z?$3w2cdEYokvaL@N7dcU0TnwcUcQ^Xr~d!E*&n=i7aNt=h0PCcdwWjzoc_7MS}v1ZP`u+8Wjq0S<-=FvJ zu6>iRjZ^z^Wpd~0nfyz8L_}E^>V_P@I#2A3LalE4{g`uel4tvJZ0g&->)5K=B@@KX z#`#%F>$;~;lCQn=RPpdCksC9b!jx0r?AY`8(TWYWQzo4|@tD z5j5X#8dv5vr|L*xO?&jglY(WQdmQ=gpMH8MdhXY31M|5LnwZ{OD==U6+}yl+$DW9F zd_11g(_i)#{^j3Za(l)3Se5o~zx9tjbosHRe$x|m#%pfn6M2dko+-F~*RtmD-~XRK zhvl#PnEUu*;pUwM|7ZU?Tvhw=#gB^*KW_gnE+=!Y{_oqx?d`|iyTATy=NI3%mcc;z zb+Ym1Uom+X^@Q&oKGl3Gsq*2&#h*IcLp;k8s#9eu<@)W`*to=AiOa8*kX^f8-lXBu z-~9LXf1bU#_;B&!qpe4)9&gzB;q1pp=G^ynYGUneY^?t6ij?oTWsY;;NhzxpGa9+?+-NqQ^SGRoElhN4bVA){ zsV8!rY9hPaue>pkj=Ed4H(YJ`mlLXUF2|?I)dfdB>EV2`Zl#8u$khYoJR(b8Tb+$J zUE*D~Zk^_q(&jQI`OW*j+G_Nkqdg*wFzm&E*i!NKELXvrbO_A#7g z_KMDxzqdJsNV)E9DA!8SdADVDuEDPSsE9+^-GX{ybM=)&4cj@q1G;+?l~1gdF~7b$ zUr=qq<*f3o=N!u#IzD!6kTNw{@q|@mYfYwdnLc;8v;ETv+@}@wykymjuH+Oy%}R7M zpZ+R6>468g_yR45&l!ALmPN~1^0ozQS1#fbcFb{~YjlnGcT0h}ZN*jb{-C|L9ZL2t zJUm%U@>c7X89s(tvD4H43U~Z^s$ON`r{-&YzTQ1`z4rI@4?o__o;Q8c<~m!=o$~GxyIVu^B^i0~GX ziR)f9WoC<-g`4$EGR&+|EIjaBHD9Y)sQ>e{4~HZkl^#&;Pt@3T!`8(Am3#ONdk6o9 zBkh~+w630~onvt9$0|Q&VViHgQk$ye=U$C|zRBxxp6dC|oeA6zRGhLB`fuo&RUOZL zE37=X>CE$@{(W0Q7JWOh;m&98%ZCr z&Y``16HNAPZM>kjewO%qh2QtgV$EG;BAG8Wby!qsU$7TexpKPYVz4BSO?p5UOB(C< z`48ERBbBT!X`ajd>DIhuL;B+c#+Y!G0GQnlkfy*S)u@S!-AH+}1y`}}x1skOnMQ_`nn(6i6 z=a&C``~Rhi3(8emsa)RQAvUGUPxRumAOpYfuI?8)-3g*1OJ-3OX{K< z0*lv$YdUdQv+WGs-_v!~H^ov}ZA|L*=)ICeJ6Rhs2Ddd%hbXktgHv#D8OO8-M1j2OHxQ!=&7=oRMo)T@jJ=uvzYwRgiq%tB$}x zcY||J4~YlNek^{hy*WQltm)(p_03f~oR#&&9E(!KPDekpdy~s*Y<#`Zh>`L62PK9O z+v*Y{{xcPUmfPp6zCE*Cx$6C_z~!wkrY1kVGDUW8*^`Eu3qI^T@nn|O{-@8|_Z>Bn z37T$klI`g>qvMavtd~p?JE54I^JvO(5%21Suf5h*R^DRyYP3VDvddcDc!P4$$DsNO zp~Sob)yg;Pa|;)H2yULPv@2`p_B;>0-|Zdi0<(_>UElk5YvHS$MVeWbS`LEoKg6Cn z-}dh}PBAT7Q*tk8ZA00{1Igv}U)(|`Pvn_#YSq={cix;@H&)q5u9o%H zspX5fSI^~LnLat1M^o_^-@0gp;#bX&HNqYGelB_z+xaj}Mu%hJXBWkm6V@794iErZEbrC3j7a7 zT`WEvx$9=9Ys>1S>n2bBCEtpye*M0{B_Q_dha%6yzZ+cA0!^;ugz+XVIu!KNu(z8x zY006W%7klspH3QiZ^aNe=C>2A}X0}GRKloho0wU z?F;=b6>{GHU|{xrS=bGawbm~RKYlK6UC_@p|5#2c$F&_gOHNq!9lX{2Q?~rty~6tH zl1`JHL|b-WTT$-#hYSIkabLF07e2-o7TQk&&d@kd$1U$y-`ag6F26Lpw~T+{fu-lSP3O~m=G}N{(d4J1YUUE>QuUn< z?LD)@^Z1GvydUJv%f5%3WlLvYUAwpUYp<4n;$_9_Mmx?kEnl>^$^3j+oS4m3=1ZwM z$unwX-``eDcQA>avpZPfW`XG}gA0eO+9x=folf0r8s7 zd2$}dMHMHvAMP?~PUYg`aQ^X(SE_UO?cUw9GZ`f$7kw8x_(jft8RL;TqV5j*Wo5qX zqIU$pu9Zl&ocwX#Bg0qihOdq?=(O(sDcO5LY1@{@-xohjj0sEn;C4`hrO~@hz)j*CPo$J}8?jIAYw$_f`Ej^=l+PmvJ8qyCM zitTKAa8@(mWz^(Xapi?Yk!>&1*la%vbp4vJR`<(Z-tFPHt?fg~vu58upY^DBg7*Ec zpGRV?#PW~seJj5zdI#&?{adHk{8b3wDi>b6Z|`4c-}Ud`JyP>sSJ9^YecSbI+2<9n zWYw>JmvjBww(ntPt@7=k3YUq!dw(!}&#tm+S98XB`R^U$a`V=UTs_&b-SMNF+_PWP z7AEOv+_C+1>)Ele((s^yAJHl(f8Aoj@Rg;(LZrXO= zdf&bK(evkN#rxMwuQxJOoxL%J`*zgoyu3X(8cuk6t^Zvx;m@qTZsxED7Y~GJu_(^l zW+=v*e8~IsZ0Xe=>m!_JE#E8ntmnk_fQ*^l$JL!V zs=lvZmtc3j%=}-Nuh_GXC$FB|aOBiAu45^=tSQY${429_x|VM)EN))4Y6|}=uUG4K z?nUHP{p^=o^&^##srS@n18cAf6>-(G(4vCOH( zp=;LW?2G!jv*W7K*NrFs1l+zKTN&1BbN|oIw8-wf=NA_&x*8a(Q8`6^;h7a|q2c9b z-^{``@(bH)RhFz4`VjJN^Ix93uS0X+Tbg^^o}Hc0BQw`1cUP4Wclf-#{}H^a?5n;9b{U;8>8-p==&w{~Vb zZ{M20YqGoaR^gX(T{E74?4GCjX|56frsC(4CE-82|3q_Is4^aRRLe<}j*a~sx##gq zn}&EbJFX|vp{q9cOupG=@krcoW`O(0W7BGPPMEdNP}X+kBSWM^{k1D_AK8m z5id5i=T-gBx8{7w7IS|5ERuSk|6!)w=8MjH+Q0Y;|F|(8cT|pG*JyAS__UMvoPnB; z;O4?|<$7z@&6o33qVBEyeC?(E`ty-f?00`(`Q%6bvhSLwcHZ;u*z|^J-p%NJcj~!9 z*KPZ_Y1{UXi+1hZKmCq=fP~Q_v$bCqb%j>@ZfoUD;cN3g82L%=l)wpb?(Uv@6P#|` zI=1Zfw_2B|hd;l)i!*wb$Gf*WpmF(U*Y!;Qx9!EKs#yzvOL^Sb`^vwXb=BbsUcYw-{QkVUyzKznu5ID9 zA18_1PTqL3d%w@T=blqmy1xiq8l7EWb4ZFcH>Khn>#`O9LSpYuKOypDufy&g^Ocj* z)=DxweCk(P>U_n0-qarT+ZPrse3V`Dc4^9*iF4GRdxpB!Bec^Rqe(9H5 z?X{~P=5Bbtbc=53OQ(6}(dizOAFpTnl%L$(dmzU8L0*=d_Jx+NXR(fFpWE+ud3C6F ztvuJV%(M#z2}w%|jxkSdS@p%>w&9kmsl2;FEdR{qo9P*3ne}zW#fQ>&l)s$Tyc_c2 z!J@kvR>v!Aiz-|1=!t*ad|_{#_rcZcnq78tOe=2dKK6k#<@C2#b6*`6%{VvLO2mEM z6xEZj`gi}Du9>C1_nYP1)&sd5s*S>v{ho%i{GXs+QGM^3rs*e^!&}<-%z7uwAKZ4% z$z5i)vwm2Hv){1^Ue&LzFMYit#`!c)GqiKUwO!r6*-o zq~*#x-d^|5O<(qMOKiGc$g>4WuL5R>UNQBTnSAV_)x8FL^VJKE9sYSzNM@aRLY2k- zH?eoQ4W`K~$~eQuvTobk?#*_l? z&G4lDjLL1-vakOVUwi+T@3)E<9tB~SHzkybuCsf5k}YT3`zYQNeqUdWSE2gh9!}*| z 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_d2/6bdcd6010cfe82bc7bab07e4363b40be834cc8 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_d2/6bdcd6010cfe82bc7bab07e4363b40be834cc8 new file mode 100644 index 0000000000000000000000000000000000000000..0f58a5d90276242725685057aa5a990dd42116b4 GIT binary patch literal 626 zcmb46y(cXbLq#N+JEqqecyTmj`4}90Wug+$qS&t**_o)YAV6$_$Rq{~T-4UlpW0O68j$MRv{37_lY~MG^TdK3$(gPPb&jg)=~pnw>Amg~`XFQ& z!*wY-wuk$ZG{>p~&Yl9PqCFL^k9K}|?d+xzk(P6n^}*6L8Y@3P)IAw-i}f-4hxxt_ zD)m-QHuFBPe*fb0)0gpJL~xLrId?WKQjyVxR`hU&}swySo3yHTR<8F2Oa&YoqOlh=0(S3NzjdiO@=ckyY( z)!%B9=7_nfFxB>*Uj9#V16RPL63b-`ce1^1nXUE;IJ!V(&H5LjDNh$$8}fNtv-#Vz p22Po8dF~kNPcf!QZlNHduFo|;tPVB1=lj3|)E$;vT literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_dd/6fd959282cd35f82928433239ceb63d7e81783 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_dd/6fd959282cd35f82928433239ceb63d7e81783 new file mode 100644 index 0000000000000000000000000000000000000000..cc29ef000b4823a91d37d9fe87fe857298411961 GIT binary patch literal 22702 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_e1/a14cf84952955be57101aeff33086101780380 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_e1/a14cf84952955be57101aeff33086101780380 new file mode 100644 index 0000000000000000000000000000000000000000..5355f42a7236660dd6019a51dd33ea56a2eab356 GIT binary patch literal 439 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e+2fNefY(d z&6jWAt3~rdmfgQN|3*&pwcHyFrmDL3>seBceT!eG*|%=pr@a^(tF6^bOk|emtMec5K-n zS9aMYdNO-X&$w#x^Mw2gU)G;bSGroROkHW&#&)xcwels8|JNtkr_4gPtcdyeDTH%= z+D)tE^WJN^R(BbfcpC*32TQ7LJYSm8AACFcL7A0S&9lSadDiw*lQTA+x#s-B;MLB= zjZt&lP49hLy7}IjlfV1JkHodV)HrosSEJLtFrua~%QKUaS#y`p=8qXn3~RT)4gmnW CTHDP4 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_e3/f9d63033350f72c1401ad0c1dd016a8293c4fc b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_e3/f9d63033350f72c1401ad0c1dd016a8293c4fc new file mode 100644 index 0000000000000000000000000000000000000000..97f00c0eb369ef66e77f38cc99e418cafaaa9d2a GIT binary patch literal 240 zcmb!UNy?xJI`CV%lteKGUTvFz6kf|p7tg}q!zLi#Ye=R@g z)Sut^H|t~C#mSz2-sV=HKL3+DanOw0*{)06#%{$vpI*QGUDWJ ZU$tT0{S?FMxjXi4I;r}bQBv{2O#p$C5~TnD literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_ea/dc0d76537a0b8bce81fcfa2e1c694b04619fe8 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_ea/dc0d76537a0b8bce81fcfa2e1c694b04619fe8 new file mode 100644 index 0000000000000000000000000000000000000000..4146c707d2bd57f6faeab032edb86131209b1095 GIT binary patch literal 253 zcmb&nlfmvb9${Fr(pPSM4^wdIAz@oyHLW}V8%xs&$KbKyA1zToA# zJC?g1UpC=oT@q-nD%{A?dqwx-v||4=3X!^7KHr)s?z2r-*v<24($<7!mDW=NH{1{q z+T`GyqLz^xCEfe|%nN}<+uY3lsOQTZI}j)^v-X0v^jt2rh}BcwmM7nsu!Kv0slR00 zT0n1vCEnLI#z0&>oQ*qleVZO%~m%n7(_Q=QMq88`&9^{qNxKPB6E z+TynypYXcb-xxHV;!kaw_iC54SAAji6Ypg{dBbx!M(9uE O{o3wT`g?8be*geF9D4Zx literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_f0/af09438285876ce807a6f82ffb994daaf23af0 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_f0/af09438285876ce807a6f82ffb994daaf23af0 new file mode 100644 index 0000000000000000000000000000000000000000..b25f59c04878fa194d779aa70055d9694b38147b GIT binary patch literal 216 zcmbBY-+=4mT0=gdh>ovOsvFEgiXVob`Vgf*;h)s2tpl;!Ni>OT^fdTK@FMBd<*ldC4&3_x;svq z=k58t>x=fO(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e+2fNeW>sK zX_o8lbGAC0_g8hMpPe!K?c4+^p-?8c68>`teSC@1wiFJQ1@oa75 z48||Dh8O-XJ<2nG-)Sqm`sv}H?rARadw*|HZ|TXdwF0IyD^*vzR(4wQc&(rLC1SFe z-1`cVMe9_jM}09_r_7cW>{wTs73h~0nbo(@aa){YoYmoA+n=*G`HJdlh3~NmJ+wS> z+qoN`g;qaW^@!*0q@F8xLfSmv6wBUveC31Ta*cWMr+<${H(pP)>iSg7?e!>7Ml60#R8Z6bhc3O-IX1HxqTjvx3IN`O B-IV|U literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_f8/d8553f41e08c5d9197124050865e971e4f39b0 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_f8/d8553f41e08c5d9197124050865e971e4f39b0 new file mode 100644 index 0000000000000000000000000000000000000000..5a4ec4af312cc01b27a7aa39840817907f300197 GIT binary patch literal 439 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e+2fNeW>sK zX_o8lbGAC0_g8hMpPe!K?zDS+>6~DCT(|_UJ^PJ=3kLS#;c&;ve zglEC~?#6%mx@kYY#9sUObN8M}-~9wjtGp;N%LP{kXyd(_<^@2AwSNvPrp-Er*-^7(#*B(7ZR@& zA5Pk8(Vw;FsdxI`nUlZEukYB)cR6s%{OACo{zn^rJi0RJ5))fcNo3mNi!2Onhu)?E E0IKZeDgXcg literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_fa/d13744eeb296cf191442f0b7498f55d03fae8b b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_fa/d13744eeb296cf191442f0b7498f55d03fae8b new file mode 100644 index 0000000000000000000000000000000000000000..f872b30619dd4014c686ac85efbc3c7d85b60b93 GIT binary patch literal 438 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e96&NC}8E{U)C-t7f-`~G?{ z8voO{p}SM)Nv_i5KMYyHj&+q;fqq$$S$zu~x5YWeSsf0x{W)usuc)q8_#T_kL(3z# zoxAZ_X!WC2k9h7*>bY_!q|Nh9vFxqKSH4N?nA^uS|L2EEx6k=Mm59>W{8hlJrz$UE zjo9UXKE0#Ny{f1w|cj=+Zl#V>64P%<(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+e+2fNUASz` zo8AkHimkpyZ}Sb%_A3Z_`)(Gesj9C1dX^NouUb#@-RCXQ`e(6iS=!5{zsKj<8vS51 zWPb5GX~BQ*Zb`e^>7_OQ^wvMw8|*Uo-d%sV+%Azygr6ZU}FT%S${cNYbn4l3s1-Sm~~(ydEi>{-n*aKO-12S554YJxX0C0&ka(r| zaMD(b{;WMuz0>#3ocvvWeaBwD%YjqoM+XS?Kicr)(UnP;nAn0!BGVpUWMN3rd~+QD Du?63{ literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_fe/4798903e8c0950cb62e0fef36c0bfd72576fa8 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_fe/4798903e8c0950cb62e0fef36c0bfd72576fa8 new file mode 100644 index 0000000000000000000000000000000000000000..c8c610a30ac80ae5e86e3487d890d087ee38dba8 GIT binary patch literal 438 zcmb(mkYHe9U|?(*c)|O;j;D^M<|!X7T~FP#f;%OZN8{%=|Eydq&R>%e ze@g48#Y6c?r_OxY^Jh^A+wnQ^*{?3o+@%ucqIqi7zx@9b3+{2OI(7W=&8zx1rY_v{ z_U-A<#?Ow=x%%+eK=!#)$-*1skd3SK4MY7`flCKfZ$7?K6^Q&eTbC&suNrM<;F61`88*dVH`rzFy}ho|uP2E{D`pve_6q9$BvdT%Uxjvl^?k);C9aPN2yXh;}r%RIaUY)!?C3jUu;Lb-+R|?sk z-BfyP-t-93aMAP^(^8f^TV~{wH2?Jlx#ioAA9!05^5abV^gCsBTE{OW&0O1lA@NG_ z;iRn={aJgSdZ+K5Ir+Q%`i{MPmjkEFj}8#(f3)GpqbrjxF|h@eM5aBy$ifi*|3xnV D(Jkb# literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_info/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_info/.keep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-75abc332cab8413298038f45f436be572e28caab.idx b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-75abc332cab8413298038f45f436be572e28caab.idx new file mode 100644 index 0000000000000000000000000000000000000000..8a7850a4e711fa809320a90df9f411086333a4d8 GIT binary patch literal 3592 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 NX12Vb0~dC*0sx=+(;)x= literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-75abc332cab8413298038f45f436be572e28caab.pack.REMOVED.git-id b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-75abc332cab8413298038f45f436be572e28caab.pack.REMOVED.git-id new file mode 100644 index 00000000..2c7c416b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-75abc332cab8413298038f45f436be572e28caab.pack.REMOVED.git-id @@ -0,0 +1 @@ +c162282c4cb529dcca123828d8f258f31df95c9e \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-88b85f2adcd2ffe3ee49e53836eaaab9a97c4c7c.idx b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-88b85f2adcd2ffe3ee49e53836eaaab9a97c4c7c.idx new file mode 100644 index 0000000000000000000000000000000000000000..91aa4402e66da5c5245efb054a1ce2328715ce4a GIT binary patch literal 15044 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 Nseh)d>(0{}*!uk`=` literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-88b85f2adcd2ffe3ee49e53836eaaab9a97c4c7c.pack.REMOVED.git-id b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-88b85f2adcd2ffe3ee49e53836eaaab9a97c4c7c.pack.REMOVED.git-id new file mode 100644 index 00000000..7e8b91b0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_objects/exact_pack/pack-88b85f2adcd2ffe3ee49e53836eaaab9a97c4c7c.pack.REMOVED.git-id @@ -0,0 +1 @@ +f24e9fc19b8347001e03ad6896ddefa30eaa2449 \ No newline at end of file diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_heads/master new file mode 100644 index 00000000..4631ba08 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_heads/master @@ -0,0 +1 @@ +b816abfed0e8785d8bc2e47987cc40f6bcd4bc29 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD new file mode 100644 index 00000000..6efe28ff --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_remotes/exact_origin/HEAD @@ -0,0 +1 @@ +ref: refs/remotes/origin/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_remotes/exact_origin/master b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_remotes/exact_origin/master new file mode 100644 index 00000000..4631ba08 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_remotes/exact_origin/master @@ -0,0 +1 @@ +b816abfed0e8785d8bc2e47987cc40f6bcd4bc29 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.0 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.0 new file mode 100644 index 00000000..aef45ba4 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.0 @@ -0,0 +1 @@ +69f479f49c37f3da42c705a298b312ef2d71d607 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.1 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.1 new file mode 100644 index 00000000..0c630b8a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.1 @@ -0,0 +1 @@ +fa93a241e144dfad0792493ef26731f7637f9781 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.2 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.2 new file mode 100644 index 00000000..9f5e5069 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.2 @@ -0,0 +1 @@ +2358810fcbc43a6ad2f7d3e38d83ca93b0d37c1c diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.3 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.3 new file mode 100644 index 00000000..a1915db3 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.3 @@ -0,0 +1 @@ +5b5a4232612d52e64f906676a0352733c8c6ffd0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.4 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.4 new file mode 100644 index 00000000..bd503ea8 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.4 @@ -0,0 +1 @@ +727325b9a7349768f76650cbee36e0883fa9ce44 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.5 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.5 new file mode 100644 index 00000000..c7624236 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.5 @@ -0,0 +1 @@ +16e9b67d88f5cfa95465c11a6fc059f59b0e65d0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.6 b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.6 new file mode 100644 index 00000000..75a92f39 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/exact_refs/exact_tags/v1.14.6 @@ -0,0 +1 @@ +9a87929fd021f5138b8a4829bc65b86490b1c9fd diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/index b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/index new file mode 100644 index 0000000000000000000000000000000000000000..595041a3a519c378db31be0fbf8808a489f2ae96 GIT binary patch literal 7915 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 literal 0 HcmV?d00001 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/packed-refs b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/packed-refs new file mode 100644 index 00000000..db96959c --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/packed-refs @@ -0,0 +1,2 @@ +# pack-refs with: peeled fully-peeled sorted +9b981b89c53826a9b5514978b951cda11cfa8d4b refs/remotes/origin/master diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/shallow b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/shallow new file mode 100644 index 00000000..677851ae --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_dot_git/shallow @@ -0,0 +1 @@ +9b981b89c53826a9b5514978b951cda11cfa8d4b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/LICENSE b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/Makefile b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/Makefile new file mode 100644 index 00000000..0141dd90 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/Makefile @@ -0,0 +1,41 @@ +APPNAME ?= gitstatusd +OBJDIR ?= obj + +CXX ?= g++ +ZSH := $(shell command -v zsh 2> /dev/null) + +VERSION ?= $(shell . ./build.info && printf "%s" "$$gitstatus_version") + +# Note: -fsized-deallocation is not used to avoid binary compatibility issues on macOS. +# +# Sized delete is implemented as __ZdlPvm in /usr/lib/libc++.1.dylib but this symbol is +# missing in macOS prior to 10.13. +CXXFLAGS += -std=c++14 -funsigned-char -O3 -DNDEBUG -DGITSTATUS_VERSION=$(VERSION) -Wall -Werror # -g -fsanitize=thread +LDFLAGS += -pthread # -fsanitize=thread +LDLIBS += -lgit2 # -lprofiler -lunwind + +SRCS := $(shell find src -name "*.cc") +OBJS := $(patsubst src/%.cc, $(OBJDIR)/%.o, $(SRCS)) + +all: $(APPNAME) + +$(APPNAME): usrbin/$(APPNAME) + +usrbin/$(APPNAME): $(OBJS) + $(CXX) $(OBJS) $(LDFLAGS) $(LDLIBS) -o $@ + +$(OBJDIR): + mkdir -p -- $(OBJDIR) + +$(OBJDIR)/%.o: src/%.cc Makefile build.info | $(OBJDIR) + $(CXX) $(CXXFLAGS) -MM -MT $@ src/$*.cc >$(OBJDIR)/$*.dep + $(CXX) $(CXXFLAGS) -Wall -c -o $@ src/$*.cc + +clean: + rm -rf -- $(OBJDIR) + +pkg: + GITSTATUS_DAEMON= GITSTATUS_CACHE_DIR=$(shell pwd)/usrbin ./install -f + $(or $(ZSH),:) -fc 'for f in *.zsh install; do zcompile -R -- $$f.zwc $$f || exit; done' + +-include $(OBJS:.o=.dep) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/README.md b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/README.md new file mode 100644 index 00000000..cbf29c3a --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/README.md @@ -0,0 +1,529 @@ +# gitstatus + +**gitstatus** is a 10x faster alternative to `git status` and `git describe`. Its primary use +case is to enable fast git prompt in interactive shells. + +Heavy lifting is done by **gitstatusd** -- a custom binary written in C++. It comes with Zsh and +Bash bindings for integration with shell. + +## Table of Contents + +1. [Using from Zsh](#using-from-zsh) +1. [Using from Bash](#using-from-bash) +2. [Using from other shells](#using-from-other-shells) +1. [How it works](#how-it-works) +1. [Benchmarks](#benchmarks) +1. [Why fast](#why-fast) +1. [Requirements](#requirements) +1. [Compiling](#compiling) +1. [License](#license) + +## Using from Zsh + +The easiest way to take advantage of gitstatus from Zsh is to use a theme that's already integrated +with it. For example, [Powerlevel10k](https://github.com/romkatv/powerlevel10k) is a flexible and +fast theme with first-class gitstatus integration. + +![Powerlevel10k Zsh Theme]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/prompt-styles-high-contrast.png) + +For those who wish to use gitstatus without a theme, there is +[gitstatus.prompt.zsh](gitstatus.prompt.zsh). Install it as follows: + +```zsh +git clone --depth=1 https://github.com/romkatv/gitstatus.git ~/gitstatus +echo 'source ~/gitstatus/gitstatus.prompt.zsh' >>! ~/.zshrc +``` + +Users in mainland China can use the official mirror on gitee.com for faster download.
    +中国大陆用户可以使用 gitee.com 上的官方镜像加速下载. + +```zsh +git clone --depth=1 https://gitee.com/romkatv/gitstatus.git ~/gitstatus +echo 'source ~/gitstatus/gitstatus.prompt.zsh' >>! ~/.zshrc +``` + +Alternatively, on macOS you can install with Homebrew: + +```zsh +brew install romkatv/gitstatus/gitstatus +echo 'source /usr/local/opt/gitstatus/gitstatus.prompt.zsh' >>! ~/.zshrc +``` + +(If you choose this option, replace `~/gitstatus` with `/usr/local/opt/gitstatus` in all code +snippets below.) + +_Make sure to disable your current theme if you have one._ + +This will give you a basic yet functional prompt with git status in it. It's +[over 10x faster](#benchmarks) than any alternative that can give you comparable prompt. In order +to customize it, set `PROMPT` and/or `RPROMPT` at the end of `~/.zshrc` after sourcing +`gitstatus.prompt.zsh`. Insert `${GITSTATUS_PROMPT}` where you want git status to go. For example: + +```zsh +source ~/gitstatus/gitstatus.prompt.zsh + +PROMPT='%~%# ' # left prompt: directory followed by %/# (normal/root) +RPROMPT='$GITSTATUS_PROMPT' # right prompt: git status +``` + +The expansion of `${GITSTATUS_PROMPT}` can contain the following bits: + +| segment | meaning | +|-------------|-------------------------------------------------------| +| `master` | current branch | +| `#v1` | HEAD is tagged with `v1`; not shown when on a branch | +| `@5fc6fca4` | current commit; not shown when on a branch or tag | +| `⇣1` | local branch is behind the remote by 1 commit | +| `⇡2` | local branch is ahead of the remote by 2 commits | +| `⇠3` | local branch is behind the push remote by 3 commits | +| `⇢4` | local branch is ahead of the push remote by 4 commits | +| `*5` | there are 5 stashes | +| `merge` | merge is in progress (could be some other action) | +| `~6` | there are 6 merge conflicts | +| `+7` | there are 7 staged changes | +| `!8` | there are 8 unstaged changes | +| `?9` | there are 9 untracked files | + +`$GITSTATUS_PROMPT_LEN` tells you how long `$GITSTATUS_PROMPT` is when printed to the console. +[gitstatus.prompt.zsh](gitstatus.prompt.zsh) has an example of using it to truncate the current +directory. + +If you'd like to change the format of git status, or want to have greater control over the +process of assembling `PROMPT`, you can copy and modify parts of +[gitstatus.prompt.zsh](gitstatus.prompt.zsh) instead of sourcing the script. Your `~/.zshrc` +might look something like this: + +```zsh +source ~/gitstatus/gitstatus.plugin.zsh + +function my_set_prompt() { + PROMPT='%~%# ' + RPROMPT='' + + if gitstatus_query MY && [[ $VCS_STATUS_RESULT == ok-sync ]]; then + RPROMPT=${${VCS_STATUS_LOCAL_BRANCH:-@${VCS_STATUS_COMMIT}}//\%/%%} # escape % + (( VCS_STATUS_NUM_STAGED )) && RPROMPT+='+' + (( VCS_STATUS_NUM_UNSTAGED )) && RPROMPT+='!' + (( VCS_STATUS_NUM_UNTRACKED )) && RPROMPT+='?' + fi + + setopt no_prompt_{bang,subst} prompt_percent # enable/disable correct prompt expansions +} + +gitstatus_stop 'MY' && gitstatus_start -s -1 -u -1 -c -1 -d -1 'MY' +autoload -Uz add-zsh-hook +add-zsh-hook precmd my_set_prompt +``` + +This snippet is sourcing `gitstatus.plugin.zsh` rather than `gitstatus.prompt.zsh`. The former +defines low-level bindings that communicate with gitstatusd over pipes. The latter is a simple +script that uses these bindings to assemble git prompt. + +Unlike [Powerlevel10k](https://github.com/romkatv/powerlevel10k), code based on +[gitstatus.prompt.zsh](gitstatus.prompt.zsh) is communicating with gitstatusd synchronously. This +can make your prompt slow when working in a large git repository or on a slow machine. To avoid +this problem, call `gitstatus_query` asynchronously as documented in +[gitstatus.plugin.zsh](gitstatus.plugin.zsh). This can be quite challenging. + +## Using from Bash + +The easiest way to take advantage of gitstatus from Bash is via +[gitstatus.prompt.sh](gitstatus.prompt.sh). Install it as follows: + +```bash +git clone --depth=1 https://github.com/romkatv/gitstatus.git ~/gitstatus +echo 'source ~/gitstatus/gitstatus.prompt.sh' >> ~/.bashrc +``` + +Users in mainland China can use the official mirror on gitee.com for faster download.
    +中国大陆用户可以使用 gitee.com 上的官方镜像加速下载. + +```bash +git clone --depth=1 https://gitee.com/romkatv/gitstatus.git ~/gitstatus +echo 'source ~/gitstatus/gitstatus.prompt.sh' >> ~/.bashrc +``` + +Alternatively, on macOS you can install with Homebrew: + +```zsh +brew install romkatv/gitstatus/gitstatus +echo 'source /usr/local/opt/gitstatus/gitstatus.prompt.sh' >> ~/.bashrc +``` + +(If you choose this option, replace `~/gitstatus` with `/usr/local/opt/gitstatus` in all code +snippets below.) + +This will give you a basic yet functional prompt with git status in it. It's +[over 10x faster](#benchmarks) than any alternative that can give you comparable prompt. + +![Bash Prompt with GitStatus]( + https://raw.githubusercontent.com/romkatv/gitstatus/1ac366952366d89980b3f3484f270b4fa5ae4293/bash-prompt.png) + +In order to customize your prompt, set `PS1` at the end of `~/.bashrc` after sourcing +`gitstatus.prompt.sh`. Insert `${GITSTATUS_PROMPT}` where you want git status to go. For example: + +```bash +source ~/gitstatus/gitstatus.prompt.sh + +PS1='\w ${GITSTATUS_PROMPT}\n\$ ' # directory followed by git status and $/# (normal/root) +``` + +The expansion of `${GITSTATUS_PROMPT}` can contain the following bits: + +| segment | meaning | +|-------------|-------------------------------------------------------| +| `master` | current branch | +| `#v1` | HEAD is tagged with `v1`; not shown when on a branch | +| `@5fc6fca4` | current commit; not shown when on a branch or tag | +| `⇣1` | local branch is behind the remote by 1 commit | +| `⇡2` | local branch is ahead of the remote by 2 commits | +| `⇠3` | local branch is behind the push remote by 3 commits | +| `⇢4` | local branch is ahead of the push remote by 4 commits | +| `*5` | there are 5 stashes | +| `merge` | merge is in progress (could be some other action) | +| `~6` | there are 6 merge conflicts | +| `+7` | there are 7 staged changes | +| `!8` | there are 8 unstaged changes | +| `?9` | there are 9 untracked files | + +If you'd like to change the format of git status, or want to have greater control over the +process of assembling `PS1`, you can copy and modify parts of +[gitstatus.prompt.sh](gitstatus.prompt.sh) instead of sourcing the script. Your `~/.bashrc` might +look something like this: + +```bash +source ~/gitstatus/gitstatus.plugin.sh + +function my_set_prompt() { + PS1='\w' + + if gitstatus_query && [[ "$VCS_STATUS_RESULT" == ok-sync ]]; then + if [[ -n "$VCS_STATUS_LOCAL_BRANCH" ]]; then + PS1+=" ${VCS_STATUS_LOCAL_BRANCH//\\/\\\\}" # escape backslash + else + PS1+=" @${VCS_STATUS_COMMIT//\\/\\\\}" # escape backslash + fi + (( VCS_STATUS_HAS_STAGED" )) && PS1+='+' + (( VCS_STATUS_HAS_UNSTAGED" )) && PS1+='!' + (( VCS_STATUS_HAS_UNTRACKED" )) && PS1+='?' + fi + + PS1+='\n\$ ' + + shopt -u promptvars # disable expansion of '$(...)' and the like +} + +gitstatus_stop && gitstatus_start +PROMPT_COMMAND=my_set_prompt +``` + +This snippet is sourcing `gitstatus.plugin.sh` rather than `gitstatus.prompt.sh`. The former +defines low-level bindings that communicate with gitstatusd over pipes. The latter is a simple +script that uses these bindings to assemble git prompt. + +Note: Bash bindings, unlike Zsh bindings, don't support asynchronous calls. + +## Using from other shells + +If there are no gitstatusd bindings for your shell, you'll need to get your hands dirty. +Use the existing bindings for inspiration; run `gitstatusd --help` or read the same thing in +[options.cc](src/options.cc). + +## How it works + +gitstatusd reads requests from stdin and prints responses to stdout. Requests contain an ID and +a directory. Responses contain the same ID and machine-readable git status for the directory. +gitstatusd keeps some state in memory for the directories it has seen in order to serve future +requests faster. + +[Zsh bindings](gitstatus.plugin.zsh) and [Bash bindings](gitstatus.plugin.sh) start gitstatusd in +the background and communicate with it via pipes. Themes such as +[Powerlevel10k](https://github.com/romkatv/powerlevel10k) use these bindings to put git status in +`PROMPT`. + +Note that gitstatus cannot be used as a drop-in replacement for `git status` command as it doesn't +produce output in the same format. It does perform the same computation though. + +## Benchmarks + +The following benchmark results were obtained on Intel i9-7900X running Ubuntu 18.04 in +a clean [chromium](https://github.com/chromium/chromium) repository synced to `9394e49a`. The +repository was checked out to an ext4 filesystem on M.2 SSD. + +Three functionally equivalent tools for computing git status were benchmarked: + +* `gitstatusd` +* `git` with untracked cache enabled +* `lg2` -- a demo/example executable from [libgit2](https://github.com/romkatv/libgit2) that + implements a subset of `git` functionality on top of libgit2 API; for the purposes of this + benchmark the subset is sufficient to generate the same data as the other tools + +Every tool was benchmark in cold and hot conditions. For `git` the first run in a repository was +considered cold, with the following runs considered hot. `lg2` was patched to compute results twice +in a single invocation without freeing the repository in between; the second run was considered hot. +The same patching was not done for `git` because `git` cannot be easily modified to refresh inmemory +index state between invocations; in fact, this limitation is one of the primary reasons developers +use libgit2. `gitstatusd` was benchmarked similarly to `lg2` with two result computations in the +same invocation. + +Two commands were benchmarked: `status` and `describe`. + +### Status + +In this benchmark all tools were computing the equivalent of `git status`. Lower numbers are better. + +| Tool | Cold | Hot | +|---------------|-----------:|------------:| +| **gitstatus** | **291 ms** | **30.9 ms** | +| git | 876 ms | 295 ms | +| lg2 | 1730 ms | 1310 ms | + +gitstatusd is substantially faster than the alternatives, especially on hot runs. Note that hot runs +are of primary importance to the main use case of gitstatus in interactive shells. + +The performance of `git status` fluctuated wildly in this benchmarks for reasons unknown to the +author. Moreover, performance is sticky -- once `git status` settles around a number, it stays +there for a long time. Numbers as diverse as 295, 352, 663 and 730 had been observed on hot runs on +the same repository. The number in the table is the lowest (fastest or best) that `git status` had +shown. + +### Describe + +In this benchmark all tools were computing the equivalent of `git describe --tags --exact-match` +to find tags that resolve to the same commit as `HEAD`. Lower numbers are better. + +| Tool | Cold | Hot | +|---------------|------------:|--------------:| +| **gitstatus** | **4.04 ms** | **0.0345 ms** | +| git | 18.0 ms | 14.5 ms | +| lg2 | 185 ms | 45.2 ms | + +gitstatusd is once again faster than the alternatives, more so on hot runs. + +## Why fast + +Since gitstatusd doesn't have to print all staged/unstaged/untracked files but only report +whether there are any, it can terminate repository scan early. It can also remember which files +were dirty on the previous run and check them first on the next run to avoid the scan entirely if +the files are still dirty. However, the benchmarks above were performed in a clean repository where +these shortcuts do not trigger. All benchmarked tools had to do the same work -- check the status +of every file in the index to see if it has changed, check every directory for newly created files, +etc. And yet, gitstatusd came ahead by a large margin. This section describes what it does that +makes it so fast. + +Most of the following comparisons are done against libgit2 rather than git because of the author's +familiarity with the former but not the with latter. libgit2 has clean, well-documented APIs and an +elegant implementation, which makes it so much easier to work with and to analyze performance +bottlenecks. + +### Summary for the impatient + +Under the benchmark conditions described above, the equivalent of libgit2's +`git_diff_index_to_workdir` (the most expensive part of `status` command) is 46.3 times faster in +gitstatusd. The speedup comes from the following sources. + +* gitstatusd uses more efficient data structures and algorithms and employs performance-conscious +coding style throughout the codebase. This reduces CPU time in userspace by 32x compared to libgit2. +* gitstatusd uses less expensive system calls and makes fewer of them. This reduces CPU time spent +in kernel by 1.9x. +* gitstatusd can utilize multiple cores to scan index and workdir in parallel with almost perfect +scaling. This reduces total run time by 12.4x while having virtually no effect on total CPU time. + +### Problem statement + +The most resource-intensive part of the `status` command is finding the difference between _index_ +and _workdir_ (`git_diff_index_to_workdir` in libgit2). Index is a list of all files in the git +repository with their last modification times. This is an obvious simplification but it suffices for +this exposition. On disk, index is stored sorted by file path. Here's an example of git index: + +| File | Last modification time | +|-------------|-----------------------:| +| Makefile | 2019-04-01T14:12:32Z | +| src/hello.c | 2019-04-01T14:12:00Z | +| src/hello.h | 2019-04-01T14:12:32Z | + +This list needs to be compared to the list of files in the working directory. If any of the files +listed in the index are missing from the workdir or have different last modification time, they are +"unstaged" in gitstatusd parlance. If you run `git status`, they'll be shown as "changes not staged +for commit". Thus, any implementation of `status` command has to call `stat()` or one of its +variants on every file in the index. + +In addition, all files in the working directory for which there is no entry in the index at all are +"untracked". `git status` will show them as "untracked files". Finding untracked files requires some +form of work directory traversal. + +### Single-threaded scan + +Let's see how `git_diff_index_to_workdir` from libgit2 accomplishes these tasks. Here's its CPU +profile from 200 hot runs over chromium repository. + +![libgit2 CPU profile (hot)]( + https://raw.githubusercontent.com/romkatv/gitstatus/1ac366952366d89980b3f3484f270b4fa5ae4293/cpu-profile-libgit2.png) + +(The CPU profile was created with [gperftools](https://github.com/gperftools/gperftools) and +rendered with [pprof](https://github.com/google/pprof)). + +We can see `__GI__lxstat` taking a lot of time. This is the `stat()` call for every file in the +index. We can also identify `__opendir`, `__readdir` and `__GI___close_nocancel` -- glibc wrappers +for reading the contents of a directory. This is for finding untracked files. Out of the total 232 +seconds, 111 seconds -- or 47.7% -- was spent on these calls. The rest is computation -- comparing +strings, sorting arrays, etc. + +Now let's take a look at the CPU profile of gitstatusd on the same task. + +![gitstatusd CPU profile (hot)]( + https://raw.githubusercontent.com/romkatv/gitstatus/1ac366952366d89980b3f3484f270b4fa5ae4293/cpu-profile-gitstatusd-hot.png) + +The first impression is that this profile looks pruned. This isn't an artifact. The profile was +generated with the same tools and the same flags as the profile of libgit2. + +Since both profiles were generated from the same workload, absolute numbers can be compared. We can +see that gitstatusd took 62 seconds in total compared to libgit2's 232 seconds. System calls at the +core of the algorithm are cleary visible. `__GI___fxstatat` is a flavor of `stat()`, and the other +three calls -- `__libc_openat64`, `__libc_close` and `__GI___fxstat` are responsible for opening +directories and finding untracked files. Notice that there is almost nothing else in the profile +apart from these calls. The rest of the code accounts for 3.77 seconds of CPU time -- 32 times less +than in libgit2. + +So, one reason gitstatusd is fast is that it has efficient diffing code -- very little time is spent +outside of kernel. However, if we look closely, we can notice that system calls in gitstatusd are +_also_ faster than in libgit2. For example, libgit2 spent 72.07 seconds in `__GI__lxstat` while +gitstatusd spent only 48.82 seconds in `__GI___fxstatat`. There are two reasons for this difference. +First, libgit2 makes more `stat()` calls than is strictly required. It's not necessary to stat +directories because index only has files. There are 25k directories in chromium repository (and 300k +files) -- that's 25k `stat()` calls that could be avoided. The second reason is that libgit2 and +gitstatusd use different flavors of `stat()`. libgit2 uses `lstat()`, which takes a path to the file +as input. Its performance is linear in the number of subdirectories in the path because it needs to +perform a lookup for every one of them and to check permissions. gitstatusd uses `fstatat()`, which +takes a file descriptor to the parent directory and a name of the file. Just a single lookup, less +CPU time. + +Similarly to `lstat()` vs `fstatat()`, it's faster to open files and directories with `openat()` +from the parent directory file descriptor than with regular `open()` that accepts full file path. +gitstatusd takes advantage of `openat()` to open directories as fast as possible. It opens about 90% +of the directories (this depends on the actual directory structure of the repository) from the +immediate parent -- the most efficient way -- and the remaining 10% it opens from the repository's +root directory. The reason it's done this way is to keep the maximum number of simultaneously open +file descriptors bounded. libgit2 can have O(repository depth) simultaneously open file descriptors, +which may be OK for a single-threaded application but can balloon to a large number when scans are +done by many threads simultaneously, like in gitstatusd. + +There is no equivalent to `__opendir` or `__readdir` in the gitstatusd profile because it uses the +equivalent of [untracked cache](https://git-scm.com/docs/git-update-index#_untracked_cache) from +git. On the first scan of the workdir gitstatusd lists all files just like libgit2. But, unlike +libgit2, it remembers the last modification time of every directory along with the list of +untracked files under it. On the next scan, gitstatusd can skip listing files in directories whose +last modification time hasn't changed. + +To summarize, here's what gitstatusd was doing when the CPU profile was captured: + +1. `__libc_openat64`: Open every directory for which there are files in the index. +2. `__GI___fxstat`: Check last modification time of the directory. Since it's the same as on the + last scan, this directory has the same list of untracked files as before, which is empty (the + repository is clean). +3. `__GI___fxstatat`: Check last modification time for every file in the index that belongs to this + directory. +4. `__libc_close`: Close the file descriptor to the directory. + +Here's how the very first scan of a repository looks like in gitstatusd: + +![gitstatusd CPU profile (cold)]( + https://raw.githubusercontent.com/romkatv/gitstatus/1ac366952366d89980b3f3484f270b4fa5ae4293/cpu-profile-gitstatusd-cold.png) + +(Some glibc functions are mislabel on this profile. `explicit_bzero` and `__nss_passwd_lookup` are +in reality `strcmp` and `memcmp`.) + +This is a superset of the previous -- hot -- profile, with an extra `syscall` and string sorting for +directory listing. gitstatusd uses `getdents64` Linux system call directly, bypassing the glibc +wrapper that libgit2 uses. This is 23% faster. The details of this optimization can be found in a +[separate document](docs/listdir.md). + +### Multithreading + +The diffing algorithm in gitstatusd was designed from the ground up with the intention of using it +concurrently from multiple threads. With a fast SSD, `status` is CPU bound, so taking advantage of +all available CPU cores is an obvious way to yield results faster. + +gitstatusd exhibits almost perfect scaling from multithreading. Engaging all cores allows it to +produce results 12.4 times faster than in single-threaded execution. This is on Intel i9-7900X with +10 cores (20 with hyperthreading) with single-core frequency of 4.3GHz and all-core frequency of +4.0GHz. + +Note: `git status` also uses all available cores in some parts of its algorithm while `lg2` does +everything in a single thread. + +### Postprocessing + +Once the difference between the index and the workdir is found, we have a list of _candidates_ -- +files that may be unstaged or untracked. To make the final judgement, these files need to be checked +against `.gitignore` rules and a few other things. + +gitstatusd uses [patched libgit2](https://github.com/romkatv/libgit2) for this step. This fork +adds several optimizations that make libgit2 faster. The patched libgit2 performs more than twice +as fast in the benchmark as the original even without changes in the user code (that is, in the +code that uses the libgit2 APIs). The fork also adds several API extensions, most notable of which +is the support for multi-threaded scans. If `lg2 status` is modified to take advantage of these +extensions, it outperforms the original libgit2 by a factor of 18. Lastly, the fork fixes a score of +bugs, most of which become apparent only when using libgit2 from multiple threads. + +_WARNING: Changes to libgit2 are extensive but the testing they underwent isn't. It is +**not recommended** to use the patched libgit2 in production._ + +## Requirements + +* To compile: binutils, cmake, gcc, g++, git and GNU make. +* To run: Linux, macOS, FreeBSD, Android, WSL, Cygwin or MSYS2. + +## Compiling + +There are prebuilt `gitstatusd` binaries in [releases]( + https://github.com/romkatv/gitstatus/releases). When using the official shell bindings +provided by gitstatus, the right binary for your architecture gets downloaded automatically. + +If prebuilt binaries don't work for you, you'll need to get your hands dirty. + +### Compiling for personal use + +```zsh +git clone --depth=1 https://github.com/romkatv/gitstatus.git +cd gitstatus +./build -w -s -d docker +``` + +Users in mainland China can use the official mirror on gitee.com for faster download.
    +中国大陆用户可以使用 gitee.com 上的官方镜像加速下载. + +```zsh +git clone --depth=1 https://gitee.com/romkatv/gitstatus.git +cd gitstatus +./build -w -s -d docker +``` + +- If it says that `-d docker` is not supported on your OS, remove this flag. +- If it says that `-s` is not supported on your OS, remove this flag. +- If it tell you to install docker but you cannot or don't want to, remove `-d docker`. +- If it says that some command is missing, install it. + +If everything goes well, the newly built binary will appear in `./usrbin`. It'll be picked up +by shell bindings automatically. + +When you update shell bindings, they may refuse to work with the binary you've built earlier. In +this case you'll need to rebuild. + +If you are using gitstatus through [Powerlevel10k](https://github.com/romkatv/powerlevel10k), the +instructions are the same except that you don't need to clone gitstatus. Instead, change your +current directory to `/path/to/powerlevel10k/gitstatus` (`/path/to/powerlevel10k` is the directory +where you've installed Powerlevel10k) and run `./build -w -s -d docker` from there as described +above. + +### Compiling for distribution + +It's currently neither easy nor recommended to package and distribute gitstatus. There are no +instructions you can follow that would allow you to easily update your package when new versions of +gitstatus are released. This may change in the future but not soon. + +## License + +GNU General Public License v3.0. See [LICENSE](LICENSE). Contributions are covered by the same +license. diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/build.info b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/build.info new file mode 100644 index 00000000..aa52263b --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/build.info @@ -0,0 +1,22 @@ +# This value gets embedded in gitstatusd at build time. It is +# read by ./Makefile. `gitstatusd --version` reports it back. +# +# This value is also read by shell bindings (indirectly, through +# ./install) when using GITSTATUS_DAEMON or usrbin/gitstatusd. +gitstatus_version="v1.3.1" + +# libgit2 is a build time dependency of gitstatusd. The values of +# libgit2_version and libgit2_sha256 are read by ./build. +# +# If ./deps/libgit2-${libgit2_version}.tar.gz doesn't exist, build +# downloads it from the following location: +# +# https://github.com/romkatv/libgit2/archive/${libgit2_version}.tar.gz +# +# Once downloaded, the tarball is stored at the path indicated +# above so that repeated builds don't consume network bandwidth. +# +# If sha256 of ./deps/libgit2-${libgit2_version}.tar.gz doesn't match, +# build gets aborted. +libgit2_version="tag-82cefe2b42300224ad3c148f8b1a569757cc617a" +libgit2_sha256="dc701c4e2080f7901f5d599d642b629569e5581086b9838d481d09f284dc7621" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_clang-format b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_clang-format new file mode 100644 index 00000000..f5e3c53f --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_clang-format @@ -0,0 +1,4 @@ +BasedOnStyle: Google +ColumnLimit: 100 +DerivePointerAlignment: false +PointerAlignment: Left diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_gitattributes b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_gitattributes new file mode 100644 index 00000000..5c1135cb --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_gitattributes @@ -0,0 +1,16 @@ +* text=auto + +*.cc text eol=lf +*.h text eol=lf +*.info text eol=lf +*.json text eol=lf +*.md text eol=lf +*.sh text eol=lf +*.zsh text eol=lf + +/.clang-format text eol=lf +/LICENSE text eol=lf +/Makefile text eol=lf +/build text eol=lf +/install text eol=lf +/mbuild text eol=lf diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_gitignore b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_gitignore new file mode 100644 index 00000000..4915fe60 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/dot_gitignore @@ -0,0 +1,8 @@ +*.zwc +/core +/deps/libgit2-*.tar.gz +/locks +/logs +/obj +/usrbin/gitstatusd* +/.vscode/ipch diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_deps/empty_dot_gitkeep b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_deps/empty_dot_gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_docs/listdir.md b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_docs/listdir.md new file mode 100644 index 00000000..0939cc18 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_docs/listdir.md @@ -0,0 +1,330 @@ +# Fast directory listing + +In order to find untracked files in a git repository, [gitstatusd](../README.md) needs to list the +contents of every directory. gitstatusd does it 27% faster than a reasonable implementation that a +seasoned C/C++ practitioner might write. This document explains the optimizations that went into it. +As directory listing is a common operation, many other projects can benefit from applying these +optimizations. + +## v1 + +Given a path to a directory, `ListDir()` must produce the list of files in that directory. Moreover, +the list must be sorted lexicographically to enable fast comparison with Git index. + +The following C++ implementation gets the job done. For simplicity, it returns an empty list on +error. + +```c++ +vector ListDir(const char* dirname) { + vector entries; + if (DIR* dir = opendir(dirname)) { + while (struct dirent* ent = (errno = 0, readdir(dir))) { + if (!Dots(ent->d_name)) entries.push_back(ent->d_name); + } + if (errno) entries.clear(); + sort(entries.begin(), entries.end()); + closedir(dir); + } + return entries; +} +``` + +Every directory has entries `"."` and `".."`, which we aren't interested in. We filter them out with +a helper function `Dots()`. + +```c++ +bool Dots(const char* s) { return s[0] == '.' && (!s[1] || (s[1] == '.' && !s[2])); } +``` + +To check how fast `ListDir()` performs, we can run it many times on a typical directory. One million +runs on a directory with 32 files with 16-character names takes 12.7 seconds. + +## v2 + +Experienced C++ practitioners will scoff at our implementation of `ListDir()`. If it's meant to be +efficient, returning `vector` is an unaffordable convenience. To avoid heap allocations we +can use a simple arena that will allow us to reuse memory between different `ListDir()` calls. + +(Changed and added lines are marked with comments.) + +```c++ +void ListDir(const char* dirname, string& arena, vector& entries) { // + + entries.clear(); // + + if (DIR* dir = opendir(dirname)) { + arena.clear(); // + + while (struct dirent* ent = (errno = 0, readdir(dir))) { + if (!Dots(ent->d_name)) { + entries.push_back(reinterpret_cast(arena.size())); // + + arena.append(ent->d_name, strlen(ent->d_name) + 1); // + + } + } + if (errno) entries.clear(); + for (char*& p : entries) p = &arena[reinterpret_cast(p)]; // + + sort(entries.begin(), entries.end(), // + + [](const char* a, const char* b) { return strcmp(a, b) < 0; }); // + + closedir(dir); + } +} +``` + +To make performance comparison easier, we can normalize them relative to the baseline. v1 will get +performance score of 100. A twice-as-fast alternative will be 200. + +| version | optimization | score | +|---------|----------------------------|----------:| +| v1 | baseline | 100.0 | +| **v2** | **avoid heap allocations** | **112.7** | + +Avoiding heap allocations makes `ListDir()` 12.7% faster. Not bad. As an added bonus, those casts +will fend off the occasional frontend developer who accidentally wanders into the codebase. + +## v3 + +`opendir()` is an expensive call whose performance is linear in the number of subdirectories in the +path because it needs to perform a lookup for every one of them. We can replace it with `openat()`, +which takes a file descriptor to the parent directory and a name of the subdirectory. Just a single +lookup, less CPU time. This optimization assumes that callers already have a descriptor to the +parent directory, which is indeed the case for gitstatusd, and is often the case in other +applications that traverse filesystem. + +```c++ +void ListDir(int parent_fd, const char* dirname, string& arena, vector& entries) { // + + entries.clear(); + int dir_fd = openat(parent_fd, dirname, O_NOATIME | O_RDONLY | O_DIRECTORY | O_CLOEXEC); // + + if (dir_fd < 0) return; // + + if (DIR* dir = fdopendir(dir_fd)) { + arena.clear(); + while (struct dirent* ent = (errno = 0, readdir(dir))) { + if (!Dots(ent->d_name)) { + entries.push_back(reinterpret_cast(arena.size())); + arena.append(ent->d_name, strlen(ent->d_name) + 1); + } + } + if (errno) entries.clear(); + for (char*& p : entries) p = &arena[reinterpret_cast(p)]; + sort(entries.begin(), entries.end(), + [](const char* a, const char* b) { return strcmp(a, b) < 0; }); + closedir(dir); + } else { // + + close(dir_fd); // + + } // + +} +``` + +This is worth about 3.5% in speed. + +| version | optimization | score | +|---------|--------------------------------------|----------:| +| v1 | baseline | 100.0 | +| v2 | avoid heap allocations | 112.7 | +| **v3** | **open directories with `openat()`** | **116.2** | + +## v4 + +Copying file names to the arena isn't free but it doesn't seem like we can avoid it. Poking around +we can see that the POSIX API we are using is implemented on Linux on top of `getdents64` system +call. Its documentation isn't very encouraging: + +```text +These are not the interfaces you are interested in. Look at +readdir(3) for the POSIX-conforming C library interface. This page +documents the bare kernel system call interfaces. + +Note: There are no glibc wrappers for these system calls. +``` + +Hmm... The API looks like something we can take advantage of, so let's try it anyway. + +First, we'll need a simple `Arena` class that can allocate 8KB blocks of memory. + +```c++ +class Arena { + public: + enum { kBlockSize = 8 << 10 }; + + char* Alloc() { + if (cur_ == blocks_.size()) blocks_.emplace_back(kBlockSize, 0); + return blocks_[cur_++].data(); + } + + void Clear() { cur_ = 0; } + + private: + size_t cur_ = 0; + vector blocks_; +}; +``` + +Next, we need to define `struct dirent64_t` ourselves because there is no wrapper for the system +call we are about to use. + +```c++ +struct dirent64_t { + ino64_t d_ino; + off64_t d_off; + unsigned short d_reclen; + unsigned char d_type; + char d_name[]; +}; +``` + +Finally we can get to the implementation of `ListDir()`. + +```c++ +void ListDir(int parent_fd, Arena& arena, vector& entries) { // + + entries.clear(); + int dir_fd = openat(parent_fd, dirname, O_NOATIME | O_RDONLY | O_DIRECTORY | O_CLOEXEC); + if (dir_fd < 0) return; + arena.Clear(); // + + while (true) { // + + char* buf = arena.Alloc(); // + + int n = syscall(SYS_getdents64, dir_fd, buf, Arena::kBlockSize); // + + if (n <= 0) { // + + if (n) entries.clear(); // + + break; // + + } // + + for (int pos = 0; pos < n;) { // + + auto* ent = reinterpret_cast(buf + pos); // + + if (!Dots(ent->d_name)) entries.push_back(ent->d_name); // + + pos += ent->d_reclen; // + + } // + + } // + + sort(entries.begin(), entries.end(), + [](const char* a, const char* b) { return strcmp(a, b) < 0; }); + close(dir_fd); +} +``` + +How are we doing with this one? + +| version | optimization | score | +|---------|----------------------------------|----------:| +| v1 | baseline | 100.0 | +| v2 | avoid heap allocations | 112.7 | +| v3 | open directories with `openat()` | 116.2 | +| **v4** | **call `getdents64()` directly** | **137.8** | + +Solid 20% speedup. Worth the trouble. Unfortunately, we now have just one `reinterpret_cast` instead +of two, and it's not nearly as scary-looking. Hopefully with the next iteration we can get back some +of that evil vibe of low-level code. + +As a bonus, every element in `entries` has `d_type` at offset -1. This can be useful to the callers +that need to distinguish between regular files and directories (gitstatusd, in fact, needs this). +Note how `ListDir()` implements this feature at zero cost, as a lucky accident of `dirent64_t` +memory layout. + +## v5 + +The CPU profile of `ListDir()` reveals that almost all userspace CPU time is spent in `strcmp()`. +Digging into the source code of `std::sort()` we can see that it uses Insertion Sort for short +collections. Our 32-element vector falls under the threshold. Insertion Sort makes `O(N^2)` +comparisons, hence a lot of CPU time in `strcmp()`. Switching to `qsort()` or +[Timsort](https://en.wikipedia.org/wiki/Timsort) is of no use as all good sorting algorithms fall +back to Insertion Sort. + +If we cannot make fewer comparisons, perhaps we can make each of them faster? `strcmp()` compares +characters one at a time. It cannot read ahead as it can be illegal to touch memory past the first +null byte. But _we_ know that it's safe to read a few extra bytes past the end of `d_name` for every +entry except the last in the buffer. And since we own the buffer, we can overallocate it so that +reading past the end of the last entry is also safe. + +Combining these ideas with the fact that file names on Linux are at most 255 bytes long, we can +invoke `getdents64()` like this: + +```c++ +int n = syscall(SYS_getdents64, dir_fd, buf, Arena::kBlockSize - 256); +``` + +And then compare entries like this: + +```c++ +[](const char* a, const char* b) { return memcmp(a, b, 255) < 0; } +``` + +This version doesn't give any speedup compared to the previous but it opens an avenue for another +optimization. The pointers we pass to `memcmp()` aren't aligned. To be more specific, their +numerical values are `N * 8 + 3` for some `N`. When given such a pointer, `memcmp()` will check the +first 5 bytes one by one, and only then switch to comparing 8 bytes at a time. If we can handle the +first 5 bytes ourselves, we can pass aligned memory to `memcmp()` and take full advantage of its +vectorized loop. + +Here's the implementation: + +```c++ +uint64_t Read64(const void* p) { // + + uint64_t x; // + + memcpy(&x, p, sizeof(x)); // + + return x; // + +} // + + +void ByteSwap64(void* p) { // + + uint64_t x = __builtin_bswap64(Read64(p)); // + + memcpy(p, &x, sizeof(x)); // + +} // + + +void ListDir(int parent_fd, Arena& arena, vector& entries) { + entries.clear(); + int dir_fd = openat(parent_fd, dirname, O_NOATIME | O_RDONLY | O_DIRECTORY | O_CLOEXEC); + if (dir_fd < 0) return; + arena.Clear(); + while (true) { + char* buf = arena.Alloc(); + int n = syscall(SYS_getdents64, dir_fd, buf, Arena::kBlockSize - 256); // + + if (n <= 0) { + if (n) entries.clear(); + break; + } + for (int pos = 0; pos < n;) { + auto* ent = reinterpret_cast(buf + pos); + if (!Dots(ent->d_name)) { + ByteSwap64(ent->d_name); // + + entries.push_back(ent->d_name); + } + pos += ent->d_reclen; + } + } + sort(entries.begin(), entries.end(), [](const char* a, const char* b) { + uint64_t x = Read64(a); // + + uint64_t y = Read64(b); // + + return x < y || (x == y && a != b && memcmp(a + 5, b + 5, 256) < 0); // + + }); + for (char* p : entries) ByteSwap64(p); // + + close(dir_fd); +} +``` + +This is for Little Endian architecture. Big Endian doesn't need `ByteSwap64()`, so it'll be a bit +faster. + +| version | optimization | score | +|---------|----------------------------------|----------:| +| v1 | baseline | 100.0 | +| v2 | avoid heap allocations | 112.7 | +| v3 | open directories with `openat()` | 116.2 | +| v4 | call `getdents64()` directly | 137.8 | +| **v5** | **hand-optimize `strcmp()`** | **143.3** | + +Fast and respectably arcane. + +## Conclusion + +Through a series of incremental improvements we've sped up directory listing by 43.3% compared to a +naive implementation (v1) and 27.2% compared to a reasonable implementation that a seasoned C/C++ +practitioner might write (v2). + +However, these numbers are based on an artificial benchmark while the real judge is always the real +code. Our goal was to speed up gitstatusd. Benchmark was just a tool. Thankfully, the different +versions of `ListDir()` have the same comparative performance within gitstatusd as in the benchmark. +In truth, the directory chosen for the benchmark wasn't arbitrary. It was picked by sampling +gitstatusd when it runs on [chromium](https://github.com/chromium/chromium) git repository. + +The final version of `ListDir()` spends 97% of its CPU time in the kernel. If we assume that it +makes the minimum possible number of system calls and these calls are optimal (true to the best +of my knowledge), it puts the upper bound on possible future performance improvements at just 3%. +There is almost nothing left in `ListDir()` to optimize. + +![ListDir() CPU profile]( + https://raw.githubusercontent.com/romkatv/gitstatus/1ac366952366d89980b3f3484f270b4fa5ae4293/cpu-profile-listdir.png) + +(The CPU profile was created with [gperftools](https://github.com/gperftools/gperftools) and +rendered with [pprof](https://github.com/google/pprof)). diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_dot_vscode/c_cpp_properties.json b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_dot_vscode/c_cpp_properties.json new file mode 100644 index 00000000..323a6cde --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_dot_vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/src" + ], + "defines": [ + ], + "compilerPath": "/usr/bin/g++", + "cStandard": "c11", + "cppStandard": "c++17", + "intelliSenseMode": "gcc-x64" + } + ], + "version": 4 +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_dot_vscode/settings.json b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_dot_vscode/settings.json new file mode 100644 index 00000000..bec79f94 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_dot_vscode/settings.json @@ -0,0 +1,72 @@ +{ + "files.exclude": { + "*.zwc": true, + "core": true, + "locks/": true, + "logs/": true, + "obj/": true, + "usrbin/": true, + }, + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "complex": "cpp", + "condition_variable": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "exception": "cpp", + "fstream": "cpp", + "functional": "cpp", + "future": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "memory": "cpp", + "mutex": "cpp", + "new": "cpp", + "numeric": "cpp", + "optional": "cpp", + "ostream": "cpp", + "ratio": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "thread": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "typeinfo": "cpp", + "utility": "cpp", + "variant": "cpp", + "cstdarg": "cpp", + "charconv": "cpp", + "algorithm": "cpp", + "cinttypes": "cpp", + "iterator": "cpp", + "map": "cpp", + "memory_resource": "cpp", + "random": "cpp", + "string": "cpp", + "bit": "cpp", + "netfwd": "cpp" + } +} diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/algorithm.h b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/algorithm.h new file mode 100644 index 00000000..b87b13f0 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/algorithm.h @@ -0,0 +1,37 @@ +// Copyright 2019 Roman Perepelitsa. +// +// This file is part of GitStatus. +// +// GitStatus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// GitStatus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GitStatus. If not, see . + +#ifndef ROMKATV_GITSTATUS_ALGORITHM_H_ +#define ROMKATV_GITSTATUS_ALGORITHM_H_ + +#include + +namespace gitstatus { + +// Requires: Iter is a BidirectionalIterator. +// +// Returns iterator pointing to the last value in [begin, end) that compares equal to the value, or +// begin if none compare equal. +template +Iter FindLast(Iter begin, Iter end, const T& val) { + while (begin != end && !(*--end == val)) {} + return end; +} + +} // namespace gitstatus + +#endif // ROMKATV_GITSTATUS_ALGORITHM_H_ diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/arena.cc b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/arena.cc new file mode 100644 index 00000000..4c137639 --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/arena.cc @@ -0,0 +1,118 @@ +// Copyright 2019 Roman Perepelitsa. +// +// This file is part of GitStatus. +// +// GitStatus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// GitStatus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GitStatus. If not, see . + +#include "arena.h" + +#include +#include + +#include "bits.h" +#include "check.h" + +namespace gitstatus { + +namespace { + +size_t Clamp(size_t min, size_t val, size_t max) { return std::min(max, std::max(min, val)); } + +static const uintptr_t kSingularity = reinterpret_cast(&kSingularity); + +} // namespace + +// Triple singularity. We are all fucked. +Arena::Block Arena::g_empty_block = {kSingularity, kSingularity, kSingularity}; + +Arena::Arena(Arena::Options opt) : opt_(std::move(opt)), top_(&g_empty_block) { + CHECK(opt_.min_block_size <= opt_.max_block_size); +} + +Arena::Arena(Arena&& other) : Arena() { *this = std::move(other); } + +Arena::~Arena() { + // See comments in Makefile for the reason sized deallocation is not used. + for (const Block& b : blocks_) ::operator delete(reinterpret_cast(b.start)); +} + +Arena& Arena::operator=(Arena&& other) { + if (this != &other) { + // In case std::vector ever gets small object optimization. + size_t idx = other.reusable_ ? other.top_ - other.blocks_.data() : 0; + opt_ = other.opt_; + blocks_ = std::move(other.blocks_); + reusable_ = other.reusable_; + top_ = reusable_ ? blocks_.data() + idx : &g_empty_block; + other.blocks_.clear(); + other.reusable_ = 0; + other.top_ = &g_empty_block; + } + return *this; +} + +void Arena::Reuse(size_t num_blocks) { + reusable_ = std::min(reusable_, num_blocks); + for (size_t i = reusable_; i != blocks_.size(); ++i) { + const Block& b = blocks_[i]; + // See comments in Makefile for the reason sized deallocation is not used. + ::operator delete(reinterpret_cast(b.start)); + } + blocks_.resize(reusable_); + if (reusable_) { + top_ = blocks_.data(); + top_->tip = top_->start; + } else { + top_ = &g_empty_block; + } +} + +void Arena::AddBlock(size_t size, size_t alignment) { + if (alignment > alignof(std::max_align_t)) { + size += alignment - 1; + } else { + size = std::max(size, alignment); + } + if (size <= top_->size() && top_ < blocks_.data() + reusable_ - 1) { + assert(blocks_.front().size() == top_->size()); + ++top_; + top_->tip = top_->start; + return; + } + if (size <= opt_.max_alloc_threshold) { + size = + std::max(size, Clamp(opt_.min_block_size, NextPow2(top_->size() + 1), opt_.max_block_size)); + } + + auto p = reinterpret_cast(::operator new(size)); + blocks_.push_back(Block{p, p, p + size}); + if (reusable_) { + if (size < blocks_.front().size()) { + top_ = &blocks_.back(); + return; + } + if (size > blocks_.front().size()) reusable_ = 0; + } + std::swap(blocks_.back(), blocks_[reusable_]); + top_ = &blocks_[reusable_++]; +} + +void* Arena::AllocateSlow(size_t size, size_t alignment) { + assert(alignment && !(alignment & (alignment - 1))); + AddBlock(size, alignment); + assert(Align(top_->tip, alignment) + size <= top_->end); + return Allocate(size, alignment); +} + +} // namespace gitstatus diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/arena.h b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/arena.h new file mode 100644 index 00000000..569833ca --- /dev/null +++ b/exact_dot_oh-my-zsh/exact_custom/exact_themes/exact_powerlevel10k/exact_gitstatus/exact_src/arena.h @@ -0,0 +1,273 @@ +// Copyright 2019 Roman Perepelitsa. +// +// This file is part of GitStatus. +// +// GitStatus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// GitStatus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GitStatus. If not, see . + +#ifndef ROMKATV_GITSTATUS_ARENA_H_ +#define ROMKATV_GITSTATUS_ARENA_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "string_view.h" + +namespace gitstatus { + +// Thread-compatible. Very fast and very flexible w.r.t. allocation size and alignment. +// +// Natural API extensions: +// +// // Donates a block to the arena. When the time comes, it'll be freed with +// // free(p, size, userdata). +// void Donate(void* p, size_t size, void* userdata, void(*free)(void*, size_t, void*)); +class Arena { + public: + struct Options { + // The first call to Allocate() will allocate a block of this size. There is one exception when + // the first requested allocation size is larger than this limit. Subsequent blocks will be + // twice as large as the last until they saturate at max_block_size. + size_t min_block_size = 64; + + // Allocate blocks at most this large. There is one exception when the requested allocation + // size is larger than this limit. + size_t max_block_size = 8 << 10; + + // When the size of the first allocation in a block is larger than this threshold, the block + // size will be equal to the allocation size. This is meant to reduce memory waste when making + // many allocations with sizes slightly over max_block_size / 2. With max_alloc_threshold equal + // to max_block_size / N, the upper bound on wasted memory when making many equally-sized + // allocations is 100.0 / (N + 1) percent. When making allocations of different sizes, the upper + // bound on wasted memory is 50%. + size_t max_alloc_threshold = 1 << 10; + + // Natural extensions: + // + // void* userdata; + // void (*alloc)(size_t size, size_t alignment, void* userdata); + // void (*free)(void* p, size_t size, void* userdata); + }; + + // Requires: opt.min_block_size <= opt.max_block_size. + // + // Doesn't allocate any memory. + Arena(Options opt); + Arena() : Arena(Options()) {} + Arena(Arena&&); + ~Arena(); + + Arena& operator=(Arena&& other); + + // Requires: alignment is a power of 2. + // + // Result is never null and always aligned. If size is zero, the result may be equal to the last. + // Alignment above alignof(std::max_align_t) is supported. There is no requirement for alignment + // to be less than size or to divide it. + inline void* Allocate(size_t size, size_t alignment) { + assert(alignment && !(alignment & (alignment - 1))); + uintptr_t p = Align(top_->tip, alignment); + uintptr_t e = p + size; + if (e <= top_->end) { + top_->tip = e; + return reinterpret_cast(p); + } + return AllocateSlow(size, alignment); + } + + template + inline T* Allocate(size_t n) { + static_assert(!std::is_reference(), ""); + return static_cast(Allocate(n * sizeof(T), alignof(T))); + } + + template + inline T* Allocate() { + return Allocate(1); + } + + inline char* MemDup(const char* p, size_t len) { + char* res = Allocate(len); + std::memcpy(res, p, len); + return res; + } + + // Copies the null-terminated string (including the trailing null character) to the arena and + // returns a pointer to the copy. + inline char* StrDup(const char* s) { + size_t len = std::strlen(s); + return MemDup(s, len + 1); + } + + // Guarantees: !StrDup(p, len)[len]. + inline char* StrDup(const char* p, size_t len) { + char* res = Allocate(len + 1); + std::memcpy(res, p, len); + res[len] = 0; + return res; + } + + // Guarantees: !StrDup(s)[s.len]. + inline char* StrDup(StringView s) { + return StrDup(s.ptr, s.len); + } + + template + inline char* StrCat(const Ts&... ts) { + return [&](std::initializer_list ss) { + size_t len = 0; + for (StringView s : ss) len += s.len; + char* p = Allocate(len + 1); + for (StringView s : ss) { + std::memcpy(p, s.ptr, s.len); + p += s.len; + } + *p = 0; + return p - len; + }({ts...}); + } + + // Copies/moves `val` to the arena and returns a pointer to it. + template + inline std::remove_const_t>* Dup(T&& val) { + return DirectInit>>(std::forward(val)); + } + + // The same as `new T{args...}` but on the arena. + template + inline T* DirectInit(Args&&... args) { + T* res = Allocate(); + ::new (const_cast(static_cast(res))) T(std::forward(args)...); + return res; + } + + // The same as `new T(args...)` but on the arena. + template + inline T* BraceInit(Args&&... args) { + T* res = Allocate(); + ::new (const_cast(static_cast(res))) T{std::forward(args)...}; + return res; + } + + // Tip() and TipSize() allow you to allocate the remainder of the current block. They can be + // useful if you are flexible w.r.t. the allocation size. + // + // Invariant: + // + // const void* tip = Tip(); + // void* p = Allocate(TipSize(), 1); // grab the remainder of the current block + // assert(p == tip); + const void* Tip() const { return reinterpret_cast(top_->tip); } + size_t TipSize() const { return top_->end - top_->tip; } + + // Invalidates all allocations (without running destructors of allocated objects) and frees all + // blocks except at most the specified number of blocks. The retained blocks will be used to + // fulfil future allocation requests. + void Reuse(size_t num_blocks = std::numeric_limits::max()); + + private: + struct Block { + size_t size() const { return end - start; } + uintptr_t start; + uintptr_t tip; + uintptr_t end; + }; + + inline static size_t Align(size_t n, size_t m) { return (n + m - 1) & ~(m - 1); }; + + void AddBlock(size_t size, size_t alignment); + bool ReuseBlock(size_t size, size_t alignment); + + __attribute__((noinline)) void* AllocateSlow(size_t size, size_t alignment); + + Options opt_; + std::vector blocks_; + // Invariant: !blocks_.empty() <= reusable_ && reusable_ <= blocks_.size(). + size_t reusable_ = 0; + // Invariant: (top_ == &g_empty_block) == blocks_.empty(). + // Invariant: blocks_.empty() || top_ == &blocks_.back() || top_ < blocks_.data() + reusable_. + Block* top_; + + static Block g_empty_block; +}; + +// Copies of ArenaAllocator use the same thread-compatible Arena without synchronization. +template +class ArenaAllocator { + public: + using value_type = T; + using pointer = T*; + using const_pointer = const T*; + using reference = T&; + using const_reference = const T&; + using size_type = size_t; + using difference_type = ptrdiff_t; + using propagate_on_container_move_assignment = std::true_type; + template + struct rebind { + using other = ArenaAllocator; + }; + using is_always_equal = std::false_type; + + ArenaAllocator(Arena* arena = nullptr) : arena_(*arena) {} + + Arena& arena() const { return arena_; } + + pointer address(reference x) const { return &x; } + const_pointer address(const_reference x) const { return &x; } + pointer allocate(size_type n, const void* hint = nullptr) { return arena_.Allocate(n); } + void deallocate(T* p, std::size_t n) {} + size_type max_size() const { return std::numeric_limits::max() / sizeof(value_type); } + + template + void construct(U* p, Args&&... args) { + ::new (const_cast(static_cast(p))) U(std::forward(args)...); + } + + template + void destroy(U* p) { + p->~U(); + } + + bool operator==(const ArenaAllocator& other) const { return &arena_ == &other.arena_; } + bool operator!=(const ArenaAllocator& other) const { return &arena_ != &other.arena_; } + + private: + Arena& arena_; +}; + +template +struct LazyWithArena; + +template