From cf7d3cffbdc201595c0c650798fab9f9e44b4d51 Mon Sep 17 00:00:00 2001 From: delphinus Date: Tue, 18 Apr 2017 17:57:35 +0900 Subject: [PATCH] Add perl-info function & plenv subcommand aliases (#1303) * 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 --- modules/perl/README.md | 49 ++++++++++++++++++++++++-- modules/perl/functions/perl-info | 30 ++++++++++++++++ modules/perl/init.zsh | 60 +++++++++++++++++++++++++++----- 3 files changed, 128 insertions(+), 11 deletions(-) create mode 100644 modules/perl/functions/perl-info diff --git a/modules/perl/README.md b/modules/perl/README.md index 90af1eb..cc5a9d3 100644 --- a/modules/perl/README.md +++ b/modules/perl/README.md @@ -30,6 +30,14 @@ Perlbrew An alternative to the above is to use [Perlbrew][2], which allows for the management of multiple, isolated Perl installations in the home directory. +plenv +----- + +Yet another alternative is [plenv][3]. This is inspired from rbenv and enables +switching between multiple binary installations. + +The subcommands of plenv is similar with rbenv. + Aliases ------- @@ -51,13 +59,50 @@ Aliases - `plbu` uninstalls a Perl version. - `plbx` temporarily sets the Perl version to use. +### plenv + + - `plv` manages Perl environments. + - `plvc` List all available plenv commands. + - `plvl` Set or show the local application-specific Perl version. + - `plvg` Set or show the global Perl version. + - `plvs` Set or show the shell-specific Perl version. + - `plvi` Install a Perl version using the perl-build plugin. + - `plvu` Uninstall a specific Perl version. + - `plvr` Rehash plenv shims (run this after installing executables). + - `plvv` Show the current Perl version and its origin. + - `plvV` List all Perl versions available to plenv. + - `plvw` Display the full path to an executable. + - `plvW` List all Perl versions that contain the given executable. + - `plvm` List cpan modules in current perl. + - `plvM` Migrate cpan modules from other version. + - `plvI` Install cpanm. + +Functions +--------- + + - `perl-info` exposes information about the Perl environment via the + `$perl_info` associative array. + +Theming +------- + +To display the name of the currach Perl version in a prompt, define the +following style in the `prompt_name_setup` function. + + # %v - perl version. + zstyle ':prezto:module:perl:info:version' format 'version:%v' + +Then add `$perl_info[version]` to `$PROMPT` or `$RPROMPT` and call +`perl-info` in the `prompt_name_precmd` hook function. + Authors ------- -*The authors of this module should be contacted via the [issue tracker][3].* +*The authors of this module should be contacted via the [issue tracker][4].* - [Sorin Ionescu](https://github.com/sorin-ionescu) [1]: http://www.perl.org [2]: http://perlbrew.pl -[3]: https://github.com/sorin-ionescu/prezto/issues +[3]: https://github.com/tokuhirom/plenv +[4]: https://github.com/sorin-ionescu/prezto/issues diff --git a/modules/perl/functions/perl-info b/modules/perl/functions/perl-info new file mode 100644 index 0000000..2c396ea --- /dev/null +++ b/modules/perl/functions/perl-info @@ -0,0 +1,30 @@ +# +# Exposes information about the Perl environment via the $perl_info associative +# array. +# +# Authors: +# JINNOUCHI Yasushi +# + +local version +local version_format +local version_formatted + +# Clean up previous $perl_info. +unset perl_info +typeset -gA perl_info + +if (( $+commands[perlbrew] )); then + version="${PERLBREW_PERL##*perl-}" +elif (( $+commands[plenv] )); then + version=$(plenv version-name) +elif (( $+commands[perl] )); then + version=$(perl -e 'printf "%vd", $^V') +fi + +# Format version. +if [[ -n "$version" ]]; then + zstyle -s ':prezto:module:perl:info:version' format 'version_format' + zformat -f version_formatted "$version_format" "v:$version" + perl_info[version]="$version_formatted" +fi diff --git a/modules/perl/init.zsh b/modules/perl/init.zsh index a8d5603..d22a5f9 100644 --- a/modules/perl/init.zsh +++ b/modules/perl/init.zsh @@ -10,6 +10,29 @@ if (( ! $+commands[perl] )); then return 1 fi +# +# Load Perlbrew or plenv +# + +# Load Perlbrew into the shell session. +if [[ -s "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}/etc/bashrc" ]]; then + source "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}/etc/bashrc" + + # Load Perlbrew completion. + if [[ -s "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}/etc/perlbrew-completion.bash" ]]; then + source "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}/etc/perlbrew-completion.bash" + fi + +# Load manually installed plenv into the shell session. +elif [[ -s "$HOME/.plenv/bin/plenv" ]]; then + path=("$HOME/.plenv/bin" $path) + eval "$(plenv init - --no-rehash zsh)" + +# Load package manager installed plenv into the shell session. +elif (( $+commands[plenv] )); then + eval "$(plenv init - --no-rehash zsh)" +fi + # # Local Module Installation # @@ -41,12 +64,31 @@ alias pld='perldoc' alias ple='perl -wlne' # Perlbrew -alias plb='perlbrew' -alias plba='perlbrew available' -alias plbi='perlbrew install' -alias plbl='perlbrew list' -alias plbo='perlbrew off' -alias plbO='perlbrew switch-off' -alias plbs='perlbrew switch' -alias plbu='perlbrew use' -alias plbx='perlbrew uninstall' +if (( $+commands[perlbrew] )); then + alias plb='perlbrew' + alias plba='perlbrew available' + alias plbi='perlbrew install' + alias plbl='perlbrew list' + alias plbo='perlbrew off' + alias plbO='perlbrew switch-off' + alias plbs='perlbrew switch' + alias plbu='perlbrew use' + alias plbx='perlbrew uninstall' + +elif (( $+commands[plenv] )); then + alias plv='plenv' + alias plvc='plenv commands' + alias plvl='plenv local' + alias plvg='plenv global' + alias plvs='plenv shell' + alias plvi='plenv install' + alias plvu='plenv uninstall' + alias plvr='plenv rehash' + alias plvv='plenv version' + alias plvV='plenv versions' + alias plvw='plenv which' + alias plvW='plenv whence' + alias plvm='plenv list-modules' + alias plvM='plenv migrate-modules' + alias plvI='plenv install-cpanm' +fi