Change log for psh - The Perl SHell
A reverse-chronological ordered list of changes
if ( -r 'README' ) {
if ( grep -q "Perl Shell" README ) {
print "OK\n";
}
}
New forfile builtin:
forfile *.txt less $_
is equivalent to
for i in *; do less $i; done
in (ba)sh
New redirection and piping syntax - incompatible to the old sh-like syntax. The new syntax is allowing many nice things like redirecting to opened Perl filehandles ( command >[=FILEHANDLE]) Perl shell now integrates with Perl backticks, you you can finally do things like:$foo=`help strategy` chomp $foo if ( $foo =~ /.../ ) ...New -F command line switch to disable processing of any pshrc files New default strategy perl - send everything after 'p!' unparsed to the perl interpreter (might be used later on for a special rc file compiler) New strategy darwin_apps - tries to locate Darwin/Mac OS X Appbundle programs and execute them. Alias expansion is escapable using backslash: alias ls='ls --color' \ls The sequence ESC-h is now per default bound to the new readline function ``run-help'' which will display any help about the current input line it can find. (works only in Term::ReadLine::Gnu) It's now possible to bind simple commands with
&& and || like
in a normal shell.
Global precommand modifiers: You can put noglob, noalias, noexpand in
front of any command to disable the specified expansion or all of them.
Prompt themes - see the theme builtin.
Completion modules - allows large sets of predefined completion rules
without loading them all at startup time - see the complete builtin.
help set
returned the help of setenv)
The parser parsed '&&' as if the user entered '& &&'.
@_ and $_ are saved between input lines.
If you're redirecting perl code, a new fork will be created. You'll therefore
lose all variable changes etc. in redirected perl code. That's not as bad as
it seems, as before the change, psh segfaulted most of the time you tried
redirecting perl code.
Completion was a improved a bit - completions of filenames like ``foo\ bar''
(where backslash is used to escape whitespace) works a little bit better
now. A complete rewrite of Completion is currently scheduled for 0.11
Psh::OS::backtick() now can call and capture the output of
psh builtins on Unix.
- warp [2000-05-01]
Added new builtin fc which is similar to the command of the same
name from bash - inspired by a comment on the SourceForge
message board (and I finally start to like this command ;-).
- warp [2000-05-03]
The builtin history now also accepts a text as argument. In that
case it will only print commands containing that text.
- warp [2000-07-08]
The builtin fc now understands the switch -p. Also it's more
behaviour compatible with bash's fc.
New builtin bind which does keybindings (similar to bash).
- Andrew Turner [2000-08-11]
New builtin drives which shows the available drives on Windows.
- warp [2000-08-26]
Psh::Util::prompt() for interactive prompting.
- warp [2000-05-01]
Cleanups in Psh::OS::Unix::_setup_redirects and
...::_remove_redirects.
- warp [2000-05-01]
Added Psh::add_history so builtins etc. can modify history
easily.
- warp [2000-07-08]
Quotes are removed from file names in redirections.
- warp [2000-07-08]
Fixed variable substitution in Psh::PerlEval so that whitespace
after a backslash does not split words anymore.
- warp [2000-07-08]
Half-hearted attempt at getting whitespace and special characters
in TAB completion right.
- warp [2000-07-08]
Psh::OS::exit renamed to Psh::OS::exit_psh due to problems
with POSIX's exit.
- warp [2000-08-26]
Removed/reduced usage of Cwd.pm due to partly strange behaviour
on non-UNIX systems.
- warp [2000-08-26]
The help builtin cleans up the temp files it creates.
- warp [2000-08-26]
cd -/+/%number
The new builtin dirs displays the stack.
$#foo, $foo->{key,
$foo->method, subroutine without &, perl reserved symbol)
Executable completion now even after initial ! for shell escape
Some minimal status code testing and error handling for user input.
Understands environment variable $IGNOREEOF.
Accepts the -i command line switch and ignores it for bash compatibility.
If the line you entered matches the last line it won't be added to the history.
On Unix, support for a global .pshrc file at /etc/pshrc.
New variable @Psh::executable_noexpand.
New variable $Psh::interactive which is set if psh is currently in interactive
mode.
SIGTERM and SIGHUP are not ignored anymore and cause psh to exit instead.
Switch -r now reserved for restricted mode, new switch -f for alternative
resource file.
Fixed problem with quoting which was not removed for the executable strategy.
Piping is now possible in aliases.
The parser now allows nesting aliases.
Contributions primarily by Markus Peter (warp) and Simon Huggins
(huggie).
$PSH_TITLE,
$Psh::change_title, $Psh::window_title. The behavior is like prompt
strings.
Strategy perlfunc is a default strategy again. $Psh::perlfunc_builtins
determines wether Perl builtins should be evaled (default 0)
Builtin kill now supports sending a signal to a named job (e.g. ``emacs & ;
kill emacs'').
Builtin strategy for loading strategies on demand and adding them to
the list of strategies to use. Handy for strategies that are used less often
than the core strategies.
Properly pipeable aliases.
Fallback and most other builtins are loaded on demand.
Converted &Psh::symbols() into a builtin, symbols.
New builtin set. Acts like bash's set and returns environment. Could be
extended to allow set -o noclobber bash-isms to work.
New strategy auto_cd.
Builtin strategy now knows command available to list available strategies
print "\n" on CTRL-C to clean up display.
Fixed generation of $Psh::history_file.
File::Spec
Strategies fallback_builtin and perlfunc modularized and moved into Psh::Strategy::*
Perlfunc configuration variables are now in Psh::Strategy::Perlfunc for cleanliness.
Removed &Psh::news() since there's no need for it being included in psh just for the tryme script.
List of builtins for which autoloading is supported is built automatically during startup.
Refinements to 0.005.
New Features:
$Psh::history_size if
Term::ReadLine::Perl is used
Manifest Filters for pipeline code, e.g. try:
ls | s/y/k/ # Substitution. Example is a Y2K fix.
ls | { print ++$i, ": $_"; }q # Quick. Iterate over lines.
netstat | { $_[1]>2; }g # Grepish. Print line if { ... } evaluates to true.
See the psh documentation for more information.
New recursive globbing using**/ (Example: grep anything **/*.pm).
Win32 Port Enhancements:
execute_complex_command(), get_hostname(),
get_all_users(), get_home_dir(), and get_known_hosts().
Internals:
File::Spec).
More I18N.
Removed usage of $ENV{HOME} in portable code.
A very functional release.
Builtins of this type (currently searched in package Psh::Builtins::Fallback)
will be executed AFTER no program of that name was found.
This allows simulation of common commands like ls and
env on systems not having such binaries.
On systems with an env binary installed it will use the binary, on other systems (namely Win32) it will print a list of environment variables.
help unalias
Changed builtin alias so that 'alias name' displays the
alias definition for that name.
It's now possible to do 'bg commandname' (e.g. 'bg emacs')
fg has the same behaviour for consistency.
Respects CDPATH now and sets OLDPWD.
@Psh::Completion::bookmarks and @Psh::Completion::netprograms.
New Perl Hashkey completion will TAB complete the name
of keys for Perl hashes (if they are not written in quotes).
Support for user defined completions by %Psh::Completion::custom_completions.
Perl Symbol completion now supports package names and package name completion.
Support for TAB completions for builtins.
A custom_completions entry may now also be code. If the
value of a custom_completions key/value pair is a sub
that sub will be called and the result used as rules.
A rule for custom_completions may now have an optional
third argument. If that argument is true, the
custom_completion will replace the standard completions
instead of adding to them.
Filename Completion respects the FIGNORE environment
variable now.
Psh::OS::Unix::glob() - now uses its own glob
routine instead of CORE::glob() - and is significantly faster
(important for executable completion).
New variables: $Psh::Prompt_cont, $Psh::result_array.
Moved almost all code from psh into Psh, Psh::Builtins and Psh::Util.
Environment variable CURRENT_SHELL is set to the path to psh.
This release fixes bugs, refactors the code, and adds the following features:
alias, export, setenv.
A flexible set of evaluation strategies that can be
selected or reordered by setting a configuration
variable.
Prompt strings can have escapes like \07 (ASCII BEL) or
\10 (ASCII LF).
avoided trying to save history if there wasn't even a
ReadLine module.
added $psh::debugging variable to hold the debugging
state, so it can be turned on and off in a running psh.
A $psh::echo variable to control whether perl results of
evaluation are printed.
The which builtin now shows which strategy will apply to
a given command line
Grab more input automatically if <<BLOCK appears
anywhere on the line, or if the line ends with an open brace.
results of &psh::which() searches are hashed.
Thorough documentation of every user-accessible variable and function
Contributions from Markus Peter:
%built_ins mechanism for adding built-in functions.
Smart mode is on by default.
&iget(),
which passes it on to &Term::ReadLine::readline() or
prints it out if the ReadLine module is not available.
Thanks to Sam Tregar and tmb at lumo.com.
Changed history handling so that empty lines and those
consisting of entirely whitespace are not recorded.
Fixed a couple of typos.
Changed the regular expression for `smart mode' to
allow vi +3 psh in addition to ls -l.
Now uses Getopt::Std for option processing.
Fixed the code that detects the presence of Term::ReadLine.
Made more use of debug mode to print out advisory information.
Use zero instead of undef to set Term::ReadLine::MinLine
so that we don't get undef usage trouble in the guts of
Term::ReadLine::Gnu.
TODO file.
Added parens around each part of the $interactive detection expression.
Prompt variables are now dealt with via %prompt_vars,
which can be modified, so that custom prompt variables
can be created.
Added %built_ins.
$
didn't work. Thanks to John Labovitz.
Patch.
Patch.
Second release.
Initial release