History of Yash Legend: +: new feature -: removed feature =: specification change *: bug fix x: new bug ---------------------------------------------------------------------- Yash 2.35 + '--traceall' option. + New completion scripts for: git-clean, git-grep, git-ls-remote, git-submodule, git-whatchanged + Updated completion scripts for: git-cherry-pick, git-rebase (Git 1.8.1.4), ssh, ssh-add, ssh-keygen (OpenSSH 6.2) = The condition for exiting the shell when the -e option is enabled has been changed in accordance with the 2013 edition of POSIX.1-2008. = The "++" and "--" operators are no longer supported in the POSIXly-correct mode. = The $RANDOM variable now always returns random numbers, ignoring the value from the environment variable, if any. = If yash encounters a too long line that cannot be handled while reading a history file, it now tries to keep reading the rest of the file rather than stopping reading. = Very long command lines are no longer saved in the history file. * Minor fix in a syntax error message. * Minor fix in completion script for "git", "ssh" and "rsync". ---------------------------------------------------------------------- Yash 2.34 + New "test" built-in operator: =~, -o (unary) + New completion scripts for: configure, git-name-rev, git-request-pull, make, rsync = A syntax error or expansion error in .yash_profile or .yashrc no longer makes the shell exit even when the shell is not interactive. = In line-editing, overwritten characters are now restored when you hit the backspace key. = In line-editing, the undo history is no longer saved for each backspace. * Fixes in completion scripts for "git". ---------------------------------------------------------------------- Yash 2.33 = The "help" built-in now prints brief usage of built-ins. = Some error messages for command syntax error have been revised. = Some built-ins now check command syntax more strictly. * The "set" built-in aborts the shell on a command syntax error as specified in POSIX. ---------------------------------------------------------------------- Yash 2.32 + Man page and HTML manual in English and Japanese. = The "help" built-in now prints part of the man page. * Fixes in completion scripts for "git". ---------------------------------------------------------------------- Yash 2.31 + Completion of directory stack indices in extended tilde expansion. + New option for the "complete" built-in: --dirstack-index + Completion for "svn" version 1.7. * Fixes in "git", "tar" and "su" completion scripts. ---------------------------------------------------------------------- Yash 2.30 * Fixed pathname completion for redirections. + New completion scripts for: svn, git, gitg, gitk, and gitx. * Minor fixes in completion scripts. ---------------------------------------------------------------------- Yash 2.29 + An alias value now can contain newlines. * Fixed invalid memory access on printing an empty array using the "typeset" built-in. * The function body is now correctly executed in a subshell when the body is defined using the (...) compound command. * In line-editing, the undo command can now be applied only to the history entry that is being edited. ---------------------------------------------------------------------- Yash 2.28 = In an interactive shell, mail check is now done before job status report. * Fixed arithmetic expansion evaluating some expressions that should not be evaluated. * Fixed the "array" built-in removing the wrong elements when positive and negative indices are intermixed with the -d option. * Fixed the EXIT trap being wrongly executed after a command-not- found error. * The EXIT trap is now executed with the correct redirection when the last command had redirection. * The "exec" built-in now correctly exports arrays that are just assigned. * ${#@} is now correctly expanded to an array of integers that represent the lengths of array elements. * Fixed infinite loop in sequential brace expansion. * Fixed configuration file parsing in completion of the "ssh" command. * The "-T" option of the "ln" and "mv" commands now can be completed. * The EXIT trap now can be completed. ---------------------------------------------------------------------- Yash 2.27 * Minor bug fixes. + New completion scripts for: awk, chsh, gawk, nawk, pgawk, scp, sftp, ssh-add, ssh-agent, ssh-keygen, su, sudo, sudoedit, and useradd. * Fix in completion scripts for the "set" and "tar" commands. ---------------------------------------------------------------------- Yash 2.26 + New option for the "return" built-in: -n (--no-return) = Error messages have been revised. = Shell option names have been generalized: Option names are now case-insensitive. Non-alphanumeric characters are ignored in option names. Options can be inverted by prefixing "no" to their names. = "case foo in (esac) bar; esac" is now rejected in the POSIXly correct mode. = The "-o noexec" option is now ignored in an interactive shell. = New mail notification is now printed only when the mailbox file is not empty. = "printf %c ''" now prints nothing as "printf %c" do. = In an invocation of the "complete" built-in with the -A or -R option, the pattern is now matched against the last component of the pathname when generating pathname candidates with the -f option. * Function names containing an '=' sign can now be specified as arguments to the typeset and unset built-ins (with the -f option). * Fixed the exit status of iterative execution that was interrupted by SIGINT. + New completion scripts for: bsdtar, eview, evim, gex, gnutar, gtar, return, rgview, rgvim, rview, rvim, slogin, ssh, tar, and which. * Many fixes in completion scripts for: bash, chmod, dash, less, mksh, set, sh, and umask. ---------------------------------------------------------------------- Yash 2.25 = In the completion candidate list, options are now sorted case- insensitively. = While executing a completion function, the $IFS is reset to the default value. + New completion scripts for: bash, csplit, dash, diff, ed, egrep, env, ex, expand, fgrep, file, find, fold, getconf, grep, gview, gvim, gvimdiff, head, iconv, id, join, ksh, less, ln, locale, man, mesg, mkdir, mkfifo, mksh, more, mv, newgrp, nice, nl, nohup, od, paste, patch, pathchk, pr, ps, renice, rm, rmdir, sed, sh, sort, split, stty, tail, tee, time, touch, tr, uname, uniq, vi, view, vim, vimdiff, wc, who, xargs, and yash. * Many fixes in completion scripts for: cat, cd, chgrp, chmod, chown, cmp, comm, cp, crontab, cut, date, df, du, exec, ls, and set. ---------------------------------------------------------------------- Yash 2.24 + New option for the "." built-in: -L + New options for the "command" built-in: -a, -f, -k - Removed the -B option for the "command" built-in. = Fixed configuration process so that the shell can handle all kinds of signals on FreeBSD. = [line-editing] New command completion mechanism. The "complete" built-in now has new syntax and semantics. Completion settings are now autoloaded from $YASH_LOADPATH. + New completion scripts for: basename, bg, cat, chgrp, chmod, chown, cmp, comm, command, cp, crontab, cut, date, df, du, export, popd, pushd, readonly, type, ".", and "[". = Revised completion scripts for: alias, array, bindkey, break, cd, complete, continue, dirs, disown, echo, eval, exec, exit, fc, fg, getopts, hash, help, history, jobs, kill, ls, printf, pwd, read, set, suspend, test, trap, typeset, ulimit, umask, unalias, unset, and wait. - Removed completion script for the "return" built-in. = Short options now come before long options in a completion candidate list. * Symbolic links to non-existent files can now be completed. * Other fixes in command completion. * Fixed invalid memory access on parameter expansion failure in redirection. ---------------------------------------------------------------------- Yash 2.23 * Traps are no longer handled during completion to avoid messing up the display. * Fixed invalid memory access during completion. When the notify option is enabled, the shell was wrongly trying to notify the job status while executing a candidate generator function. * The "-o verbose" option is now disabled during completion to suppress the auto-loaded script being printed. * Fixed completion script for the "kill" built-in. ---------------------------------------------------------------------- Yash 2.22 + New "test" built-in operators: -G, -O, -N + Completion settings are now autoloaded from $YASH_COMPPATH. + New completion scripts for: alias, array, bindkey, break, cd, complete, continue, dirs, disown, echo, eval, exec, exit, fc, fg, getopts, hash, help, history, jobs, kill, ls, printf, pwd, read, return, set, suspend, test, trap, typeset, ulimit, umask, unalias, unset, and wait. * Fix a bug that was causing a signal received by a just-created subshell to be wrongly ignored. * Other bug fixes ---------------------------------------------------------------------- Yash 2.21 + Command line completion = In an interactive shell, the value of $LINENO is now reset to 1 every time a command is input and executed. * The "function" keyword was not recognized by "command -v". * Fixed handling of SIGINT so that the interactive shell properly gets back to normal after receiving SIGINT. * Input reading functions rewritten, including some bug fixes. ---------------------------------------------------------------------- Yash 2.20 + Function definition using the "function" keyword. = The "-nt" and "-ot" operators of the "test" built-in now consider a non-existent file older in favor of Korn shell. = [line-editing] some editing commands have been renamed: vi-change-all -> vi-change-line vi-yank-and-change-all -> vi-yank-all-change-line vi-append-end -> vi-append-to-eol * [line-editing] the clear-and-redraw-all command was broken. ---------------------------------------------------------------------- Yash 2.19 + The "ulimit" built-in is now available on FreeBSD. + In mail checking, the timestamp of the mail file is now compared by the nanosecond if possible. + [line-editing] new line-editing commands: oldest-history-bol, newest-history-bol, return-history-bol, prev-history-bol, next-history-bol, beginning-search-forward, beginning-search-backward = Faster filename pattern matching. = [line-editing] the "accept-line" command no longer accepts a failing history search result. = [line-editing] the following commands have been changed not to move the cursor to the beginning of the line: oldest-history, newest-history, return-history, prev-history, next-history The new commands whose names end with "-bol" provide the previous behaviors. * Fixed broken output of array assignment traces. * [line-editing] the "vi-edit-and-accept" command now handles the count. * [line-editing] fixed the cursor position after the search-again-forward/backward command in the emacs-like mode. ---------------------------------------------------------------------- Yash 2.18 + New operators for string comparison in the "test" built-in: ==, ===, !==, <, <=, >, >= + Operators "-nt" and "-ot" in the "test" built-in now compares the modification time by the nanosecond if possible. + '--default-directory' option for the "cd" and "pushd" built-in. + '--remove-duplicates' option for the "pushd" built-in. + The right prompt and the styler prompt. + '--le-alwaysrp' option. = The interpretation of escape sequences to change the font in $PS1 and $PS2 has been changed. = $PS3 no longer initialized. = Escape sequences are now interpreted in $PS4 as well as in $PS1 and $PS2. = The "echo" and "printf" built-ins now can print a null character. * [line-editing] $LINES and $COLUMNS were wrongly ignored. * [line-editing] fixed font color for some terminals. ---------------------------------------------------------------------- Yash 2.17 + '--le-visiblebell' option. + New operators for version comparison in the "test" built-in: -veq, -vne, -vgt, -vge, -vlt, -vle + [line-editing] "eof" command = The "typeset" built-in now prints only local variables when invoked without the -g option or operands. = The "typeset" built-in now prints function definitions in a pretty format. = When not in POSIXly-correct mode, commands in command substitu- tion are now parsed when the command containing the substitution is parsed. * Fixed the parse error on parameter expansion "${#}". * Fixed the "wait" built-in wrongly trying to wait for non-parent processes when invoked in a subshell. * [line-editing] vi-replace-char command was broken. * Many other bug fixes ---------------------------------------------------------------------- Yash 2.16 + '--curbg' and '--curstop' options. = '--curasync' option is now set by default. = Changed exit status of a while/until loop whose body is empty. = The "return" and "exit" built-ins now accepts an exit status of 256 or larger. = The "echo" built-in now interprets octal escapes only beginning with a backslash followed by a zero. * Fixed a syntax error of a special built-in invoked thru the "command" built-in causing the non-interactive shell to exit. * Fixed the exit status of the shell when the EXIT trap is set. * The '--allexport' option was wrongly ignored by the "read" and "getopts" built-ins. * Fixed segfaults and other errors in the "getopts" built-in. * [line-editing] Fixed the vi-replace-char command causing invalid memory access. * [line-editing] Fixed the emacs-just-one-space command not leaving space(s). ---------------------------------------------------------------------- Yash 2.15 + An interactive shell now can be interrupted by SIGINT. + Bracket expressions in pathname expansion are now fully supported (provided that libc's regex implementation is correct). = The "suspend" built-in now requires the -f option to suspend an interactive shell that is a session leader. = The shell no longer automatically sets the $YASH_LE_TIMEOUT variable. = A job-control shell now stops itself when invoked in the background. = A job-control shell no longer ignores SIGTTOU by default. = The '--nocaseglob' option no longer affects pattern matching in parameter expansions of the form "${var#xxx}", "${var%xxx}", etc. * Fixed pathname expansion on redirection target. * Couldn't set a signal handler to the default by the "trap" built-in if the signal was ignored on invocation of an inter- active shell. * Fixed accidental interruption of built-ins by signals. * Fixed parser so that a non-simple command is properly parsed after alias substitution. * Various bug fixes ---------------------------------------------------------------------- Yash 2.14 + The -l option for the "bindkey" built-in. + Negative array indices are now allowed. = $PWD is now set to "/" (rather than "/..") after "cd /..". = The "command" built-in with the -vb option now ignores shell keywords, aliases and functions. = Most of the built-ins now prints an error message and returns non-zero when they cannot print something to the standard output. = The "pwd" and "times" built-ins now fail when an operand is given. = The shell no longer exits when an assignment for a special built-in failed if not in POSIXly-correct mode. * "cd //" was failing if the current directory is "/". * Invoking the "bindkey" built-in in the yashrc file was causing an invalid memory access. * The "command" built-in with the -vb option was failing to find regular built-ins that are not in $PATH. * The "dirs" command was going into an infinite loop if given an argument. * The -c and -d options are wrongly rejected by the "ulimit" built-in. * The "fg" built-in now refuses more than one operands in POSIXly- correct mode, as described in the help. ---------------------------------------------------------------------- Yash 2.13 + "history" built-in + The -i option for the "eval", "break" and "continue" built-ins. + The value of the $COMMAND_NOT_FOUND_HANDLER variable is now executed when a command is not found. - '--autocd' option = The exit status is now one when the "return" built-in is used outside a function in an interactive shell. = Revised command search and execution. * The shell would not exit after the "exit" built-in twice in a row when you have $PROMPT_COMMAND set and you have stopped jobs. * The "notifyle" option not working with $PROMPT_COMMAND set. * [line-editing] Redoing was broken. * [line-editing] The command line was not redrawn after trap handling. * [line-editing] Fixed some bugs in the vi-edit-and-accept command. ---------------------------------------------------------------------- Yash 2.12 + Emacs-like line-editing. + "bindkey" built-in. + The $PROMPT_COMMAND variable now can be an array. + The value of the $YASH_AFTER_CD variable is now executed after the working directory was changed. = The "fg" and "bg" built-in now always sends SIGCONT to the continued job. = The "exit" built-in now warns about stopped jobs even when executed after the "fg", "bg", "disown" or "wait" built-in. * In vi-like line-editing, the wrong text was put after 30th yank. * In vi-like line-editing, the "s" command cannot be used if the cursor is at the beginning of line ---------------------------------------------------------------------- Yash 2.11 + Added the "--histspace" and "--le-noconvmeta" options. + Support for the $HISTRMDUP variable. + Support for the $YASH_LE_TIMEOUT variable. + The "kill" built-in with the "-l" option now accepts signal names as operands. = The "--le-convmeta" option now is a Boolean option. = The "$-" special parameter now includes the "l" flag if the shell is a login shell. * An empty case command "case i in (*) esac" now always returns the exit status of zero. * Quoted words were incorrectly expanded with backslashes when the "-f" option is set. * Fixed invalid memory access in the "v" command of vi-like line-editing. ---------------------------------------------------------------------- Yash 2.10 + History search in line-editing. = Empty lines are no longer stored in the history. = In the vi-like line-editing, "cw" and "cW" now work as in vi. * Setting the "notifyle" option caused a segfault if yash was configured with line-editing disabled. * In line-editing, undoing a change to a history entry did not restore the cursor position properly. * Some fixes for invalid memory access during line-editing. ---------------------------------------------------------------------- Yash 2.9 + Line-editing in the interactive mode. x Line-editing is not fully implemented. + Multiple instances of shell that use the same file for the history file now share the history. - The "history" built-in has been removed. = Now non-ASCII alphabets are allowed in variable names. = Now nested parameter expansions must be enclosed by braces. = The "help" built-in now prints an error message if the specified built-in is not found. * Fixed floating-point arithmetics in arithmetic expansions. * Fixed parser for arithmetic expansions that was incorrectly rejecting identifiers that start with underscores. * Fixed parser that had trouble parsing parameter expansions containing the hash sign like "${#=x}". * Fixed the help message for the "pwd" built-in. ---------------------------------------------------------------------- Yash 2.8 + Brace expansion with delta: {a..b..c} + The "command" built-in's -b and -B options now can be used with the -v and -V options. = Yash now conforms to POSIX.1-2008. . The "read" built-in now always removes trailing white-spaces from the input. . The results of tilde expansion are no longer subject to field splitting and pathname expansion. . The "pwd" built-in with the -P option no longer sets the $PWD variable. . "cd -L foo/.." is no more the same as "cd -L ." in that it is an error when the directory "foo" does not exist. . The "command" built-in's -p option now can be used with the -v and -V options. . In POSIXly-correct mode, all asynchronous commands now ignore SIGINT and SIGQUIT (even when job control is active). * When executing commands edited by the "fc" built-in, the $? variable was incorrectly assigned the exit status of the editor invoked by "fc". * Backslashes, commas and braces in $IFS were incorrectly ignored in field splitting. * Pathname expansion failed if we do not have the read permission for the specified directory even when we only need the search permission. * The signal mask of commands invoked by the shell now inherits that of the shell (except for trapped signals). * The "command" built-in now properly handles directories given as the commands when the "autocd" option is on. ---------------------------------------------------------------------- Yash 2.7 + Parameter expansion ${array[index]:=value} now allows assignment to an empty array element. + Here-string by the "<<<" operator. + New redirection operator ">>|" opens a pipe. - Loop pipes no longer supported. = The $IFS variable is always initialized to the default value when the shell is invoked. * The "echo" and "printf" built-ins now print an error message on failure. * A quoted period at the beginning of a filename was not properly matching during filename expansion. ---------------------------------------------------------------------- Yash 2.6 + Added the -q option to the fc built-in. + Compound commands may now contain no commands inside. * "alias -p" now prints commands with proper escape. * In POSIXly-correct mode, a semicolon followed by the identifier followed by "for" is now treated as an error. * Global aliases are now allowed after compound commands. * The "fg" and "wait" built-ins were causing invalid memory access when the "-o notify" option is enabled. ---------------------------------------------------------------------- Yash 2.5 = Redirection of FDs used by the shell is now error. * Some redirection syntax errors were overlooked. * Fixed the "sig.y" test failure. * When an "exec" command with redirections is enclosed in a brace with redirections, the redirections to the brace are now properly closed after execution. * Fixed parsing error of a comment after the identifier of a for statement. ---------------------------------------------------------------------- Yash 2.4 = The long option for the -p option of the "jobs" built-in has been changed from "--pid-only" to "--pgid-only". * Trap of SIGCHLD, SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU were wrongly set to "ignore" in some condition. * Signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU were mistakenly reset in some moments. * Fixed the exit status of the "wait" built-in returned when interrupted by a signal. * Fixed file access permission test * "command -V xxx/yyy" now prints an error message if "xxx/yyy" is not a valid command. ---------------------------------------------------------------------- Yash 2.3 = Now changing LC_CTYPE immediately takes effect if the shell is interactive and not in the POSIXly-correct mode. * Fixed parameter expansion: empty words are now expanded properly. * Fixed a race condition, which was causing some signals ignored. * Assignments using the typeset/readonly/export built-ins failed to update the shell's internal data. This caused the shell to keep using the old PATH after the PATH has been changed. ---------------------------------------------------------------------- Yash 2.2 + "help", "pushd", "popd" and "dirs" built-ins = The value of $PWD set by the "cd" built-in is fixed. It now has a correct value when changing to a relative path from the root directory. * Pathname expansion not properly performed for patterns including "." or "..". ---------------------------------------------------------------------- Yash 2.1 + Array variables + "array", "echo", "printf" and "test" built-ins + The -A option for the "read" built-in * The colon flag in a parameter expansion like "${FOO:-bar}" was ignored if the value of the parameter begins with a certain character. * The readonly attribute was ignored when an assignment occurs against a command invocation * Passing "=" as a name to the "unset" built-in incorrectly unset the positional parameters and caused a potential invalid memory access. * Field splitting on variable values that consist only of spaces produced wrong results. * Test of file access permission now uses the effective user/group IDs rather than the real user/group IDs. ---------------------------------------------------------------------- Yash 2.0 + "history" built-in + Command redirection * A POSIXly-correct non-interactive shell exits when a paticular error occurred on a special built-in according to POSIX. * Alias substitution routines were improved. * Other bug fixes ---------------------------------------------------------------------- Yash 2.0 beta2 + Command history + "type", "hash" and "fc" built-ins = If the "command" built-in with the -V option fails to find a command, an message is printed. * Invocation of an external command with an assignent to the $PATH variable caused an invalid memory access. * Single quote not parsed properly in some circumstances. * Other bug fixes ---------------------------------------------------------------------- Yash 2.0 beta1 + "read", "getopts" and "command" built-ins + '--autocd' and '--curasync' option + Mail check feature + The prompt command = The "readonly" and "export" built-ins now affects global variables by default. * The standard input is no longer buffered * The "typeset" built-in now allows any characters other than '=' for variable names. * The special parameter $? reflects the exit status of a command substitution in a variable assignment. * Many other bug fixes ---------------------------------------------------------------------- Yash 2.0 beta0 + "eval", "exec", ".", "times", "umask", "typeset", "export", "readonly", "unset", "shift" and "trap" built-ins + "wait" built-in now can be interrupted + Arithmetic expansions + Interactive shell now notifies the process killed by a signal - "/etc/profile" and "~/.profile" are no longer sourced on start-up * Fixed token delimitation in alias substitution * Fixed token delimitation on assignments without values * Many other bug fixes ---------------------------------------------------------------------- Yash 2.0 alpha2 + Initialization files such as "/etc/profile" and "~/.yashrc" are now sourced on start-up. + '--noprofile', '--norcfile' and '--rcfile' options + "pwd", "set", "exit", "return", "break", "continue", "jobs", "fg", "bg", "wait", "disown", "alias" and "unalias" built-ins * '--nocaseglob' was misinterpreted as '-c'. * It was not fully case-insensitive when '--nocaseglob' is on. * If job control is off, an interactive shell no longer prints changed status of jobs before prompt. = Error handling for unset parameters was improved. = The help message for 'yash --help' is now much briefer. ---------------------------------------------------------------------- Yash 2.0 alpha1 + New options implemented: -x, -h, -a = The default value of 'PS3' is not set in POSIXly-correct mode. + 'configure' accepts new '--no-undefined' option + ":", "true", "false", "cd" built-ins * Command hashtable is now cleared when PATH is assigned. * Assertion failure when a null character is input * Many other bug fixes ---------------------------------------------------------------------- Yash 2.0 alpha0 (the first release of version 2.x) x Arithmetic expansion is not implemented x Built-ins are not implemented at all