Yash 更新履歴

 凡例:
   +: 新機能
   -: 廃止機能
   =: 仕様変更
   *: バグ修正
   x: 新たに加わってしまったバグ

----------------------------------------------------------------------
Yash 2.50

  *  "-o notify" オプションが有効な時、"fg" 組込みコマンドで再開し終了
     したコマンドのステータスが不必要に出力されていた
  *  terminfo データベースで何らかのキーが空文字列に対応させられて
     いても行編集がフリーズしないようにした
  *  $LINENO を export したとき、外部コマンドに正しい値が渡される
     ようにした
  .  初期化スクリプト (yashrc) のサンプルを更新:
    +  "crontab" コマンドのラッパー関数を追加し、"crontab -e" と打とう
       としたときに誤って "crontab -r" でデータを消してしまうのを防ぐ
       ようにした
  .  補完スクリプトを更新:
    +  git-rebase: Git 2.24.0 までの新しいオプションに対応

----------------------------------------------------------------------
Yash 2.49

  +  --for-local オプション
  =  '--no-unset' オプションが有効な時、パラメータ展開だけでなく
     数式展開でも未定義の変数をエラーにするようにした
  *  位置パラメータが無いとき ""$*, ""$@, $*"", $@"" が空文字列に
     展開されず "$@" の様に扱われていた
  *  環境によっては $RANDOM 変数が 32768 以上の値に展開されることが
     あった
  *  "echo" 組込みコマンドで "\e" エスケープシーケンスが
     動いていなかった
  *  コマンドリストの最後がサブシェルの場合、サブシェルの中で元の
     シェルのジョブをサブシェルのジョブとして扱ってしまっていた
  *  ジョブが削除されるよりも前にプロセス ID が別のプロセスによって
     使い回された場合、新しいジョブの状態が正しく更新されないことが
     あった
  *  "typeset" 組込みコマンドで、コマンド名が予約語になっている
     単純コマンドを含む関数が再解析可能な書式で出力されていなかった
  .  補完スクリプトを更新:
    *  Git remote/fetch/pull/push コマンドの引数の補完でリモートの
       ブランチ名が正しく補完されていなかった。
    *  rsync コマンドの引数の補完でローカルのパス名が正しく補完されて
       いなかった。

----------------------------------------------------------------------
Yash 2.48

  +  二重ブラケットコマンド ([[ ... ]] 構文)
  +  "local" 組込みコマンド
  +  --le-predict-empty オプション
  +  プロンプトを $YASH_PS... 変数で定義できるようにした
  =  コマンドライン推定機能はコマンドを打ち始める前には動作しないのを
     デフォルトにした
  =  $PS1 の初期値を変更
  *  改行を含む数式展開の中で行番号が正しく数えられていなかった
  *  EXIT トラップ内のサブシェルの終了ステータスが誤って元のシェルの
     EXIT トラップ開始前の終了ステータスになっていた
  *  EXIT トラップ内のサブシェルで新たな EXIT トラップを設定しても
     無視されていた
  *  "typeset" 組込みコマンドで、複数のコマンドを含むコマンド置換を
     含むヒアドキュメントを含む関数を表示するときクラッシュしていた
  *  "typeset" 組込みコマンドで、ヒアドキュメントを含むプロセス置換
     (またはプロセスリダイレクト) を含む関数を表示するとき
     ヒアドキュメントの内容が表示されていなかった
  *  for ループの変数名トークンあるいはヒアドキュメント演算子の直後の
     トークンが、値が空白で始まるエイリアス置換の結果である場合に、
     誤って構文エラーになっていた
  *  for ループの "do" がエイリアス置換の対象になっていた
  *  for ループでエイリアス置換により行頭に ";" が来る場合にエラーに
     ならないことがあった
  .  POSIX 準拠モードで、POSIX で認められていない構文をエラーにした
    *  IO_NUMBER トークンをリダイレクトの対象にできないようにした
    *  予約語をリダイレクトの直後に置けないようにした
  .  初期化スクリプト (yashrc) のサンプルを更新:
    =  プロンプトを $YASH_PS... 変数で定義するようにした
    *  より多くの端末で動作するようウィンドウタイトルの設定方法を変更
    *  SIGTSTP, SIGTTIN, SIGTTOU でジョブが確実に停止するように
       シグナルの無視を明示的にキャンセルするようにした
  .  補完スクリプトを更新:
    *  git: 最新の Git でもファイルパスが正しく補完できるようにした
    +  git-grep: Git 2.19.1 までの新しいオプションに対応
    +  git-stash: Git 2.18.0 までの新しいオプションに対応
    +  ping: いくつかの環境で共通のオプションをサポート
    =  ssh, ssh-keygen: OpenSSH 7.7 までの新しいオプションに対応

----------------------------------------------------------------------
Yash 2.47

  +  --errreturn オプション
  =  -x オプションで出力する展開結果に含まれる空白等をクォートする
     ようにした。
  =  エイリアス・変数・キーバインドなどを出力する際の不要な引用符を
     減らした。
  *  "set" 組込みを無引数で実行したときローカル変数しか出力されて
     いなかった。
  *  "." 組込みでファイルを開けなかったとき位置パラメータが元に戻って
     いなかった
  *  -C オプションが有効な時の ">" リダイレクトの信頼性を改善した。
     以前のバージョンではリダイレクトを開く瞬間に他のプロセスがほぼ
     同時にファイルを置き換えた場合に -C オプションが無視されることが
     あった。
  .  初期化スクリプト (yashrc) のサンプルを更新:
    +  "direnv" を有効にするサンプルコード

