Remember when I wrote the following?
Completion in bash is hard-wired to understand trailing slashes as “the user might want to do more completion right after this” – we want
:: treated that way instead but there is no way to tell bash.
This is still true, but reading the manpage a little less carelessly reveals that passing
-o nospace to the
complete command tells bash to simply never append a space, which achieves what is desired without hacks.
While I was in there, I found
-o default, which means that if the completion generator returned no results, bash should use its default completion generator instead. This is very useful.
Previously, with “
.” in your
@INC (as it commonly is), all directories directly inside the current working directory would be included in the completions list as suggested namespaces, because
perldoc-complete has no way of knowing which of them contain modules and which don’t. (It would have to recurse, which is too expensive.) But since there is a way to fall back to bash’s default filesystem completion, I have added an extra check that removes not only the home directory from
@INC, but the current directory as well.
If you want to complete on documentation in modules somewhere below the current directory, simply type
perldoc ./<Tab> etc to use standard path completion. Or
perldoc /<Tab> to complete on an absolute path.
Share and enjoy.
- No more ugly fake suggestions to force ambiguity
- No more spurious namespace suggestions outside your home directory
- You can now complete on paths as well as namespaces by starting the path with
- Existing users will have to change their
.bashrc line to
complete -C perldoc-complete -o nospace -o default perldoc
Yesterday’s posting got a fair bit of response. Among other feedback, I had some feature requests from Offer Kaye in my email today.
perldoc-complete will complete built-in Perl functions if you’ve typed
perldoc -f (try it with eg.
perldoc -f ch<Tab>) and it will also complete Perl’s documentation pages – although for uncluttering’s sake, it will hide the list if you’ve merely typed
Share and enjoy.
A month ago, Yanick Champoux wrote a note about helpers for browsing the POD in your your local
His first script is for firing up a browser pointed at a local POD web server, including starting one up if it’s not already running – not that useful to me, since I haven’t found myself actually using these servers very much, because of the console↔browser flipping that they entail. Plain old
perldoc on a console just feels faster to juggle.
However, he also includes another script: a completion helper for bash. This allows you to type something like
perldoc Cata<tab> and have bash turn it into
perldoc Catalyst for you. I used this script for mere hours before I realised it’s exactly the one thing I have always missed in Perl: a way to quickly and efficiently browse my local module library – the thing that all the POD web servers promised to give me, but couldn’t deliver in a convenient enough fashion for me to use routinely.
But as presented, his script has one limitation that annoyed me more than perhaps I should have let it: you have to use your system directory separator (ie. slash on Unixoid systems) en lieu of Perl’s
:: package separator. Ie.: you cannot type
perldoc Catalyst::Re<tab>, it has to be
I thought that should be easy to fix. (Famous last words, I know.) It turned out to be harder than expected due the fact that completion in bash is hard-wired to understand trailing slashes as “the user might want to do more completion right after this” – we want
:: treated that way instead but there is no way to tell bash. I also ended up rewriting the script to be more (theoretically) portable, to not require non-core dependencies, and to work on much older perls than just 5.10.0, as Yanick’s code requires. Fastidious as I always am, I also spent quite a bit of effort rewriting the code to make it more beautiful and easy to skim and understand.
So without further ado: share and enjoy.
I was looking over my old notes recently - I have a file where I keep ideas for projects among other things. These notes are really of any kind: implementation details, user requirements that should be met, project naming ideas. Among the potential projects for some later day is a Twitter client, for which I kept some naming notes. The thought process behind them was to somehow combine “Twitter” with “Perl” (not necessarily in an obvious fashion). I had even arrived at a conclusion.
With the benefit of retrospect, I have no idea what I was thinking.
I had decided that the right name would be “Twipple”.