After profiling startup time, I found that "pyenv rehash" is
by far the slowest piece. This change skips rehashing on init.
See https://github.com/pyenv/pyenv/issues/784#issuecomment-404850327
Also pass the shell explicitly, as suggested in
https://github.com/pyenv/pyenv/issues/784#issuecomment-404944318,
which provides a modest improvement.
In total, this improves startup time from 1s to 0.3s on my machine.
Using the following command:
python -m timeit "__import__('subprocess').Popen(['zsh', '-i', '-c', 'echo']).communicate()"
Result before this change:
10 loops, best of 3: 1 sec per loop
Result after this change:
10 loops, best of 3: 334 msec per loop
This reverts commit 6d00fdf8c8.
As unfortunate as it is, this workaround was a hack and doesn't take
into account prompts like spaceship which don't use $editor_info but
rely on $KEYMAP directly. We'll need to find a more consistent solution
to fix this.
There are a number of things happening here.
- Extra support for yaourt has been removed
- Docs have been updated to explicitly call out that AUR helpers are not
officially supported
- aurutils has been suggested to make common operations easier
- A utility function called aurget (similar to aurfetch from aurutils)
has been added to make cloning AUR repos easier.
Fixes#1531
This was ported from Oh-My-Zsh and since have been disabled in it.
Explained in more detail
rvm/rvm/issues/3091#issuecomment-60083194
Related: #998, #1081
* Added conda virtualenv support to python module
* Added instructions for Python module options to README
Thanks to @egpbos for the original feature and @ickc for fixing the merge conflicts.
* archive: fix unrar check when using unrar-free
unrar-free returns the error code 1 when run without arguments, thus
failing the presence check. Replacing the current presence check with
(( $+commands[unrar] )) fixes the problem.
* archive: add unar support for lsarchive and unarchive
No `archive` support with unar.
* Add zsh-help function for easily searching the zsh documentation
Looks up things in the zsh documentation.
Usage: zsh-help [--all] search term(s)
Option --all will seach for the term anywhere, not just at the start of a
line. When not using --all it will search nicely for terms at the beginning
of the line, which in the zsh man pages is where terms that are explained
are located, allowing you to search the zsh man pages easily.
* Improve zsh-help to search section headings before other text
Provides a much easier way to search and access ZSH's manual. First checks for
terms at the start of the manual, then checks if it's at start of a line allowing
whitespace.
Clean up some of the code a bit and format it to have a proper header for the
zprezto project with author/email and description of the function.
Now that pyenv plugins availability is detected by directly probing
'pyenv', we need to rely on the same mechanism consistently.
Further, we perform available pyenv plugin scan with native zsh
techniques instead of relying on external commands.
If the pyenv virtualenv plugin is installed using the [pyenv-installer][1]
app script or directly via a [Git clone][2], then the pyenv-virtualenv-init
executable, that the `pyenv virtualenv-init` command uses, will not
exist in the user's PATH and therefore cannot be found using
`$commands[pyenv-virtualenv-init]`.
Installing the pyenv-virtualenv plugin in this manner is common among Linux users.
Using the pyenv `commands` command, which lists all commands pyenv can
run, we can find if the virtualenv-init command is available to pyenv
and subsequently the virtualenv plugin, without relying on
pyenv-virtualenv-init to exist in the user's PATH.
[1]: https://github.com/pyenv/pyenv-installer
[2]: https://github.com/pyenv/pyenv-virtualenv#installing-as-a-pyenv-plugin
This was a change in zsh 5.4.1 where prompt_sp is now reset on calls to
prompt, unlike previous behavior where it was set by default. This
restores the previous default behavior.
Refs #1423, but is not a complete fix because we need to wait for
external prompts to update as well.
Just having 'pyenv' available doesn't imply availability of virtualenv pyenv
plugins. Check for availability of virtualenv plugins as well before attempting
to use pyenv wrapper for virtualenv.
By keeping the variable `_etc_host_ignores` around, it can be resolved
lazily which is turn should allow selective ignores on a per invocation
basis.
Also, `'\#'` doesn't need to be added to `_etc_host_ignores` anymore.
It is enforced inline.
Entries from static '/etc/hosts' can now be ignored via 'zstyle' based
configuration. Both IP address and corresponding hostname will be ignored
during host completion. However, some of the entries ignored from '/etc/hosts'
still might appear during completion because of their presence in 'ssh'
configuration ('~/.ssh/config') or history ('~/.ssh/ssh_hosts',
'~/.ssh/known_hosts' etc.).
Changes:
* Simplify zstyle name `skip-virtualenvwrapper-init` to `initialize`
avoiding double negation in name
* Always perform `eval (pyenv virtualenv-init -)` at initialization
* Prefer `virtualenvwrapper_lazy` over `virtualenvwrapper` when available
* Honor `VIRTUALENVWRAPPER_VIRTUALENV` if it is defined.
* Document about `VIRTUALENVWRAPPER_PYTHON` and `VIRTUALENVWRAPPER_VIRTUALENV`
(this would be particularly important in macOS after recent homebrew update)
* Add additional documentation for `initialize` in _README.md_ and _zpreztorc_
* Add aliases `py2`, `py3` as shortcut for `python2`, `python3` respectively
This includes some improvements by @indrajitr in addition to the main migration.
The first step was to avoid PROMPT and RPROMPT modification when possible (which may help resolve some other issues as well relating to zsh crashes with the sorin prompt) then update the displayed git information in a separate variable rather than a command.
We use zsh-async for creating and running background tasks. The sorin prompt uses it to update git info without blocking the prompt from displaying (because of how long it can take). In the future it may be worth moving more tasks and more prompts to using this.
The move to zsh-async does make the git prompt slower in some circumstances (most noticeable in large repos), but this is a worthwhile tradeoff to avoid the cache file which had a number of potential security holes.
We have also switched to adding zsh-async as an external submodule (rather than the version bundled with pure) which may cause some migration headaches, but it will be worth it in the long run.
Previously I made a change to try and bind these unbound keys to the main
keymap in thoughts that in vicmd or viins mode it would fallback if it wasn't
bound in vicmd/viins mode. This turned out not to be the case.
Explicitly bind the keys in both viins and vicmd mode as works properly.
Changes:
- Rename `rsync_scp_wrap` to `noremoteglob` and make it more generally usable
- Enable completion support for commands wrapped with `noremoteglob`
- Tighten up internal variable usages
- Update documentation for 'noremoteglob' function
Changes:
* In prezto, function names are hyphenated ('-') by convention,
rename `promptpwd` to `prompt-pwd` accordingly.
* Unset local variable `current_pwd` proactively.
* Tweak additional documentation for `prompt-pwd`.
We cannot always assume availability of `pip`, it can be `pip2` or `pip3`
instead. We detect the first available one and use it for generating the
completion cache.
If you are in a tmux session, and auto-start is enabled
Then you `sudo su` and then `su <username>` it will re-attach, in a loop.
This resolves that problem, by forcing a detach before a (re)attach.
Currently rm/cp/ln/mv are aliased to rm/cp/ln/mv -i so that it will
prompt before removing files.
Some people would not like this functionality and wish for an easy way to
disable it. This adds a new option:
zstyle ':prezto:module:utility' safe-ops yes/no
It is enabled by default even if zstyle is not set, but can be set to no
to disable these aliases.
This should resolve issue #205
Somewhere around zsh 5.1, there was a change which turned typeset (and
most likely local) into a keyword. In older versions of zsh, using
`local x=()` will cause the () to be treated as a glob qualifier.
Fixes#1373
Usage of `(( ... ))` over `[[ ... ]]` is preferred for arithmetic expression
since the former is less error prone.
Also, unset local variable whenever possible.
Bind the remaining unbound keys in the main mode so that they
don't result in undefined functionality when pressed. (Often this
will change the casing of one/most/all of the characters you've
typed or even stranger things). In emacs mode this usually just
inserts a tilde, but this will fix that as well so nothing happens
when unbound keys are pressed.
Since there isn't any binding which does "nothing", create a noop
ZLE widget and bind them to that.
The user or other modules are still able to override these bindings
either by overriding the main keymap or setting a keymap in one
of the other modes which will take precedence over the main fallback.
Changes:
- Use git.io over 'https'
- Add extra check to conform to *.github.com URLs
- Use built-in _urls function for completion
- Update readme with GitHub blog URL
* [editor] Add bindkey-all function to show all bound keys
Function which allows you to see all the bound keys for all of
the different keymaps. It does accept arguments and passes them
through to bindkey -m "$keymap" so you could set a shortcut to
all keymaps as well if you wished.
Makes it much easier to see and grep what keys are bound to each of
the different keymaps.
When no arguments are given it will print keymap headers to stderr,
if given arguments it will not print anything extra to the screen.
* [editor] Update README to include information about bindkey-all funct.
Escape all $ except the first $. Escape all backtick `'s. This prevents
variable names or shell expansions placed as branch names from
remotely exploiting code.
Fixes issue #1267 for sorin prompt.
Adds a function which wraps rsync and scp so that remote paths are not globbed
but local paths are globbed. This is because the programs have their own
globbing for remote paths. The wrap function globs args starting in / and ./
and doesn't glob paths with : in it as these are interpreted as remote paths
by these programs unless the path starts with / or ./
Fixes issue #1125
Delete key deletes character in vimcmd cmd mode instead of weird
default functionality. The default functionality in vicmd mode
is the Delete key will change the case of many of the characters
on the screen, which is not the default thing that vim does.
This could be confusing and frustrating to users, so set it to delete
a character instead.
ad522a0 driver: Fix printing error message to file when cannot resolve highlighters directory location
73cb832 'main': Highlight mismatched 'if'/'fi'.
be083d7 driver: Improve «unhandled ZLE widget 'foo'» error message.
237f89a 'main': Don't consider «$*» a glob.
835fec7 workaround for PAT_STATIC bug in zsh
9523d6d tests: zsh 5.4-to-be compatibility: Set a new "I am shooting myself in the foot" option.
aac4a44 driver: Fix duplicated slash in error message
4f49c4a docs: Update zplug install instruction
5efd062 tests: Add a regression test for issue #392 (aliases beginning with a '+' are lost).
67be621 tests: Move some code in preparation for next commit. No functional change.
74949c2 driver: Don't undefine aliases that begin with a '+', to workaround an upstream bug.
8d5afe4 driver: Be immune to 'alias' having been redefined.
76ea9e1 'main': Highlight possible history expansions in double-quoted strings.
50fbb5f docs: Update Homebrew link.
2dce602 driver: Be immune to weird aliases in the calling scope.
347cf0e 'main': Add regression test for previous commit.
5625e30 'main': Fix bug: no start_pos=$end_pos in comment short path
fed37a9 'main': Fix a bug concerning command word with embedded colon-space sequences.
626c034 Add FreeBSD port
3d74aa4 Add Fedora package
5398949 changelog: Update for changes pulled out of 0.5.x.
14179d8 Bump version
281ed9b v0.4.0 changelog updates
83129dd Make asynchronous suggestions disabled by default
a2f0ffb Enabling suggestions should not fetch a suggestion if buffer is empty
7d4a1d9 Add enable/disable/toggle widgets to disable suggestion functionality
e1959d0 Put in a general fix for #219 - Handling input from `zle -U`
c52c428 Fix issues with widgets wrapped by other plugins
ea505b0 Add a spec for unlisted widgets fetching a new suggestion
502fb4a Make tmux_socket_name public so you can access easily from binding.pry
ce36224 Use pry-byebug instead of pry for more functionality
39762ec Set up circle ci
468b740 Test should be passing block to RSpec wait_for
c9a51e0 Handle dashes at the beginning of commands
48a21bf [cleanup] Remove an extra newline
4afbbba We only need to run the feature detection if starting async
e3fa4e4 Don't do anything but re-bind widgets on each precmd
2cd99e6 Add a test for modifying widget list vars after sourcing plugin
c70d685 Clean up widget list spec
255359d Use `+=` to be a bit more true to the spec language
4321fc0 We need to bind on every precmd to ensure we wrap other wrappers
75e8505 Gracefully handle being sourced multiple times
a0fcd81 Destroy zpty on load if it already exists
39ca3da Use a different name for feature detection zpty
dcce973 Remove support for long-deprecated options
0c940e7 Don't bind any zle-* methods
23ef16c Do not show suggestions if the buffer is empty
9381445 Fix tests
c4bfd8e Need to prevent zpty feature detection from HUPing existing zptys
c959408 Only wait a max of 2 seconds for content to match after clearing screen
06fca77 Readme updates for v0.4.0
9feac57 Do not show any error output from async zpty server process
ed8056c Lots of async changes
38eb7cd Update license date
64e7ec5 Rename internal term session method
98f926d Clean up TerminalSession constructor a bit
51e8755 TerminalSession methods return self to support chaining
5151adf Make TerminalSession#clear block until the screen is cleared
2c465a9 Rename async pty name config var
e3eb286 Lots of little async cleanups
c342587 Wait for the terminal.clear to go through before continuing
89dd69d Add pry gem for debugging support
40bb2e7 little cleanup
16666da Handle versions of zsh where zpty does not set REPLY to fd of opened pty
f33b605 Move async initialization into `start` function to keep in one place
78ba071 Add feature detection
3f57198 Only bind widgets once, on initial sourcing
2dbd261 Allow configuring of zsh binary to run integration tests against
6c5cd42 Go back to tracking last pid because `kill %1` didn't seem to be working
54e1eee Optimize case where manually typing in a suggestion
21d9eda Wrap suggestion fetch command in parens to actually run in background
50e6832 Escape the prefix passed into the match_prev_cmd strategy
0305908 Revert `fc` usage in calculating suggestion
8e06a54 Add test for string with "\n" in it
b3208b0 Pass the chosen strategy into the suggestion server pty
ab27425 Quote the suggestion to support sh_split_word option
e5a5b0c Output only newlines in the pty
0337005 Disable word splitting while reading to preserve whitespace
b530b0c Use `zpty -r` with pattern matching to fetch suggestion
5c891af Reset zsh options inside pty (from zsh-async)
e33eb57 Send only the prefix to the suggestion server
fba20b0 Use %1 instead of tracking pid
0308ed7 Rename worker to server
e72c2d8 add a bunch of comments
ab8f295 First pass at async functionality
debbffc Add rspec test around accepting suggestions
4850119 Add separate test task for RSpec
c22ab0e Implement suggestion integration tests in RSpec + tmux
07a6768 Add TerminalSession helper for managing a tmux session
e6591d5 Add RSpec for high-level integration testing
af671fb Add ruby settings to editor config
8cdf60b Updated rkt commands and arguments
f9d7d9d Implemented autocompletion for rkt pods and images (Fixes#465)
9feab39 Added completion for yarn
a63a098 Update completion for mix, add completion for mix test, fix completion for mix help
6285e0e Add completions for bitcoin-cli
0ed2e86 Set proper description for gist -r
df5a3a1 Try to follow the style guide
d7a2972 Add gist completion for read flag
b0cb2ad Added _rclone
b7c11f4 drop ripgrep completion
907cba3 Update repository infos
ccb53f4 Support newer versions of OpenSSL
f02dc8f add licence information
ceaff68 Add completion for ffind
* Command to activate virtualenvs on changing directory
Enables automatic activation of a virtualenv when jumping into a directory
This is done by looking in the current directory for a file or directory
named `.venv`. If it's not found in the current directory its parents will
also be examined. `.venv` can be either:
1. A file containing the name of a virtualenv found in $WORKON_HOME
2. A directory containing bin/activate (meaning that the directory is
assumed to be a virtualenv.)
If $WORKON_HOME is set it is assumed that virtualenvwrapper is installed
and the `workon` command will be issued.
The original idea was by @samjonester in #1210. This version aims to avoid
relying on the stat or date programs because they have different flags depending
on the OS and if it uses BSD or GNU coreutils.
This change fixes a bug where no command can be found
(e.g. `ls`) due to the $path array being set to two elements,
one of them with all the previous paths separated by spaces.
This makes zsh break $PATH, instead of colons there are
spaces, and nothing works.
The idea is to have the array be set leveraging the word splitting
that we usually are told to avoid by quoting.
This shouldn't cause problems for anyone and should improve startup times for
anyone using python with virtualenvwrapper because it will wait for the first
command to load rather than right away.
* Add some new git aliases, modify a few more.
* Add `gbV` command to show more verbose git branch info.
* Add `gcam` to make it possible to execute `gca; gcm '<your message
here>'` more simply.
* Add `gii` command to temporarily untrack (ignore) a file.
* Add `giI` command to uningore a file.
* Change alias of `gbl` to `gbv`. Personally, I think aliases that
include a switch in the command should include the switch in the alias
if possible. This makes them easier to remember.
* Change alias of `gbL` to `gba`. I think the `-a` switch is more
salient to what this alias does than the `-v`. Furthermore, with this
PR there are already `gbv` and `gbV` aliases, so those are out.
* Change implementation of `gCl` alias to use built-in capabilities of
git, rather than sed.
* Rename gbx and gbX to gbd and gbD respectively
* Mostly revert alias changes
* Add gbr and gbR aliases to gbm and gbM commands
create ssh_agent_env with current user id in file name to avoid collisions with other users
create ssh_agent_sock with current user id in file name to avoid collisions with other users
* Add perl-info function
* Add alias for plenv subcommands
* Load perlbrew if needed
* Load plenv if needed
* Use PERLBREW_ROOT as priority to detect Perlbrew
This removes --unified from the default options to make it possible to pass -y
without worrying about conflicting output formats.
diffu has also been added as an alias to make it easier to get output as a
unified diff.
Fixes#1231
7 is pretty arbitrarily chosen, but seems like a reasonable tradeoff, at
least the completion no longer shows symptoms of exponential
time-growth when trying to complete something completely wrong.
This fixes#946.
The new call is compatible with colordiff v1.0.8 - v.1.0.15 (might be
compatible with even earlier versions, but not tested), while the
original one breaks down under v1.0.14 and v1.0.15. See
https://github.com/daveewart/colordiff/issues/22.
Multiplexer titles can be set independent of window and tab titles.
Add auto-title always option to have dynamic titling inside terminal
multiplexers. Setting auto-title to yes continues to ignore dynamic
titling inside terminal multiplexers.
This patch should not alter behavior under Apple terminals.
* Support skip-virtualenvwrapper-init zstyle in python module to avoid auto-sourcing of virtualenvwrapper.sh
* Don't overwrite the WORKON_HOME env var if the user has already set it
Homebrew decided to not change the behaviour of `brew upgrade` so
`brew upgrade --all` is equivalent to `brew upgrade` without any other
arguments (so the `--all` is a no-op and can be removed).
From GnuPG changelog:
> Removed the GPG_AGENT_INFO related code. GnuPG does now
> always use a fixed socket name in its home directory.
Signed-off-by: Sorin Ionescu <sorin.ionescu@gmail.com>
Set PATH variables to allow gems such as Bundler to be found and for the
`ruby-info` function to properly work.
A default Ruby must be set in ~/.ruby-version; for more information, see
https://github.com/postmodern/chruby#default-ruby.
Signed-off-by: Sorin Ionescu <sorin.ionescu@gmail.com>