----------------------------------------------------------------------
Yash 2.46

  =  グローバルエイリアスを複合コマンドの中を含む全ての箇所で置換
     するようにした。
  *  コマンドを常に行単位で実行するようにした。以前は、ファイルや標準
     入力からの読み込みでない場合、コマンドを全て構文解析した後に実行
     していた。
  *  空白で終わる値に置換されるエイリアスの直後では次の単語も
     エイリアス置換の対象となるが、このとき他のシェルと異なり一回しか
     置換が働いていなかった。
  *  空白で終わる値に置換されるエイリアスの直後でグローバルエイリアス
     が二回置換されていた。
  *  行連結があるとエイリアス置換が正しく繰り返されないことがあった。

----------------------------------------------------------------------
Yash 2.45

  +  行編集: 新しいコマンドの追加:
        complete-max-then-list, complete-max-then-next-candidate,
        complete-max-then-prev-candidate
  =  $PS1 および $PS2 のプロンプト内の \j 記法で表示されるジョブの
     個数は、既に終了しかつ終了したことが報告済であるジョブを含まない
     ようになった
  =  "jobs" 組込みを -n オプションで実行したとき、その場で出力されない
     終了済みジョブを消去しないようになった
  *  数式展開で、未定義の変数は正しく 0 に展開されるようになった
  *  "-o notify" オプションが有効でもシェルが SIGCHLD を受信するまで
     ジョブの状態が表示されていなかった
  .  デフォルトの初期化スクリプト (yashrc) を更新:
    +  history -c で履歴を完全削除する前に確認するようになった
  .  補完スクリプトを更新:
    +  carthage: --cache-builds オプション
    *  git: コミットハッシュの候補の数を 10 個までにした

----------------------------------------------------------------------
Yash 2.44

  +  コマンドライン推定と '--le-predict' オプション
  +  ~/.yashrc ファイルが見付からないときはデフォルトの初期化ファイル
     を読み込むようになった
  =  シェルの起動時、$YASH_LOADPATH は環境変数に存在しない場合のみ
     初期化するようになった
  *  補完スクリプトを修正: carthage, git, git-log, git-revert,
     git-submodule, ssh
  *  対話シェルで "." 組込みで読み込んだスクリプトから "return" で戻る
     ことができなかった
  *  "test" 組込みで単項 -o 演算子に "no" を付けたオプション名を指定
     すると結果が逆になっていた ("test -o noclobber" など)
  *  "wait" 組込みでオペランドが一つでも不正な時は必ず終了ステータス
     1 を返すようになった
  *  "in" を用いない for ループで、変数名の直後に改行を置いてその後に
     セミコロンで区切ってもエラーになっていなかった
  =  POSIX.1-2008 Technical Corrigendum 2 (2016) のサポート。
     (*) 印のものを除き、POSIX 準拠モードでの動作にのみ影響します。
    .  パイプラインで "!" の直後に "(" が来る場合は間に空白を入れる
       ことが必須になった
    .  "in" を用いない for ループで、変数名と "do" の間をセミコロンで
       区切れるようになった
    .  一つの単純コマンドで変数に代入しながら関数を実行した時、変数は
       関数実行終了後には残らないようになった (*)
    .  ジョブ制御が無効なときに非同期リストの標準入力を暗黙的に
       /dev/null にリダイレクトするようになった。以前は、POSIX 準拠
       モードにおいてはシェルが対話シェルであるときにリダイレクトして
       いた。
    .  非同期リストで SIGINT と SIGQUIT を自動的に無視するのはジョブ
       制御が無効な時だけになった
    .  "bindkey", "complete", "dirs", "disown", "hash", "help",
       "history", "popd", "pushd", "suspend", "type", "typeset",
       "ulimit" は準特殊組込みコマンドになった
    .  "break" および "continue" 組込みコマンドは構文的に取り囲んで
       いるループに対してのみ使用できるようになった (*)
    .  クォートされていない $* および $@ は $IFS が空文字列であっても
       単語分割された状態に展開するようになった (*)
    .  非対話シェルで代入エラーが起きたとき、コマンドの種類によらず
       シェルが終了するようになった (*)
    .  非対話シェルの特殊組込みコマンドでエラーが起きたとき、エラーの
       種類によらずシェルが終了するようになった

----------------------------------------------------------------------
Yash 2.43

  *  補完スクリプトを更新: carthage, cd, su

----------------------------------------------------------------------
Yash 2.42

  +  '--pipefail' オプション
  +  補完スクリプトを追加: carthage, dnf, git-rev-parse, tree, watch
  +  補完スクリプトを更新: cd, git, git-bisect, git-rev-list
     (Git 2.9.2).
  =  POSIX.1-2008 の 2013 年版に準拠
  =  閉じられていないヒアドキュメントを常にエラーにするようになった
  =  ジョブ制御有効なシェルはデフォルトで SIGTTIN と SIGTTOU を
     無視するように
  =  行編集を SIGINT で中断・リセットできるようになった
  =  "-o errexit" オプション有効時は、複合コマンドのリダイレクトエラー
     および for ならびに case コマンドでの展開エラーでもシェルを終了
     するようになった
  *  二重引用符内の `...` によるコマンド置換の中では、バックスラッシュ
     による二重引用符のエスケープはコマンド置換のコマンドが解釈される
     よりも前に解釈されるようにした

