zaw で local の CPAN モジュールを perldoc する

  • 2
    Like
  • 0
    Comment
More than 1 year has passed since last update.

zaw には perldoc コマンドの補完候補を zaw source にする perldoc.zsh というのが標準で用意されてる。が、Perl なプロジェクトで Carton(もしくは cpanm -Llocal . とか)つかって local にモジュールいれないことはないし、コアモジュールだけ perldoc できても嬉しさ半減。本当に読みたい POD は local にあるのでそれも補完候補にいれたい。

.zshrc
function zaw-callback-perldoc-emacs() {
    local orig_buffer="${BUFFER}"
    BUFFER="emacsclient -t $(perldoc -lm "$1")"
    zle accept-line
}

function zaw-src-perldoc-local() {
    # global modules
    zaw-src-perldoc

    # local modules installed by carton into local/lib/perl5
    local -a carton
    if [[ -d local/lib/perl5 ]]; then
        carton=($(command find local/lib/perl5 -type f -name '*.pm' -or -name '*.pod'))
    fi

    candidates=($carton $candidates)
    actions=("zaw-callback-perldoc-view" "zaw-callback-perldoc-emacs")
    act_descriptions=("view perldoc" "open with emacs")
}

zaw-register-src -n perldoc-local zaw-src-perldoc-local
bindkey '^x^p' zaw-perldoc-local

(「vim で open」は用意されているが「emacs で open」がないので、それもないと嬉しささらに半減なので追加)

zaw は helm のような複数ソースには対応してないけど補完候補リストである $candidates 変数は上書きすることができるので、zaw-src-perldoc で生み出された $candidates に追加する感じ。cpanfile があるディレクトリで実行する前提の雑な感じで(自分的には必要十分)。

local の候補はファイルパス、コアモジュールは perldoc コマンドの補完ソースからとってくるのでパッケージ名ででてくる。

zaw-perldoc-local.gif

楽。