----------------------------------------------------------------------
Yash 2.41

  +  '--emptylastfield' オプション
  +  "shift" 組込みの新しいオプション: -A
  +  "shift" 組込みの引数に負数を指定できるようになった
  +  補完スクリプトを追加: git-notes, git-reflog, git-worktree
  =  コマンド名の無い単純コマンドで変数代入がエラーになった時、対話
     シェルでなければすぐにシェルが終了するようになった
  =  For ループが読み取り専用の変数に代入しようとしたときは 0 でない
     終了ステータスを返すようにした
  =  位置パラメータが無いとき """$@" を "$@""" と同様に空の単語に展開
     するようになった
  =  単語分割での空単語の扱いを POSIX の意図に合わせて変更 (分割結果が
     二単語以上で最後の単語が空単語の時、空単語を削除するようになった)
  =  "read" 組込みで最後の値を変数に代入するとき先頭に余分な空白を
     残さないようになった
  =  位置パラメータを連結するとき常に $IFS の最初の文字で区切るように
     なった (以前は $IFS が無視される場合があった)
  *  プロセスリダイレクトの閉じ忘れをエラーとして検出できていなかった
  *  "echo" 組込みで、$ECHO_STYLE 変数が GNU または ZSH のとき、
     単一のハイフンがオペランドとして出力されていなかった
  *  "typeset" 組込みで、引数で指定していない変数への一時代入がある
     場合にクラッシュしていた
  *  "typeset" 組込みで関数を出力する時 -r オプションが無視されていた
  *  "typeset" 組込みで -f と -g オプションの同時使用をエラーと
     するようにした
  *  "fg" および "bg" 組込みにオペランドを指定しなかった場合に
     ジョブ制御対象外のジョブを再開しないようにした
  *  連続した数値のブレース展開で整数が正しく解釈されないことがあった
  *  存在しない履歴番号を "fc" 組込みのオペランドに指定した場合に
     間違った範囲の履歴が処理されていた
  *  "fc" 組込みで "fc -s foo=bar n" 形式の構文が使えていなかった
  *  対話シェルがジョブの状態を報告するときジョブの終了ステータスの
     記録を消してしまっていた
  *  履歴をファイルから読み込む際起こり得る未定義動作を修正
  *  ${foo/bar/baz} 形式のパラメータ展開が POSIX 準拠モードで無効に
     なっていなかった
  *  引用符で囲まれた空の単語が単語分割で誤って削除されていた
  *  パラメータ展開のインデックスでバックスラッシュによるクォートが
     認識されていなかった

----------------------------------------------------------------------
Yash 2.40

  =  "unset" 組込みは "=" を含む変数名をエラーとせず無視するようにした
  =  POSIX 準拠モードでは、閉じられていないヒアドキュメントをエラーと
     するようにした
  *  メモリ確保時にメモリサイズがオーバーフローすると未定義動作に陥る
     可能性があったのを修正
  *  数式展開で浮動小数点数を代入する際にクラッシュしていた
  *  $PATH 内に相対パスがあるとコマンド検索時にメモリリークすることが
     あったのを修正
  *  ${foo##bar*} で削除される文字列が最長マッチになっていなかった
  *  ${foo%%*} が空文字列ではなく ${foo} に展開されてしまっていた
  *  "getopts" 組込みで数字がオプションとして使えなかった
  *  "command" 組込み経由で "." 組込みを実行し、スクリプトファイルが
     見付からない場合、シェルを終了しないようにした
  *  コマンド置換を含むが、コマンドの単語が空に展開される
     単純コマンドの終了ステータスがコマンド置換の終了ステータスに
     なっていなかった
  *  "exec" 組込みでスクリプトファイルが見付からないとききちんと
     終了ステータス 127 で終了するようにした
  *  コマンドの単語を展開する間、パイプが正しく接続されていなかった
  *  "fg" および "bg" 組込みがジョブ名の出力に失敗した時はエラーとする
     ようにした

----------------------------------------------------------------------
Yash 2.39

  +  "read" 組込みの新しいオプション: -e, -P, -p
  +  補完スクリプトを追加: passwd, valgrind
  -  configure の --disable-alias オプション
  =  "read" 組込みで行編集を有効にするには -e (--line-editing)
     オプションを必要とするようにした
  =  "trap" 組込みコマンドの出力が POSIX.1-2013 に準拠するように修正。
     コマンド置換内で実行した場合、サブシェルではなく元のシェルの
     トラップを出力する。
  =  "return" 組込みコマンドが何からリターンすることができるのかに
     ついてマニュアルの記述を明確化し、動作も変更。"eval" および "fc"
     組込みコマンドを "return" で中断できないようにした。
  *  数式展開で "/=" および "%=" 演算子でのゼロ除算でクラッシュ
  *  "complete" 組込みを -D オプション無しで呼んだ時クラッシュ
  *  $HOME が設定されていないときにルートディレクトリから
     初期化スクリプトを探して実行しようとしないように修正
  *  "read" 組込みを引数一つで呼び出したとき単語分割で先頭の IFS
     空白類が残ってしまっていた
  *  "read" 組込みの単語分割で、$IFS にバックスラッシュが含まれている
     場合にバックスラッシュが正しく処理されていなかった
  *  allexport オプションが有効な時でも "read" 組込みで配列に代入する
     ときエクスポートされていなかった
  *  "read" 組込みで行編集を使って入力を待ち受ける間にトラップが実行
     されてしまっていた
  *  "set" 組込みの引数の補完を修正
  *  "git-svn" の補完スクリプトを修正

----------------------------------------------------------------------
Yash 2.38

  +  補完スクリプトを追加: git-rm
  =  POSIX 準拠モードでは関数定義時にポータブルな関数名しか使えない
     ように変更
  *  単語分割で IFS 文字の直後のバックスラッシュが欠ける問題を修正
  *  POSIX 準拠モードでは for ループでポータブルな変数名しか使えない
     ように修正
  *  チルダ展開の後に来る単語の補完を修正
  *  Git の引数の補完で、移動・コピーしたファイルの名前の補完を修正
  *  git-commit で非管理ファイルを補完しないように修正

----------------------------------------------------------------------
Yash 2.37

  +  補完スクリプトを更新:
     git-checkout (Git 2.1.2), git-push (Git 2.0.1), git-submodule
     (Git 2.1.2)

----------------------------------------------------------------------
Yash 2.36

  +  補完スクリプトを追加: git-describe, tig
  +  補完スクリプトを更新: git-branch (Git 1.9.0)

----------------------------------------------------------------------
Yash 2.35

  +  '--traceall' オプション
  +  下記コマンドの補完スクリプトを追加:
     git-clean, git-grep, git-ls-remote, git-submodule,
     git-whatchanged
  +  下記コマンドの補完スクリプトを更新:
     git-cherry-pick, git-rebase (Git 1.8.1.4),
     ssh, ssh-add, ssh-keygen (OpenSSH 6.2)
  =  -e オプションが有効な時にシェルを終了させる条件を POSIX.1-2008
     の 2013 年版に合わせて変更
  =  "++" および "--" 演算子を POSIX 準拠モードで使えなくした
  =  $RANDOM 変数は環境変数を無視して常に乱数を返すようにした
  =  履歴ファイルの中にとても長い行があるときでもそれ以降の履歴を
     無視しないようにした
  =  非常に長いコマンドは履歴ファイルに保存しないようにした
  *  構文エラーメッセージを一部修正
  *  "git" と "ssh" と "rsync" の補完スクリプトを修正

----------------------------------------------------------------------
Yash 2.34

  +  "test" 組込みの演算子追加: =~, -o (単項)
  +  下記コマンドの補完スクリプトを追加:
     configure, git-name-rev, git-request-pull, make, rsync
  =  .yash_profile や .yashrc で構文エラーまたは展開エラーになった時
     対話シェルでなくてもシェルを終了させないようにした
  =  行編集で、上書きした文字をバックスペースで戻せるようになった
  =  行編集で、バックスペースの度に undo 履歴を保存しないようにした
  *  "git" の補完の修正

----------------------------------------------------------------------
Yash 2.33

  =  "help" 組込みの出力を内蔵の説明文に変更
  =  コマンドの構文エラーに関する一部のエラーメッセージを変更
  =  いくつかの組込みコマンドで構文エラーをより厳密にチェックする
     ようになった
  *  "set" 組込みの引数の構文が間違っているとき、POSIX の規定に従い
     シェルを終了させるように修正

----------------------------------------------------------------------
Yash 2.32

  +  Man page および HTML マニュアル (英語および日本語)
  =  "help" 組込みは man page の内容を出力するように変更
  *  "git" の補完の修正

----------------------------------------------------------------------
Yash 2.31

  +  拡張チルダ展開でディレクトリスタックのインデックスの補完に対応
  +  "complete" 組込みに --dirstack-index オプション追加
  +  "svn" バージョン 1.7 の補完に対応
  *  "git", "tar", "su" の補完の修正

----------------------------------------------------------------------
Yash 2.30

  *  リダイレクトのファイル名補完を修正
  +  下記コマンドの補完スクリプトを追加:
     svn, git, gitg, gitk, and gitx.
  *  補完スクリプトの細かい修正

----------------------------------------------------------------------
Yash 2.29

  +  エイリアスの値に改行を入れられるようになった
  *  空の配列を "typeset" 組込みで表示しようとしたときに不正メモリ
     アクセスしていた
  *  関数の中身が (...) の形式の複合コマンドとして定義されているとき
     コマンドを正しくサブシェルで実行するように
  *  行編集で、undo コマンドは編集中の履歴項目でのみ使えるようにした

----------------------------------------------------------------------
Yash 2.28

  =  対話シェルで、メールチェックはジョブ変化の報告の前に行うように
     なった
  *  数式展開で、評価すべからざる式を評価していることがあった
  *  "array" 組込みで、-d オプション使用時に正と負のインデックスを混ぜ
     ると誤った要素を削除していた
  *  実行するコマンドが見付からなかったとき誤って EXIT トラップを実行
     していた
  *  最後のコマンドがリダイレクトされていたとき EXIT トラップもそのリ
     ダイレクトで実行されてしまうことがあった
  *  配列の代入を伴う "exec" 組込みで配列の値を正しく export するよう
     にした
  *  ${#@} が配列の要素の長さの配列に正しく展開されていなかった
  *  整数列へのブレース展開で無限ループすることがあった
  *  "ssh" コマンドの補完で設定ファイルの読み込みを修正
  *  "ln", "mv" コマンドの補完で -T オプションに対応
  *  "trap" 組込みの補完で EXIT の補完に対応

----------------------------------------------------------------------
Yash 2.27

  *  細かいバグ修正
  +  下記コマンドの補完スクリプトを追加:
     awk, chsh, gawk, nawk, pgawk, scp, sftp, ssh-add, ssh-agent,
     ssh-keygen, su, sudo, sudoedit, and useradd.
  *  "set" 組込みと "tar" コマンドの補完スクリプトを修正

----------------------------------------------------------------------
Yash 2.26

  +  "return" 組込みの新しいオプション: -n (--no-return)
  =  英語のエラーメッセージを書き直した
  =  シェルオプションの名前の扱いを一般化した
    .  オプション名の大文字・小文字を区別しなくなった
    .  オプション名に含まれる英数字以外の文字を無視するようにした
    .  オプション名に "no" を付けることで有効・無効を逆転できるように
       した
  =  POSIX 準拠モードでは "case foo in (esac) bar; esac" をエラーに
     するようになった
  =  対話シェルでは noexec オプションを無視するようになった
  =  新着メール通知はメールボックスファイルが空のときは表示しないよう
     にした
  =  "printf %c ''" は "printf %c" と同様に何も出力しなくなった
  =  "complete" 組込みを -A または -R オプション付きで呼び出した場合、
     -f オプションで生成されるファイル名候補についてはディレクトリ名
     部分を除いてパターンマッチングを行うように
  *  '=' を含む関数名を typeset および unset 組込みに指定できるように
     した。(-f オプション指定時)
  *  SIGINT で中断された反復実行の終了ステータスを修正
  +  下記コマンドの補完スクリプトを追加:
     bsdtar, eview, evim, gex, gnutar, gtar, return, rgview, rgvim,
     rview, rvim, slogin, ssh, tar, and which.
  *  下記コマンドの補完スクリプトの修正:
     bash, chmod, dash, less, mksh, set, sh, and umask.

----------------------------------------------------------------------
Yash 2.25

  =  補完候補リストにおいてオプションは大文字小文字区別無くまとめる
     ようにした
  =  補完関数を実行中は $IFS 変数の値をデフォルトに戻すように
  +  下記コマンドの補完スクリプトを追加:
     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.
  *  下記コマンドの補完スクリプトの修正:
     cat, cd, chgrp, chmod, chown, cmp, comm, cp, crontab, cut, date,
     df, du, exec, ls, and set.

----------------------------------------------------------------------
Yash 2.24

  +  "." 組込みの新しいオプション: -L
  +  "command" 組込みの新しいオプション: -a, -f, -k
  -  "command" 組込みの廃止されたオプション: -B
  =  FreeBSD で全ての種類のシグナルが扱えるように configure を修正
  =  新しい補完メカニズム ("complete" 組込みの動作を変更。補完設定の
     $YASH_LOADPATH からの自動読み込み)
  +  下記コマンドの補完スクリプトを追加:
     basename, bg, cat, chgrp, chmod, chown, cmp, comm, command, cp,
     crontab, cut, date, df, du, export, popd, pushd, readonly, type,
     ".", and "[".
  =  下記コマンドの補完スクリプトを書き直し:
     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.
  -  "return" 組込みの補完スクリプトを削除
  =  補完候補リストで短いオプションが長いオプションの前に来るように
     並び順を変更
  *  存在しないファイルへのシンボリックリンクを正しく補完できるように
  *  補完機能のその他の修正
  *  リダイレクト内のパラメータ展開がエラーになったときに不正メモリ
     アクセスしていた

----------------------------------------------------------------------
Yash 2.23

  *  コマンドライン補完の途中ではトラップを実行しないようにした
     (予期せぬコマンドの実行により表示が乱れるのを防ぐため)
  *  "-o notify" オプションが有効な時、候補生成関数を使用した補完の
     最中にジョブの状態を出力しようとして不正メモリアクセスしていた
  *  "-o verbose" オプションが有効な時でも、補完設定の自動読み込み時は
     読み込んだ内容を出力しないようにした
  *  "kill" 組込みの補完スクリプトを修正

----------------------------------------------------------------------
Yash 2.22

  +  "test" 組込みの演算子追加: -G, -O, -N
  +  $YASH_COMPPATH からの補完設定の自動読み込み
  *  サブシェルが生成された直後にシグナルを受信したとき誤ってそれを
     無視していたのを修正
  *  その他のバグ修正
  +  下記コマンドの補完スクリプトを追加:
     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, wait.

----------------------------------------------------------------------
Yash 2.21

  +  行編集での補完機能
  =  対話シェルでは、それぞれのコマンドごとに $LINENO を 1 にリセット
     するようにした
  *  "function" キーワードが "command -v" で認識されていなかった
  *  対話シェルが SIGINT を受け取った後の復旧処理を修正
  *  シェルへの入力を扱う関数を書き直し (いくつかのバグ修正含む)

----------------------------------------------------------------------
Yash 2.20

  +  "function" キーワードによる関数の定義
  =  "test" 組込みの "-nt", "-ot" 演算子による比較では存在しない
     ファイルをより古いとみなすようになった (Korn shell に倣う)
  =  行編集: いくつかの編集コマンドの名前を変更
       vi-change-all -> vi-change-line
       vi-yank-and-change-all -> vi-yank-all-change-line
       vi-append-end -> vi-append-to-eol
  *  行編集: clear-and-redraw-all コマンドが正しく動いていなかった

----------------------------------------------------------------------
Yash 2.19

  +  FreeBSD でも "ulimit" 組込みが使えるようになった
  +  メールチェックで、可能ならナノ秒単位でメールファイルをチェック
     するようにした
  +  行編集: 新しいコマンドの追加:
        oldest-history-bol, newest-history-bol, return-history-bol,
        prev-history-bol, next-history-bol,
        beginning-search-forward, beginning-search-backward
  =  ファイル名パターンマッチングを高速化
  =  行編集: 履歴検索中の accept-line コマンドは、検索結果が見つから
     ないときは失敗するようになった
  =  行編集: 以下のコマンドはカーソルを行頭に移動しないようになった
        oldest-history, newest-history, return-history,
        prev-history, next-history
     カーソルを行頭に移動する古い挙動は、名前が "-bol" で終わる
     新しいコマンドによって得られる
  *  配列の代入のトレースの出力がおかしかったのを修正
  *  行編集: vi-edit-and-accept コマンドでカウントを指定できるように
  *  行編集: emacs モードでの search-again-forward/backward コマンドの
     後のカーソル位置を修正

----------------------------------------------------------------------
Yash 2.18

  +  "test" 組込み: 文字列比較演算子追加 (==, ===, !==, <, <=, >, >=)
  +  "test" 組込み: -nt, -ot 演算子で可能ならナノ秒単位でファイルの
     更新日時を比較するように
  +  "cd", "pushd" 組込みに --default-directory オプション追加
  +  "pushd" 組込みに --remove-duplicates オプション追加
  +  右プロンプトとスタイラープロンプト
  +  --le-alwaysrp オプション
  =  $PS1 と $PS2 のフォント変更用エスケープシーケンスの解釈を変更
  =  $PS3 をデフォルトで初期化しないように
  =  $PS4 でも $PS1/$PS2 と同様にエスケープシーケンスを解釈するように
  =  "echo"/"printf" 組込みでナル文字を出力できるように
  *  行編集: $LINES と $COLUMNS が無視される場合があった
  *  行編集: いくつかの端末での文字の色を修正

----------------------------------------------------------------------
Yash 2.17

  +  --le-visiblebell オプション
  +  "test" 組込み: バージョン比較演算子 (-veq, -vne, -vgt, -vge,
     -vlt, -vle)
  +  行編集: "eof" コマンド
  =  "typeset" 組込みをオペランドなしで実行したとき、-g オプションが
     なければローカル変数のみ表示するように
  =  "typeset" 組込みで関数を表示させるときの出力を整形
  =  POSIX 準拠モードでないときは、コマンド置換やコマンドリダイレクト
     の中のコマンドもあらかじめ先に解析しておくようになった
  *  パラメータ展開 "${#}" が構文エラーになっていた
  *  サブシェルで "wait" 組込みを実行すると誤って親プロセスでない
     プロセスを待とうとすることがあった
  *  行編集の vi-replace-char コマンドが壊れていた
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.16

  +  --curbg と --curstop オプション
  =  --curasync オプションはデフォルトでオンに
  =  空の while/until ループの終了ステータスを変更
  =  "return" および "exit" 組込みで 256 以上の終了ステータスを使える
     ように
  =  "echo" 組込みの八進数エスケープは \0 で始まるものしか解釈しない
     ように
  *  非対話シェルで "command" 組込みで特殊組込みを実行したとき構文
     エラーになるとシェルが終了してしまっていたのを修正。
  *  EXIT トラップ設定時のシェルの終了ステータスを修正
  *  "read" と "getopts" 組込みで --allexport オプションが利いて
     いなかった
  *  "getopts" 組込みのセグメンテーションフォルトその他エラー修正
  *  行編集の vi-replace-char コマンドが不正メモリアクセスを
     引き起こすことがあった
  *  行編集の emacs-just-one-space コマンドの結果がおかしかった

----------------------------------------------------------------------
Yash 2.15

  +  対話シェルのコマンドを SIGINT で中断できるように
  +  パス名展開でのブラケット記法に完全に対応した (libc の正規表現の
     実装に依存)
  =  シェルがセッションリーダーのとき "suspend" 組込みでサスペンドする
     には -f オプションを付けないといけないようにした
  =  $YASH_LE_TIMEOUT 変数をデフォルトで設定するのをやめた
  =  ジョブ制御有効なシェルがバックグラウンドで起動されたら停止する
     ように
  =  ジョブ制御有効なシェルはデフォルトでは SIGTTOU を無視しないように
  =  --nocaseglob がオンでも "${var#xxx}" などのパラメータ展開の
     マッチングでは大文字小文字を区別するように
  *  リダイレクトにおけるパス名展開を修正
  *  対話シェル起動時に無視されていたシグナルを "trap" 組込みで
     デフォルトのシグナルハンドラに変更できなかった
  *  組込みコマンドが誤ってシグナルに割り込まれるのを修正
  *  エイリアス置換の後に複合コマンドなどが正しく解析されるよう修正
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.14

  +  "bindkey" 組込みの -l オプション
  +  配列のインデックスに負数を指定できるようになった
  =  "cd /.." の後 $PWD は /.. ではなく / にするように
  =  "command -vb" はキーワード・エイリアス・関数を表示しないように
  =  ほとんどの組込みにおいて、標準出力への書き込みがエラーになったら
     メッセージを吐いて非 0 で終了するようにした
  =  "pwd", "times" 組込みに余計な引数を与えたときエラーにするように
  =  POSIX 準拠モードでないとき特殊組込みでの変数代入がエラーに
     なってもシェルを終了しないように
  *  作業ディレクトリが / のとき "cd //" できなかった
  *  yashrc の中で "bindkey" コマンドを使うと不正メモリアクセスが
     発生していた
  *  $PATH にない通常の組込みコマンドが "command -vb" で検索
     できなかった
  *  "dirs" 組込みに引数を与えたとき無限ループしていた
  *  "ulimit" 組込みが -c, -d オプションを受け付けていなかった
  *  POSIX 準拠モードでは "fg" 組込みは最大一つしか引数を受け付けない
     ように (ヘルプにはそう書いてあったが、実際にはそうなって
     いなかったのを修正)

----------------------------------------------------------------------
Yash 2.13

  +  "history" 組込み
  +  "eval", "break", "continue" 組込みの -i オプション
  +  コマンドが見つからないとき $COMMAND_NOT_FOUND_HANDLER 変数の値を
     実行するように
  -  --autocd オプション
  =  対話シェルで "return" 組込みが関数外で使われた時、終了ステータス
     1 を返すように
  =  コマンドの検索・実行を修正
  *  $PROMPT_COMMAND が設定されているとき、停止中のジョブがあると
     "exit" を二回やってもシェルを終了できなかった
  *  $PROMPT_COMMAND が設定されていると "notifyle" オプションが正しく
     動作していなかった
  *  行編集で redo がうまく動かなくなっていた
  *  行編集でトラップ処理のあとコマンドラインが再描画されていなかった
  *  行編集で vi-edit-and-accept コマンドについていくつかのバグ修正

----------------------------------------------------------------------
Yash 2.12

  +  Emacs 風行編集
  +  "bindkey" 組込み
  +  $PROMPT_COMMAND は配列でもよいように
  +  作業ディレクトリ変更後に $YASH_AFTER_CD を実行するように
  =  "fg", "bg" 組込みは常に SIGCONT を対象ジョブに送信するように
  =  "fg", "bg", "disown", "wait" 組込みの後で "exit" しようとしたとき
     も停止中のジョブに関する警告を出すように
  *  vi 風行編集で、30 回目の yank の後誤ったテキストが put されていた
  *  vi 風行編集で、カーソルが行頭にあると "s" コマンドが使えなかった

----------------------------------------------------------------------
Yash 2.11

  +  "--histspace", "--le-noconvmeta" オプション追加
  +  $HISTRMDUP 変数に対応
  +  $YASH_LE_TIMEOUT 変数に対応
  +  kill 組込みの -l オプションでシグナル名をオペランドとして
     渡せるように
  =  "--le-convmeta" オプションはオンオフ型オプションに
  =  ログインシェルでは "$-" 特殊パラメータに "l" フラグを含めるように
  *  空の case 文 "case i in (*) esac" は常に終了ステータス 0 を返す
     ように
  *  "-f" オプション有効時、クォートされた単語に余計なバックスラッシュ
     がくっついていた
  *  vi 風行編集の v コマンドで不正メモリアクセスしていたのを修正

----------------------------------------------------------------------
Yash 2.10

  +  行編集におけるコマンド履歴検索
  =  内容のない行は履歴に入れないように
  =  vi 風行編集で、"cw" と "cW" が実際の vi と同様に振る舞うように
  *  行編集なしで configure したとき "notifyle" オプションを設定しよう
     とするとセグフォが発生していた
  *  行編集で、編集した履歴をアンドゥしたときカーソル位置が
     正しくなかった
  *  行編集中の不正メモリアクセスのいくつかの修正

----------------------------------------------------------------------
Yash 2.9

  +  対話モードにおける行編集機能
  x  行編集の実装がまだ途中
  +  同じ履歴ファイルを使用する複数のシェルのインスタンス同士で
     履歴を共有するように
  -  "history" 組込みを廃止
  =  非 ASCII なアルファベットも変数名に使えるように
  =  入れ子のパラメータ展開は必ずブレースでくくらないといけないように
  =  "help" 組込みで、指定したコマンドが見つからなければ
     エラーを出すように
  *  数式展開における小数演算が正しくないことがあった
  *  数式展開で下線で始まる識別子がエラーになっていた
  *  "${#" で始まるパラメータ展開の解析を修正 (例: "${#=x}")
  *  "pwd" 組込みのヘルプメッセージを修正

----------------------------------------------------------------------
Yash 2.8

  +  変化量を指定できるブレース展開: {a..b..c}
  +  "command" 組込みで -B, -b オプションが -v, -V オプションと同時に
     使えるようになった
  =  POSIX.1-2008 に準拠
    .  "read" 組込みは入力の末尾の空白類を常に削除するように
    .  チルダ展開の結果を単語分割・パス名展開しないように
    .  "pwd -P" で $PWD 変数を更新しないように
    .  "cd -L foo/.." は、ディレクトリ "foo" が存在しないときエラーに
    .  "command" 組込みで -p オプションが -v, -V オプションと同時に
       使えるようになった
    .  POSIX 準拠モードでは、ジョブ制御中でも非同期コマンドはすべて
       SIGINT と SIGQUIT を無視するように
  *  fc 組込みで編集したコマンドを実行する際、$? 変数に fc で起動した
     エディタの終了ステータスが代入されてしまっていた
  *  $IFS の中にバックスラッシュ、コンマ、またはブレースを入れても
     正しく単語分割できなかった
  *  パス名展開において、ディレクトリの検索権限だけが必要な時でも、
     読み込み権限がなければ展開に失敗していた
  *  シェルが起動するコマンドのシグナルマスクは、シェルのマスクを
     受け継ぐようにした (トラップしたシグナルのマスクを除く)
  *  "autocd" オプション有効時 "command" 組込みにコマンドとして
     ディレクトリ名を与えたときの動作を修正

----------------------------------------------------------------------
Yash 2.7

  +  ${array[index]:=value} で配列要素への代入が可能に
  +  ヒアストリングのための新しいリダイレクト演算子 "<<<"
  +  パイプを開く新しいリダイレクト演算子 ">>|"
  -  ループパイプ機能廃止
  =  シェルの起動時に $IFS 変数を常にデフォルト値で初期化するように
  *  "echo" および "printf" 組込みでエラー時にメッセージを出すように
  *  ファイル名の先頭にあるクォートされたピリオドがファイル名展開で
     正しくマッチしていなかった

----------------------------------------------------------------------
Yash 2.6

  +  fc 組込みに -q オプション追加
  +  複合コマンドの内容は空でもよいように
  *  "alias -p" でハイフンを適切にエスケープするように
  *  POSIX 準拠モードの for 文で、識別子の直後のセミコロンをエラーに
     するように
  *  複合コマンドの直後でグローバルエイリアスが使えなかった
  *  "-o notify" オプションが有効な時 "fg" および "wait" 組込みが
     不正メモリアクセスを引き起こしていた

----------------------------------------------------------------------
Yash 2.5

  =  シェルが使用している FD のリダイレクトはエラーにするように
  *  いくつかのリダイレクト構文エラーを見逃していた
  *  "sig.y" テストが間違っていた
  *  リダイレクト付きの "exec" コマンドがリダイレクト付きの { } 括弧の
     中にある場合、括弧に対するリダイレクトが残ったままになっていた
  *  for 文の識別子の直後のコメントの解析エラーを修正

----------------------------------------------------------------------
Yash 2.4

  =  "jobs" 組込みの -p オプションに対応する長いオプションを
     --pid-only から --pgid-only に変更
  *  SIGCHLD, SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU のトラップが
     誤って無視されることがあった
  *  SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU のシグナルハンドラが
     誤って解除されている瞬間があった
  *  "wait" 組込みがシグナルに割り込まれたときの終了ステータスを修正
  *  ファイルアクセス権限の判定を修正
  *  "command -V xxx/yyy" で "xxx/yyy" が正しいコマンドでないとき
     エラーメッセージを出すように

----------------------------------------------------------------------
Yash 2.3

  =  対話的かつ非 POSIX 準拠モードで動作時、LC_CTYPE の変更が直ちに
     有効になるように
  *  パラメータ展開で空文字列を正しく展開できていなかった
  *  稀にシグナルが無視される競合状態を修正
  *  typeset/readonly/export 組込みで代入を行うとシェル内部のデータが
     正しく更新されていなかった。これにより、PATH を変更した後も古い
     PATH を使い続けてしまうなどの問題があった。

----------------------------------------------------------------------
Yash 2.2

  +  "help", "pushd", "popd", "dirs" 組込み
  =  ルートディレクトリから相対パスで "cd" するとき設定される $PWD
     の値を修正
  *  "." や ".." を含むファイル名展開が正しく動作していなかった

----------------------------------------------------------------------
Yash 2.1

  +  配列変数
  +  "array", "echo", "printf", "test" 組込み
  +  "read" 組込みの -A オプション
  *  "${FOO:-bar}" のようなパラメータ展開の中のコロンフラグが
     パラメータの値が特定の文字で始まる場合に無視されていた
  *  コマンドに対して代入するとき読み取り専用変数でも代入できて
     しまっていた
  *  "unset" 組込みに変数名として "=" を渡すと誤って位置パラメータを
     削除し、場合によっては不正なメモリアクセスを引き起こしていた。
  *  空白のみからなる変数の値のフィールド分割が誤っていた
  *  ファイルアクセス権限の確認は実ユーザ・グループ ID ではなく実効
     ユーザ・グループ ID に基づいて行うように

----------------------------------------------------------------------
Yash 2.0

  +  "history" 組込み
  +  コマンドリダイレクト
  *  POSIX 準拠モードの非対話シェルは特殊組込みの特定のエラーで終了
     するように
  *  エイリアス置換の処理を改良
  *  その他のバグ修正

----------------------------------------------------------------------
Yash 2.0 beta2

  +  コマンド履歴
  +  "type", "hash", "fc" 組込み
  =  "command" 組込みの -V オプションでコマンドがみつからなかった場合
     メッセージを出すように
  *  $PATH に代入しながら外部コマンドを呼出すと不正なメモリアクセスが
     発生していた。
  *  一重引用符が正しく解析されない場合があった。
  *  その他のバグ修正

----------------------------------------------------------------------
Yash 2.0 beta1

  +  "read", "getopts", "command" 組込み
  +  --autocd, --curasync オプション
  +  メールチェック機能
  +  プロンプトコマンド
  =  "readonly", "export" 組込みは常にグローバルに
  *  標準入力をバッファリングしないようにした
  *  "typeset" 組込みで '=' 以外の全ての文字を変数名として受け付ける
     ようにした
  *  特殊パラメータ $? が変数代入内で行われたコマンド置換の終了
     ステータスを反映するように
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.0 beta0

  +  "eval", "exec", ".", "times", "umask", "typeset", "export",
     "readonly", "unset", "shift", "trap" 組込み
  +  "wait" 組込みを中断できるように
  +  数式展開
  +  対話モードでプロセスがシグナルによって終了したらメッセージを
     表示するように
  -  起動時に "/etc/profile" と "~/.profile" は読み込まないように
  *  エイリアス置換でのトークン区切りの認識を修正
  *  値のない代入でのトークン区切りの認識を修正
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.0 alpha2

  +  起動時に /etc/profile や ~/.yashrc を読み込むように
  +  --noprofile, --norcfile, --rcfile オプション
  +  "pwd", "set", "exit", "return", "break", "continue", "jobs",
     "fg", "bg", "wait", "disown", "alias", "unalias" 組込み
  *  --nocaseglob が -c として解釈されていた
  *  --nocaseglob で大文字小文字の認識が不十分だった
  *  ジョブ制御がオフなら、対話シェルでもジョブの状態変化を
     プロンプト前に表示しないようにした
  =  --nounset 有効時、${i?xxx} はエラーとして xxx を返すように
  =  ヘルプの表示を簡潔に

----------------------------------------------------------------------
Yash 2.0 alpha1

  +  オプション追加: -x, -h, -a
  =  POSIX 準拠モードでは 'PS3' のデフォルト値を設定しないように
  +  'configure' に新しい '--no-undefined' オプション追加
  +  ":", "true", "false", "cd" 組込みコマンド
  *  PATH の値が変更されるときコマンド名ハッシュをクリアするように
  *  ナル文字が入力された時のアサーションエラー
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.0 alpha0 (2.x 版の最初のリリース)

  x  数式展開が未実装
  x  組込みコマンドが全く未実装
