Skip to content
SATO Mitsuhide edited this page Dec 23, 2025 · 126 revisions

Home


1.11.2 (2025/12/23)

  • Perfume更新
    • String::replace において、パターンマッチした部分の置き換え文字列にブロックを指定することにより、ブロックを実行した結果に置換するようになった。
    • Perfume のイントロダクション用ドキュメントとして、doc/intro.txt を追加した。
    • new で生成されるオブジェクトが、インスタンス変数 Self として自身のオブジェクトを保持するようになった。
    • list::get メソッドの追加。
    • Integer::get, Integer::len, Integer::string-base メソッドを追加。
    • Real::get, Real::len メソッドを追加。
    • Bool::get, Bool::len メソッドを追加。
    • String::get メソッドを追加。
    • String::truncate メソッドを追加。
    • parserで、"," マクロを左結合でチェーンできるようにした。
    • 正規表現文字列で、\ 文字がエスケープを表さなくなった。ただし、アポストロフィ文字の直前に現れた場合を除いて。
    • types.c で | var ... | バインドリストのリテラル表現に ";" が付かないようにした。
  • Pmacs更新
    • タスクの開始メッセージを *Console* バッファに表示するようになった。
    • F10キーを buffer-list コマンドにバインドした。
    • エディタコマンド decode-uquoted-encoding を追加した。テキスト中の \uXXXX をUnicodeに変換しバッファを更新する。
    • マウスクリックでリージョン選択をリセットしないようになった。
    • Textモードで PWiki リンクと文字列リテラルをハイライトするようになった。
    • Ctrl+Q(input-character-code)コマンドで、TABを直接入力可能になった。
    • gotoコマンドをAlg+gにバンドした。
    • エディタコマンド untabify を追加した。
    • 正規表現文字列の変更に伴い、Modeファイルの(特に文字列リテラルハイライト)正規表現を改めた。

1.11.1 (2024/08/15)

  • Perfume更新
    • RQuote リテラル内で、'\n' および '\r' が実際の制御コード(改行およびCR)を表すすようになった。
  • Pmacs更新
    • ステータス行のレイアウトを変更した。
    • Cモード、Javaモード、Prfmモードにおいて、文字列リテラルおよび正規表現文字列リテラルのシンタックスハイライトが正しくリテラルを認識できるようになった。
    • 対応括弧表示の処理方式を変更した。
    • いくつかのバグ修正。

1.11.0 (2024/07/14)

  • Perfume更新
    • Vector::insert! および Vector::delete! メソッドを追加した。
    • マニュアルを更新した。
  • Pmacs更新
    • 以下のエディタコマンドを追加した。
      • dired-open-next-window, dired-open-previous-window: diredモードで、他のウィンドウでファイルを開く
      • mouse-dired-click-next-window, mouse-dired-click-previous-window: diredモードで、他のウインドウでファイルを開く
      • buffer-list-open-next-window, buffer-list-open-previous-window: BListモードで、他のウインドウでバッファを開く
      • mouse-buffer-click-next-window, mouse-buffer-click-previous-window: BListモードで、マウスによる別ウインドでバッファを開く
      • all-window-scroll-down, all-window-scroll-up: 全ウィンドウをスクロールアップ/ダウンする
      • all-window-page-down, all-window-page-up: 全ウィンドウをページアップ/ダウンする
      • store-buffer, bind-stored-buffer: 現在のバッファ名を記憶する/記憶したバッファを開く
    • 以下のキーバインドの追加
      • (diredモード) o -> dired-open-next-window
      • (diredモード) O -> dired-open-previous-window
      • (diredモード) Ctrl+mouse 1 button -> mouse-dired-click-next-window
      • (diredモード) Alt+mouse 1 button -> mouse-dired-click-previous-window
      • (BListモード) o -> buffer-list-open-next-window
      • (BListモード) O -> buffer-list-open-previous-window
      • (BListモード) mouse-buffer-click-next-window
      • (BListモード) mouse-buffer-click-previous-window
      • Alt+mouse scroll dwon -> all-window-scroll-down
      • Alt+mouse scroll up -> all-window-scroll-up
    • Ctrl+Alt+mouse scroll down -> all-window-page-down
      • Ctrl+Alt+mouse scroll up -> all-window-page-up
      • Alt+m -> store-buffer
      • Alt+M -> bind-stored-buffer
    • バッファリストのヘルプ表示を変更した。
    • diredモードのファイル権限ビット表示をUnixの 'ls -l' 表示に合わせた。
    • 大きいファイルの編集時の高速化を行った。
    • Undo/Redo のバグを修正した。

1.10.0 (2024/06/26)

  • Perfume更新
    • エンコーディングに UTF-16LE, UTF-16BE およびこれにエラーを許容する UTF-16LE/F, UTF-16BE/F を追加した。
    • Cスタックの ErrStakOverflow を検知した際のメッセージを修正した。
    • 以下のメソッドを追加した。
      • File::seek 任意の位置にファイルオフセット位置を変更する。
      • File::getb ファイルからバイトストリームデータを読み込む。
      • File::putb ファイルにバイトストリームデータを書き込む。
    • マニュアルを更新した。
  • Pmacs更新
    • man コマンドにおいて、初期表示タイミングを変更した。
    • show-version コマンドを追加した。
    • pmacs-server がソケット初期化のエラーが発生した際にメッセージを表示するようになった。
    • top-of-buffer, bottom-of-buffer, select-region-all コマンドにて mark を行うようになった。
    • ミニバッファにて Ctrl+D(1文字削除)が使用できるようになった。
    • ファイルエンコーディングとして UTF-16LE および UTF-16BE が利用可能になった。
    • ファイルエンコーディング自動判定にて、UTF-16{LE|BE} の場合BOMも判断するようになった。
    • key-binding-list から全コマンド一覧部分を all-command-list コマンドとして独立させた。
    • Terminalモードで [→] および [↓] キーにてEOF位置まで移動しないようになった。
    • バグ修正
      • SMART_INDENT_CANCEL の際に \t をインデントとして受け付けないようにした。
      • バッファ名に '<', '>' が含まれた際、'(', ')' の代替文字に変換するようになった。
      • man コマンドのウィンドウレイアウトバグを修正した。

1.9.1 (2024/02/14)

  • Perfume更新
    • controlオブジェクトのタイプと値を取得する control-type? コマンドを追加。
  • Pmacs更新
    • Cスタイルの複数行コメント(/* ..... */) をシンタックスハイライトできるようになった。
    • PWikiモードで、[ [@URL]] 形式のリンクでブラウザを起動できるようになった。
    • マニュアルのフォントをゴチック体に変更した。
    • 画面描画時のちらつきを少なくした。

1.9.0 (2023/12/23)

  • Perfume更新
    • コマンドライン引数を DEFAULT_DIRENT_ENCODING(デフォルトは UTF-8)でデコードするようになった。
    • コルーチンのスタックトレースを取得する Coro::get-stacktrace を追加した。
    • wait コマンドに :noblock オプションを追加し、指定のプロセスIDが終了していない場合ブロックしないようになった。また、戻り値として、プロセスIDと終了コードのリストを返却するようになった。
    • ユーティリティコマンドとして、telnet および telnet-server を追加した。
    • 文字幅を調整するための Font Calibration Library を作成した。Pmacsで文字幅を計算する際に wcwidth (X/Open関数) の代わりに使用する。
      • perfume/misc/default.fcab ファイルは、Windows Terminal と PlemolJP フォントで調整したサンプルの補正ファイル。
    • 文字エンコードで文字列受信の際にデータ未達によりデコードエラーが発生したと考えられる状況の際に TE_BADENCODELESSLENGTH エラーを返すようになった。
      • このエラーを受け取った場合は、アプリケーションは追加でデータを受信した後再度文字のデコードを試みることができるようになった。
    • 文字のエンコード名の変更と追加
      • UTF-8F → UTF-8/F に変更。このエンコードでは、文字列デコードの際にエラーが発生した場合もデコードを続けることができる。エラーが発生した際、ダミー文字として u+2592 が表示される。
      • EUC-JP/F を新設。このエンコードでは、文字列デコードの際にエラーが発生した場合もデコードを続けることができる。
      • Shift-JIS/F を新設。このエンコードでは、文字列デコードの際にエラーが発生した場合もデコードを続けることができる。
    • 文字列のエンコード/デコードのメソッド化。
      • RAWエンコーディングで読み込んだ文字列を String::udecode メソッドでデコードできるようになった。
      • Unicodeにデコード済みの(通常の文字列)を String::uencode メソッドでエンコードできるようになった。
    • File::get で、RAW I/O モードを設定するため File::set-rawio メソッドを新設した。
      • RAW I/O モードに設定されたファイルは、システムコール read(2) を用いてファイルまたはソケットからデータを読み込む。このとき、特にソケットの場合に 0が返却された際の動作をアプリケーションで選択可能になる。
      • RAW I/O モードに設定された際は、文字列のデコードは行われず、RAW データ文字列が返される。String::udecode を用いてアプリケーションで文字のデコードを行う必要がある。
        • このデコードのとき、ソケットからのデータ未達により TE_BADENCODELESSLENGTH エラーが返されることがある。この場合は追加でデータを読み込み、再度文字のデコードを行うことができる。
    • copy ユーティリティが RAW I/O モードを使用するようになった。
  • Pmacs更新
    • ウィンドウステータス行にバッファモードとともにキーバインドモード(pmacs or emacs)を表示するようになった。
    • pmacs-server において、対象ファイルのオープンがエラーだった場合の終了ステータス '5' を追加した。
    • タスクでエラーが発生した場合、コルーチンからスタックトレース情報を取得し、*Console* バッファにログ出力するようになった。
    • terminal アプリのシェル環境変数 TERM に "dumb" を設定するようにした。
    • terminal アプリで簡単な開始メッセージを表示するようにした。
    • ミニウィンドウ中での入力中の Ctrl+G を ESC 押下送出にした。
    • 分割している全ウィンドウに対してカーソルを移動する以下のコマンド群を追加した。
      • all-window-scroll-up ← Ctrl+Shift+Alt+[↑]
      • all-window-scroll-down ← Ctrl+Shift+Alt+[↓]
      • all-window-scroll-right ← Ctrl+Shift+Alt+[→]
      • all-window-scroll-left ← Ctrl+Shift+Alt+[←]
      • all-window-page-down ← Ctrl+Shift+Alt+[PgDn]
      • all-window-page-up ← Ctrl+Shift+Alt+[PgUp]
      • all-window-top-of-buffer ← Ctrl+Shift+Alt+[HOME]
      • all-window-bottom-of-buffer ← Ctrl+Shift+Alt+[END]
    • 文字幅の計算に Font Calibration Library を使用するようになり、3文字幅以上の文字についても使用できるようになった。
      • fclib を使用するために、load-font-calib "フォント補正ファイルのパス”; とすることで機能を有効にする。
    • set-times コマンドが入力値をミニウィンドウに表示するようになった。
    • search-word-forward/search-word-backward コマンドを追加した。このコマンドではサーチ文字列を入力後に一番近くの検索語まで直接カーソルがジャンプする。
      • search-word-forward ← Alt+F
      • search-word-backward ← Alt+R
    • 従来の search-forward/search-backword コマンドは、バッファの行数がコンフィグ変数 SEARCH_WORD_THRESHOLD で指定された行数以上となった場合、search-word-* コマンドにフォワードされる。
    • バッファリスト上で "s" を押下することでバッファを直接保存できるようになった。
    • 新しいウィンドウ分割パターン(T字型3分割)ができるようになった。
      • split-tridivide[1234]-window ← Alt-F1, Alt-F2, Alt-F3, Alt-F4
    • ミニバッファ入力中の Ctrl+[DEL] が、入力バッファを全て消去するようになった。
    • *Terminal* バッファでバッファの終端まで移動 (Ctrl+Alt+[↓], Ctrl+[END]) の際、バッファの終端ではなくプロンプトの末尾に移動するようになった。
    • PWiki形式のマニュアルを作成した。
    • バグ修正
      • マクロ中でウィンドウを切り替えた際に切り替え先のウィンドウでマクロを実行するようにした。
      • マクロ実行中にミニバッファ入力が発生した際も最後までマクロが動作するようになった。

1.8.1 (2023/06/05)

  • Perfume更新
    • 等しくないを問い合わせる neq? コマンドを追加した(eq? の逆関数)。
    • String::repeat を pmacs から標準メソッドへ移動した。
    • サンプルプログラム hanoi を追加した。
    • fork-exec の際にリークしていた socket, accept, connect に対して FD_CLOEXEC を指定するようになった。
    • fork-exec に environ: オプションにより環境変数を渡せるようになった。
    • Makefile のCオプションに -gdwarf-4 フラグを追加した。これは、valgrind が clang14 の DWARF5 を正しく読み込めないためである。
    • valgrind の未初期化領域のワーニングを減らすため、GC_MALLOC の取得領域を完全にクリアするようにした。
    • プロセスおよびプロセスグループにシグナルを送信する kill/killpg コマンドを追加した。
    • File::gets における noblock が t の場合の挙動を変更し、完全にブロックしないようにした。
    • exec.prfm の修正
      • environ: オプションにより、環境変数を渡せるようになった。
      • pid-proc: オプションにより子プロセスのプロセスIDを取得できるようになった。
      • verbose: オプションにより内部状態を詳細に出力できるようになった。
      • add-event-queue で追加されたイベントの順に優先順位をもって入力を処理するようになった。
      • 入出力チャネルの select 待ち時間を 5msec に変更した。
  • Pmacs更新
    • 新機能
      • ウィンドウ上で動作するシェルターミナルである terminal コマンドと Term モードを追加した。
      • シェルターミナルに対して入力情報を送信する以下のコマンドを追加した。
        • terminal-enter-command Enter キーにより、バッファ内文字列をシェルへの入力として送信
        • terminal-send-eof -> Ctrl+D を送信
        • terminal-send-break -> Ctrl+C を送信
        • terminal-send-quit -> Ctrl+\ を送信
        • terminal-send-suspend -> Ctrl+Z を送信
        • Term モードのキー Prefix として Ctrl+\ 新設した
    • Interp モードのワードハイライトを変更した。
    • buffer-list のヘッダガイダンス出力に get-keybind-string を使用することで、実際のキーバインドを表示するようになった。
    • MODERN テーマにおける inactive なウィンドウの色を灰色または黒に変更した。
    • pmacs-server のメッセージを修正した(git-* → pmacs-server-*)。
    • man コマンドの実装を pipe から Task に変更した。
    • モード内で Prefix キーを定義する add-prefix 命令を追加した。
    • OSタイプを config 変数 OSTYPE に設定するようになった。
    • Window::resize-window がアトミックな処理となった。
    • シェルターミナルのシェルに対して環境変数を設定する TERMINAL_ENV config 変数を追加した。
    • カーソル関連の修正
      • curs-keyin に与える BLINK_FACT の単位を msec に変更した。これにより、カーソルブリンクの周期が一定となった。
      • キーリピート判定の最大繰り返し回数を 8 → 4 に変更した。
    • タスク関連の修正
      • タスクへのディスパッチの際に割り込みタイマーの初期化を行うようになった。
      • suspend/resumeの際の、タスクのステータスの保存/復帰の誤りを修正した。
      • Task ローカル変数の setter/getter として set-client/get-client を追加した。

1.8.0 (2023/05/01)

  • Perfume更新
    • 新しい Stream、NullStream クラスを追加した。gets/puts において何もしないStreamオブジェクトを生成する。
    • ?? および ??? において引数がブロックでかつ評価結果がシンボルだった場合、真として処理するよう修正した。
    • exec ユーティリティの err-to-stdout: パラメータを廃止、新たに err-to: (ストリームオブジェクト) 引数を追加した。
    • pipe ユーティリティの out: パラメータに NullStream オブジェクトを指定可能とした。
  • Pmacs更新
    • key-binding-list の表示フォーマットを変更。
      • All commands section でキー名を表示するようになった。
      • All commands section キーバインドシーケンスを表示するようになった。
      • "." で始まるコマンド名はリストに表示しないようになった。
    • Task system の更新。
      • SysCall update-screen を追加。Taskよりバッファが更新したことを通知する時に使用する。
      • *Console* バッファは更新が発生した場合再描画されるようになった。
      • 各Taskletが SysCall update-screen を使うように修正した。
      • Task/background/key-input の発生状況により最適な再描画の判断を行うようになった。
    • マウスを使用できるになった。
      • マウスイベントの許可・不許可
        • mouse-on によりマウスイベントの処理を開始する。$HOME/.pmacs/startup.prfm に mouse-on を記述することで自動的にマウス機能をオンにできる。
        • mouse-off によりマウスイベントの処理を終了する。
      • マウスイベントをキーイベントに変換するドライバの追加。
      • pmacs-default.key で、以下の機能を定義。
        • mouse-1 (press): ウィンドウ選択、カーソル移動または、PWiki/man リンクジャンプ。
        • mouse-1 (release): リージョン選択。
        • CTRL+mouse-1 (release): リージョン追加選択。
        • mouse-2 (press): PWiki/man リンクバック。
        • mouse-3 (release): リージョンコピー。
        • CTRL+mouse-3 (release): リージョンカットまたはペースト。
        • mouse-4 (press): 上行スクロール。
        • CTRL+mouse-4 (press): 上ページスクロール。
        • mouse-5 (press): 下行スクロール。
        • CTRL+mouse-5 (press): 下ページスクロール。
        • (※) mouse-1: 左ボタン、mouse-2: 中央ボタン、mouse-3: 右ボタン、mouse-4: ホイール上、mouse-5: ホイール下
      • マウスホイールの移動行数については、MOUSE_WHEEL_COUNT で設定可能(デフォルトは3)。
    • バッファリストのバッファ名部分をマウスクリッカブルなリンクに変更した。
    • diredのファイル名部分をマウスクリッカブルなリンクに変更した。
    • list-config のフォーマットを変更した。
    • Alt+c を list-config、Alt+s を set-config にキーバインドした。
    • paste-buffer でリージョン選択が逆順であった場合のバグを修正した。
    • man コマンドでエラーを出力しないようにした。

1.7.2 (2023/03/21)

  • Perfume更新
    • expand の変数展開において、出力フォーマットを指定できるようになった。 ex) "${num:%05d}" expand
    • GMP用GCラッパ関数のバグ修正を行った。
  • Pmacs更新
    • 繰り返しコマンド、キーボードマクロコマンドを追加した。
      • ALT+u 次のコマンドの繰り返し数を指定する。
      • ALT+. 直前のコマンドを繰り返す。
      • ALT+1 キーボードマクロの新規記録を開始する。
      • ALT+2 キーボードマクロの追加記録を開始する。
      • ALT+0 キーボードマクロの記録を終了する。
      • ALT+, キーボードマクロを実行する。
    • リージョンの始点と終点を入れ替える exchange-region コマンドを追加した(ALT+x)。
    • キープレフィックス機能を追加した。
      • KEYBIND_MODE に pmacs を設定すると従来のキーバインドとなり、emacs を設定すると Emacs に似たキーバインドとなる。
      • PMACS_MENU を <t> に設定することにより、pmacs モードの時に ESC キーを押すことによりメニューが表示され、メニュー選択による操作が可能となった。
      • ステータス行に現在のキーバインドモード(pmacs or emacs)を表示するようになった。
    • キーのディスクリプションを記述したファイルを pmacs-default.key から pmacs-keydesc.prfm へと分離した。
    • key-binding-list のレイアウトを変更した。また、コマンドにアサインされているキーバインドを表示するようになった。
    • ステータス行のレイアウトを若干修正した。
    • PWikiリンクに [ [?command] ] と表記することにより、ミニバッファに対応するキーバインドが表示されるようになった。
    • replace-buffer-with-query コマンドを追加した。インタラクティブに置換の有無を指定できるようになった。
    • search-next コマンドと search-previous コマンドを実行した際、サーチキーワードにマッチした部分を反転表示するようになった。反転表示は数秒後に元に戻る。
    • Tasklet デモプログラム star.prfm、cd-test.prfm を追加した。
    • TaskManager のディスパッチアルゴリズムを変更した。
    • タスクディスパッチに関連するパラメータを変更した。

1.7.1 (2023/02/15 あ~ちゃん誕生日バージョン)

  • Perfume更新
    • exec ユーティリティに子プロセスの待ち合わせを行わない :background オプションを追加した。
    • make install にて、pmacsコマンド、pmacs-clientコマンドをbinディレクトリにインストールするようになった。
    • connect コマンドに :noblock オプションを追加し、connect をブロックせずに行えるようになった。connect が成功した否かは、新たに追加した connect? コマンドにて非同期に行えるようになった。
  • Pmacs更新
    • Taskシステム
      • タスク開始初期値をタスク生成時の時刻に設定するようになった。
      • タスク終了時のプロシージャを設定できるようになった。
      • タスクに標準入出力を設定する Task::set-stdin, set-stdout, set-stderr が追加された。
      • 子タスクが親タスクの標準入出力を引き継ぐようになった。
      • ソケットを accept する SysCall::accept を追加した。
      • ソケット/ファイル/ストリームから入力する SysCall::gets を追加した。
      • 同名のタスク名サフィックスを 1 から開始するように変更した。
      • サーバに接続する SysCall::connect を追加した。
    • grepコマンドをタスク化した。これにより非同期での実行が可能になった。
    • compileコマンドをタスク化した。これにより非同期での実行が可能になった。また、コンパイルコマンドをCOMPILE_COMMANDとしてconfig化した。
    • key-binding-list のリスト順を変更した。
    • カレントカーソル位置から後ろのワードを削除する delete-word-after-current-point を追加した。
    • Window::key-event-loop をリファクタリングした。
    • pmacs-server Tasklet と、外部から起動中の Pmacs 内でファイル編集を開始するための pmacs-client を追加した。
    • BufferBase に、unregist された時に実行するプロシージャを設定する set-unregist-proc/get-unregist-proc を追加した。
    • スマートインデントを行うか否かを ALWAYS_SMART_INDENT にて指定できるようになった。
    • ターミナルからのペースト中はスマートインデントが実行されないようになった。
    • TABを入力された際スマートインデントが起動するが、カーソルが行末にあり、最終文字が空白であった場合はソフトタブを入力するようになった。
    • ラベル行のスマートインデントのバグを修正した。
    • ターミナルからのペーストを実行されている間は画面表示を更新しないようになった。
    • デフォルトキーバインドファイル名を pmacs-default.key に変更した。
    • パッケージの install.sh にて、$HOME/.pmacs テンプレートファイルをインストールするようになった。
    • (テスト中) git-* コマンドを pmacs-client を起動するようにし、コミットメッセージを Pmacs 内部でできるようにした。
    • (テスト中) git-status, git-diff コマンドを追加した。

1.7.0 (2022/12/23 かしゆか誕生日バージョン)

  • Perfume更新
    • コルーチンライブラリとして coru を使用するようになった。
    • coru の AARCH64 用スタック交換操作を実装したことにより ARM64 を正式にサポートするようになった。
    • 割込みを表す INTR データ型を追加した。
    • 割込みデータ型を判断する intr? コマンドを追加した。
    • eval 内でコルーチン実行時にインターバルタイマー割込みを受信した際、コルーチンを pause し、戻り値として INTR を返却するようになった。
    • Object::instance? メソッドを追加した。
    • Stream クラスのリファクタリングを実施した。
    • Stream クラスにメソッド追加: clear-eof, ready-write?, gets-nowait
    • グローバル変数 BASE_PATH にインストールパスを設定するようになった。
    • Fileクラス、Streamクラスのオブジェクトにファイルの振る舞いを示すための set-tag/get-tag メソッドを追加。
    • 空のブロック {} では false コマンドを実行するようになった。
    • String::{bool,list,dict,vector} メソッドを追加。それぞれ、文字列をパースした結果のオブジェクトを返却する。
  • Pmacs更新
    • 垂直バーの区切り文字("|")を設定で変更可能とした。
    • dired において、ディレクトリとレギュラーファイルその他を分けるようにした。
    • dired モードにて 'p' キーによりファイルパスをコピーするようになり、他のバッファへのペーストが出来るようになった。
    • Pmacs内で時分割によるタスクの実行機能を実装した。
      • TaskManager クラスにより Task クラスのオブジェクトを時分割実行する。
      • SysCall クラス にて、Task クラス内からのリクエストを実行。
      • システムコールは今のところ以下の通り:
        • gets/puts メッセージキューの読み書き
        • apply-editor によるエディタ機能へのアクセス
        • new-task による新規タスク生成、wait/wait-any による待ち合わせ
        • sleep による有限時間の停止
      • ts コマンドによるタスク表示、suspend/resume コマンドによるタスクの一時停止、再開、zap(s) コマンドによるタスクの強制終了
      • タスクの実行状況を表示する *Console* バッファと Console モードを追加。
    • $HOME/.pmacs/startup.prfm ファイルによる初期スクリプトの実行が可能になった。
    • pmacs.conf による設定値をデータベース化した。
      • コンフィグ値は list-config エディタコマンドで一覧できる。
      • コンフィグ値は set-config エディタコマンドで変更できる。

1.6.3 (2022/10/25)

  • Perfume更新
    • mkdir、rmdir ユーティリティを追加した。
    • file コマンドに、rstat サブコマンドを追加した。シンボリックリンクの場合、実ファイルのステータスを返却する。
    • macOS のサポート(実装途中) from https://github.com/shugo さん。
  • Pmacs更新
    • dired モードに以下の機能を追加した。
      • ファイルの削除 (キーバインド "d")
      • ファイルのリネーム (キーバインド "r")
      • ファイルのマーク (キーバインド " ")
      • マークしたファイルの一括削除 (キーバインド "X")
      • マークの一括解除 (キーバインド "c")
      • dired バッファウィンドウの更新 (キーバインド "u")
      • 画面を2分割してファイルを開く (キーバインド "o")
      • ファイルモードの変更 (キーバインド "m")
      • ディレクトリの削除 (キーバインド "D")
      • ディレクトリの作成 (キーバインド "M")
    • 指定された編集対象のファイルについて、以下のチェックを追加した。このためのユーティリティ関数(get-path-condition)を追加した。
      • スペシャルファイル(キャラクタデバイス、ブロックデバイス、パイプ、ソケット)は編集不可。
      • 権限のないファイル、ディレクトリは編集不可。
      • 新規ファイルでディレクトリが書き込み不可の場合は編集不可。
      • シンボリックリンクについては、リンク先を再帰的に辿り上記ルールを適用。
      • シンボリックリンクのネストが20を超える場合は編集不可。
    • ミニウィンドウ入力時の ↑、↓、PgUp、PgDn キーバインドを変更した。
    • キーリピートアクセラレーションのパラメータを変更した。
    • ウィンドウのステータス行の表示を変更した。画面更新時にちらつきを減らすため、できるだけ固定長になるように調整した。
    • ファイル補完 (file-completion) において、補完対象文字列の直前の文字がタブだった場合補完ができなかったバグを修正した。
    • オートインデント時に、直前の空白文字だけで構成される行にインデント幅が影響を受けるバグを修正した。

1.6.2 (2022/10/06)

  • Pmacs更新
    • ファイルのエンコーディングを自動で判断するようにした。
    • 現在のバッファのエンコーディングを変更する set-buffer-encoding コマンドを追加した。
    • ステータス行の表示を見直して、フルパスの表示を削除した。
    • ステータス行に、現在のカーソル位置の文字コードもしくは、EOF、EOL の表示を追加した。
    • 入力するファイルをレギュラーファイルに限定し、それ以外のファイル(キャラクタ、ブロック、パイプ、ソケットなど)を指定した場合はエラーを表示するようにした。
    • smart-newline, smart-indent, smart-dedent 実行時にフリーカーソルモードがオフになるようにした。
    • 前の行が空行だったときに、さらに上の非空行を探すようになり、smart-newline, smart-indent の動きを改善した。
    • キーリピートアクセラレーションのアルゴリズムを改善した。
    • キーバインドを変更した。
      • smooth-scroll-up-anothor-window のキーバインドを CTRL+ALT+[↑] → SHIFT+ALT+[↑]
      • smooth-scroll-down-anothor-window のキーバインドを CTRL+ALT+[↓] → SHIFT+ALT+[↓]
    • key-binding-list において、エディタコマンドにコマンドの要約を表示するようにした。
    • key-binding-list の表示から不要な項目を削除し、簡素にした。
    • mini ウィンドウ入力のルーチン(プロンプト入力、y/n 入力、yes/no 入力、ファイル名補完入力)を共通化した。
    • エディタコマンドの実装を、コマンドのカテゴリごとのファイルに分割した。
    • ファイル補完ウィンドウのバッファ名を *Directory* から *Completion* に変更し、かつ、バッファリストの上に上がらないようにした。
    • trace-editor-command の出力ファイル名を pmacs-trace.txt に変更した。

1.6.1 (2022/09/10)

  • Pmacs更新
    • カラーデータベースに文字の属性(太字、斜体、下線、強調、低輝度、反転など)を指定できるようになった。
    • 文字の属性を利用した新しいテーマ、MODERN と MODERN-DARK を追加した。
    • ~/.pmacs/theme.conf ファイルに設定を書くことで、テーマごとにカラーデータベースのカスタマイズが可能になった。
    • 対応括弧の表示で、対応する両方の文字をハイライトするようになった。
    • バッファ個別にハードタブの幅を指定する set-buffer-tab-width コマンドを追加した。
    • デフォルトキーバインドが以下のように変更になった。
      • (グローバル) Alt+b → buffer-list-completion
      • (BList) Ctrl+B → 削除
      • (グローバル) Ctrl+D → delete-character
      • (グローバル) Alt+d → key-binding-list
    • 正規表現パターンを少し修正した。
    • キー入力で Backspace が 0x7f を返す際のキーマップと新しいキーシンボル KEY_DEL を追加した。
    • key-binding-list のグループ表示を変更し、キーシンボルの項目を追加した。
  • Perfume更新
    • Integer と Real の比較メソッドの真の場合の戻り値を <t> に修正した。今までは、非 <nil> であった。

1.6.0 (2022/07/27)

  • Pmacs更新
    • grep-current-word の grep オプションを '-rnHe' から '-nHe' へ変更し、カレントディレクト内のみの検索となるようにした。
    • ファイルを指定して起動した際のバッファのオーダーをファイルの指定順にした。
    • LIGHT テーマのミニウィンドウのインアクティブ時の色を反転した。
    • LIGHT テーマの垂直バーの色を変更した。

1.5.29 (2022/06/22)

  • Perfume更新
    • setupスクリプト中のエラーを検出できるようにした。
  • Pmacs更新
    • 対応括弧ハイライトの色を変更した。
    • *Buffer List* とウィンドウステータス行の表示レイアウトを変更し、Unixテキスト、DOSテキストの判別をしやすくした。
    • Shift+F5 でカーソル位置のワードの即時 grep を行う grep-curent-word コマンドを追加した。
    • Shift+f6 でカーソル位置のワードの即時 man を行う man-current-word コマンドを追加した。
    • smart-move-forward/smart-move-backward/select-region-word において、"-" 文字も文字の一部として判別するようにした。
    • ミニバッファ入力において Ctrl+V によるコピーバッファの貼り付けを行えるようにした。
    • ALT+w をカーソル位置のワードをリージョンに設定するコマンド select-region-word にバインドした。また、当該コマンドのワード選択精度を向上した。
    • ファイル出力のタイプを UNIX とする set-nodos コマンド、DOS タイプとする set-dos コマンドを追加した。
    • ALT+space について、start-region コマンドにキーバインドした。Android 等、CTRL+space がシステムで使用されているようなシステムではALT+spaceが使用可能となった。
    • 複数行のリージョンが設定された状態での paste-buffer のバグを修正した。
    • マニュアルをレイアウトのみ若干修正した。

1.5.28 (2022/06/15)

  • Perfume更新
    • Makefile の CLANGコンパイラ判定を修正した。
    • パッケージインストールドキュメントを更新した。
    • String::append! および String::. において、nullを含む文字列も concat 可能とした。
    • シンタックスエラー時のミスプリントを修正した。
    • pipe コマンドを初期処理にてロードするようにした。
    • シグナルハンドラのスタックサイズを変更。
    • String::split にてゼロサイズ文字列の場合にリストが空になるバグを修正した。
  • Pmacs更新
    • ミニバッファでのファイル名補完にて、"/" のあとに "~" を入力することにより、ホームディレクトリに戻るようにした。
    • kill-buffer において、確認を求めるようにした。
    • エディタコマンドの grep、man、compile コマンドのプロセス起動方法を pipe に変更した。
    • ミニバッファ入力から Ctrl+Shift+Alt+DEL キーで強制的に抜けれるようにした。
    • PINTERP (コルーチン) をデレゲートオブジェクトに変更した。
    • 起動時のロゴファイル表示、初期引数ファイルロード方法をバックグラウンド方式から直接実行方式に変更した。
    • Pmacs終了時のコードを整備した。
    • バッファ内でのファイル補完機能を実装した。
      • *Scratch* バッファでは、TABキーによりカレントディレクトリのファイル名を補完する。
      • 上記以外の通常ファイルのバッファでは、Alt+i キーによりコンテントディレクトリのファイル名を補完する。
    • ミニバッファ中で Ctrl+DEL キーにて現在のカーソル位置から行末まで削除する機能を追加。

1.5.27 (2022/06/07)

  • Perfume更新
    • cell.c において、nullデータを含むセルをコピー、コンペアできるようにした。
    • 上記に伴い println/print の実装を変更した。
    • select、accept において EINTER 受信時にリトライする処理を追加した。
    • File::putsにおいてnullデータを含む文字列を出力するようにした。
    • copy ユーティリティを追加した。
    • man ユーティリティにおいてプロセス環境変数の指定を追加した。
    • 文字列比較 (String::{=,>,>=,<,<=,!=}) において、nullを含む文字列も正しく比較できるようにした。
    • ファイル、coro ファイナライザの呼び出し関数を GC_register_finalizer_ignore_self から GC_register_finalizer_no_order に変更した。BoehmGC のワーニングメッセージ出力対策として。
    • 自プロセスidを取得する pid コマンドを追加した。
    • pipe にて pipe ブロックにて現在のローカル変数をブロックのクロージャ変数として与えるようになった。
    • exec ユーティリティにおいて、エラー出力も標準出力へ送る :err-to-stdout スイッチを追加した。
    • sysinfo ユーティリティに自プロセスidの出力を追加した。
    • make build-pkg において、パッケージ内にコピーするライブラリを共有ライブラリのみにした。
  • Pmacs更新
    • ファイルエンコーダーの指定(set-encoding) にRAWを指定できるようにした。
    • grep-next、grep-prev において相対パス表記の際にバッファ名が増殖するバグを修正した。

1.5.26 (2022/06/02)

  • Perfume更新
    • 連想リストより値を検索しリストを返す List::assoc および、値を返す List::assoc-value を追加した。
    • exec.prfm に、サブプロセス側の入出力エンコーディングを指定する proc-enc: パラメータを追加した。
    • make の際、システムに CLANG がインストールされていればこれを使うようにした。
    • パッケージ版の tar ball より libncursesw 共有ライブラリを含めないようにした。
  • Pmacs更新
    • pmacs.conf に、フリーカーソル機能を有効にする FREECURSOR_ENABLE 変数を追加した。デフォルトは <t>。
    • *Scratch* バッファに改行を含むデータが出力された場合、改行コードごとに分割して出力するようにした。

1.5.25 (2022/05/23)

  • Perfume更新
    • ファイルからの入力時、noblock が設定されていれば LF 文字が無い場合でもその時点で読み込んだデータをアプリケーションに返すようになった。その際は、今回追加されたファイルのインジケータ項目 early-exit に <t> が設定される。
    • ファイルのプロパティに読み込む最大文字数を指定する readbuffer-max が追加された。このプロパティを指定するために、set-readbuffer-max メソッドが追加された。0を指定すると、従来通り LF 文字が入力されるまでアプリケーションには戻らない。このプロパティに非負の値を指定すると、この文字数が入力された場合 LF が入力されなくてもアプリケーションにデータが返される。この場合も、今回追加されたファイルのインジケータ項目 early-exit に <t> が設定される。
    • fork-exec コマンド、exec.prfm ユーティリティに :pty オプションが追加された。:pty オプションを指定すると、サブプロセスの標準入出力、エラー出力は仮想ttyに接続される。
    • PollingManager.prfm において、指定されたキューが ready である間、そのチャネルのブロックを実行するようになった。
    • exec.prfm において入力チャネルが詰まる問題を解決した。

1.5.24 (2022/05/05)

  • Pmacs更新
    • カーソル位置にある括弧に対応する括弧をハイライトする機能を実装。
    • kill-buffer したときに次に表示するバッファの選択方法を変更。
    • DARK テーマの色を調整した。
    • カーソルがEOF位置にあったときに smart-move-forward コマンドの動作がおかしかったのを修正。

1.5.23 (2022/04/19)

  • Perfume更新
    • サイズ 0 のファイルを load すると Exception が発生するバグを修正。
    • LAZY_CALL を行わないようにする make のオプションを追加。通常は "no"。
  • Pmacs更新
    • ユーザによるカスタマイズの仕組みを実装した。カスタマイズの方法は Pmacsカスタマイズ に説明しました。
    • モード選択の仕組みを変更し、ユーザカスタマイズファイルからもモードの指定を可能にした。
    • show-message のバグを修正。

1.5.22 (2022/04/15)

  • Pmacs更新
    • バッファを補完機能付きバッファ名入力で切り替える buffer-list-completion エディタコマンドを追加。
    • BList モードのキーバインドに CTRL+B → buffer-list-completion を追加。
    • Interp バッファのキーワードハイライトを修正。
    • ミニバッファのバックグラウンド色を修正。

1.5.21 (2022/04/01)

  • Perfume更新
    • File::set-omit-cr を File::set-ignore-cr に変更、プロパティ値も同様に File::stat の omit-cr を ignore-cr に変更。
    • standard-io-command-templ.prfm に対してファイル入力エンコーディングを指定するグローバル変数 STDIO_FILE_ENCODING を新設。
  • Pmacs更新
    • config 変数に TOP_OF_STATUS_BAR を追加。<t>に設定することで、ステータスバーを編集ウインドウの上部に表示する。
    • internal-stat コマンドを作成。デバッグ用に *Scratch* バッファにインタプリタ内部情報を表示する。Ctrl+Alt+F12 にバインド。
    • kill-interp 実行時(Ctrl+K in *Scratch* バッファ)に stdin/stdout/stderr を強制的に生成するようにした。
    • *Buffer List* のバッファ名表示を、一番長いバッファ名に合わせて可変にした。
    • open-file で *Directory* がリークするのを直した。

1.5.20 (2022/03/14)

  • Pmacs更新
    • grepコマンドの初期ディレクトリパスの末尾に "/" を追加した。
    • デフォルトのカーソルブリンクの速度を早くした。

1.5.19 (2022/03/10)

  • Pmacs更新
    • デフォルトのタブ幅を変更する set-tab-width コマンドを追加。

1.5.18 (2022/02/28)

  • Pmacs更新
    • ウィンドウのステータス行および、*Buffer List* 中のDOSタイプインジケータ表示の表示位置を変更した。
    • ファイルをバッファに読み込んだ時に文字コードのデコード処理に失敗したときにメッセージを表示するようにした。
    • ディレクトリエディタを開いたときに、表示を更新するようにした。
    • Scratchバッファの初期表示テキストを少し変更した。

1.5.17 (2022/02/18)

  • Perfume更新
    • Shift-JIS、EUC-JP エンコーダーでもUTF-8Fと同様にデーコード行とエラーインジケータを返すようにした。
  • Pmacs更新
    • カレントウィンドウを閉じて他のウィンドウをフルスクリーンにする dismiss-current-window エディタコマンドを追加。
    • Shift+F01 に dismiss-current-window をバインド。
    • LIGHTテーマのプロテクトされたバッファのステータス行の色を変更。

1.5.16 (2022/02/16)

  • Perfume更新
    • UTF-8F エンコーダーが壊れたUTF-8ファイルを読んだときに、読んできた行とエラーの両方を返すようにした。
    • エンコーダーがUTF-8エラーを上げてきたとき、File::stat で 'encode-error' でエラーの発生を判断できるようになった。
  • Pmacs更新
    • set-encoding コマンドを追加。バッファのファイルエンコーディングを指定してファイルを再読み込みする。指定できるエンコーディングは、UTF-8F、EUC-JP、Shift-JIS の三種類。
    • ALT_e を set-encoding にキーバインドした。
    • ファイルステータス行にファイルエンコーディングのインジケータを追加 (U/E/S のいずれかを表示)。
    • *Buffer List* にファイルエンコーディングのインジケータを追加 (U/E/S のいずれかを表示)。
    • 壊れた UTF-8 ファイルを読んだときに、ファイルをプロテクトモードに設定するようにした。
    • EditBuffer に set-encoding のための修正を行った。

1.5.15 (2022/02/15 あ~ちゃん誕生日バージョン)

  • Perfume更新
    • omit-cr <t> のとき、File::gets で読み込んだ行の中に \r が含まれていた場合、直後が \n でなければ \r を文字として返却値に含む。
  • Pmacs更新
    • キーバインド CTRL_G → goto コマンドを新規に設定。

1.5.14 (2022/02/14)

  • Perfume更新
    • 壊れた(UTF-8のシーケンスが間違っている)UTF-8ファイルを読み込むためのエンコーディング "UTF-8F" を追加。壊れた文字部分は u+2592 に置き換えられ表示される。
    • File オブジェクトに omit-cr 属性と include-cr 属性を追加。File::set-omit-cr <t> に設定したファイルを読んだ場合、DOS形式のテキストの場合 u+0d が削除されて読み込まれる。またこのようなテキストの時、include-cr が <t> となる。
    • exec.prfm コマンドで、ファイルを omit-cr <t> に設定するようにした。
  • Pmacs更新
    • コンフィグ変数に DEFAULT_EDIT_ENCODING を新設し、ファイルを読み込むエンコーダを指定できるようにした。規定値は、壊れた UTF-8 ファイルを読める UTF-8F としている。
    • コンフィグ変数に FILE_OMIT_CR を新設し、ファイルを読み込む際のDOS/UNIX形式を指定できるようにした。open-file、read-file でファイルを読む際の File::set-omit-cr を設定できる。規定値は <t> としており、DOS形式のテキストファイルも自動で読めるようにしている。
    • ウィンドウのバッファステータス行に、DOS形式のテキストの場合インジケータ "D" を表示するようになった。
    • バッファリストにDOS形式のテキストの場合インジケータ "D" を表示するようになった。
    • バッファのファイルがDOS形式のテキストの場合、保存形式もDOS形式となる。

1.5.13 (2022/02/13)

  • Perfume更新
    • fmt コマンドに "%[n]w" インジケータを追加([n]は表示文字幅)。マルチバイト文字が含まれる文字列の表示の際、文字の表示上の幅数でフォーマットを指定可能なインジケータ。
    • set-locale コマンドを追加。LC_ALL に対してロケールを設定するコマンド。
  • pmacs更新
    • *Directory* バッファや *Buffer List* でのバッファ名、ファイル名の表示に "%w" インジケータを使用することで、マルチバイト文字が含まれる際のフォーマットのずれを修正。

1.5.12 (2022/02/03)

  • Perfume更新
    • プリミティブ型のラッパークラスを生成する部分を若干高速化した。
  • pmacs 更新
    • curs-keyin の引数にカーソルブリンクの速度パラメータを追加した。
    • カーソルブリンクの速度を設定する変数 BLINK_FACT を追加した。
    • インタプリタ割込み間隔時間の調整 125msec → 50msec
    • curs-keyin タイムアウト時間の調整 50msec → 20msec
    • *Grep* バッファの初期 ContentPath を設定。
    • EditBuffer の初期 ContentPath 設定に誤りがあり、正しいパスが取得できないバグを修正。
    • 入力関連の設定値をチューニング(INPUT_TIMEOUT, BLINK_FACTk, KEY_REPEAT_ACCEL_DELAY, KEY_REPEAT_ACCEL_MAXLINE, BLINK_FACT)

1.5.11 (2021/12/23 かしゆか誕生日バージョン)

  • Perfume更新
    • コルーチン終了時にCのスタックを自動的に開放するようになった。
    • コルーチン呼び出しの際に親インタプリタを再設定するようにした。コルーチンを生成した時と異なるインタプリタから呼び出されても正しく動くようになった。
    • UNIXのfindに似たfindユーティリティを追加した。
  • Pmacs 更新
    • ウィンドウの垂直バーの位置をデフォルトで右に移動した。
    • インタプリタプロンプトの色を目立つ配色に変更した。
    • エディタコマンド dired-open で、バッファのパスが設定されていない場合には、カレントディレクトリのファイルを開くようにした。
    • バッファリスト(Ctrl+B) のリスト表示で、新しいバッファの順にショートカットキー(0~9)を表示するようにした。
    • バッファリストでショートカットキー(0~9)を押すことによりバッファを開けるようになった。
    • バッファリストで "d" を押すことでバッファを削除できるようになった。

1.5.10 (2021/11/11)

  • Pmacs 更新
    • mini windows にて、メッセージ表示色、エラー表示色、入力色について各々変更できるようになった。
    • 端末サイズが25x80より小さいときに開始時のロゴ表示がエラーとなるバグを修正した。

1.5.9 (2021/09/20 のっち誕生日バージョン)

  • Pmacs 更新
    • 後続の入力データがある場合、画面の更新を行わないようにした。これによってターミナルへのペーストの処理が早くなった。
    • カーソルがeofを超えたときにアンドゥバッファに間違ったデータが設定されるバグを修正。
    • mini-inputモードのときに画面がリサイズされた場合、mini-inputモードを抜けるようにした。
    • mini-windowがアクティブになった際の色を新しく定義した。
    • Pmacsの *Scratch* バッファで関数のトレースを行う ptrace コマンドの追加。
    • smart-move-forward, smart-move-backward で、括弧('(', '{', '[', ')', '}', ']')に出会った際にそこでカーソルを止めるようにした。
    • smart-move-backward のバグを修正。
    • *Scratch* バッファの $stdout, $stderr 出力順を変更した。
    • ファイルの保存時に、他のプロセスによりファイルが更新されていた場合、警告・確認を行うようにした。
    • ディレクトリエディタ(dired)の機能とモードを追加した。ディレクトリエディタによりファイルシステムのブラウジングができるようになった。関連するエディタコマンドは dired-* となり、ディレクトリエディタモードのキーバインドにより実行されます。
    • open-file コマンド、view-file コマンドでディレクトリを指定した場合、ディレクトリエディタを起動するよになった。
    • *Scratch* バッファで open-file を行ったときにカレントディレクトリを開くようになった。
    • grep コマンドが起動されたとき、そのバッファのディレクトリを指定するようになった。
    • テーマの色設定のためのファイルを theme-color.prfm から pmacs-theme.prfm に変更した。
    • manバッファのバッファ名を変更した。
    • pinterp でコマンド出力がされた場合に最終行がウィンドウのボトムにフィットしないようにした。
  • Perfume 更新
    • スタックトレース情報が誤っていたのを修正。
    • スタックトレース情報のコピー処理を削除。

1.5.8 (2021/08/08)

  • Pmacs 更新
    • search-next/search-previous において、直前のサーチモード(Text/Regex)の値により正しい検索ロジックを実行するようになった。
    • 画面をウィンドウ分割した際にウィンドウの境界位置を変更できるようになった。
      • ALT+h → 分割位置を左へ
      • ALT+l → 分割位置を右へ
      • ALT+j → 分割位置を下へ
      • ALT+k → 分割位置を上へ
      • ALT+o → 分割位置を中央へリセット
    • pmacs.conf の BLINK パラメータを <t> に変更。
    • バグ修正
      • EditBuffer::get-buffer-line が <nil> を返した際のバグ修正。
      • ALT+space をキーマップに追加(ターミナルによっては先取りされてエディタでは使用できないかもしれない)。

1.5.7 (2021/07/08)

  • Perfume 更新
    • 広域変数に、Perfumeをビルドした日付を格納するBUILD変数を追加した。
    • sysinfo, pinterp ユーティリティにてBUILD変数を表示するようになった。
  • Pmacs 更新
    • ALT+英数記号キー のキーマップを追加。以下のキーシンボルが返却される。詳細は pmacs.keymap ファイルを参照。
      • ALT+"a" → シンボル ALT_a
      • ALT+"A" → シンボル ALT_A
      • ALT+"!" → シンボル ALT_exclamation
      • ...
    • エディタコマンドの追加。
      • show-keycode ... 入力された生のキーコード、(もしあれば)キーマップ、バインドコマンドを表示する。
      • next-buffer-another-window, previous-buffer-another-window ... 画面分割されているときに、他のウィンドウのバッファを切り替える。

1.5.6 (2021/06/19)

  • Perfume 更新
    • String::=~ に :text オプションを追加。このオプションを指定することにより、正規表現ではなく、指定したテキストそのままでマッチさせることができるようになった。
    • regex により素数を判定するサンプルプログラム prime-regex.prfm を追加。1~65535 までの文字一覧を表示する show-all-character.prfm ユーティリティを追加。
  • Pmacs 更新
    • バッファをkillした後に選択されるバッファの順序を変更し、より新しいバッファを開くようになった。
    • Ctrl+F/Ctrl+R での検索で、正規表現での検索に加えてテキストそのままでマッチができるようになった。TextモードとRegexモードは、サーチの中で Ctrl+Tで切替可能。また、Textモードに関しては文字のキャピタライズを無視するようにした。
    • grep エディタコマンドで、初期値に -r フラグを追加し、再帰的に検索するようにした。
    • ファイルオープン時のファイル指定で入力ファイル名とのマッチの方法を変更し、正規表現を使用しなくなった。今までは正規表現文字列を指定することで想定しないファイル名を入力することが出来てしまっていた。
    • 文字コードに対する文字幅の計算にCのライブラリ関数であるwcwidth(3)を使用するようにした。また、不正な文字コードについては、"�" を、合成用文字については "␣" を表示する。
    • show-font エディタコマンドにより、指定された行中の "␣" と表示されたフォントを見ることができる。

1.5.5 (2021/06/10)

  • Pmacs 更新
    • バッファを削除(Ctrl+K)した後に選択されるバッファ順をバッファオーダーの新しい順にした。
    • Undoした際にアンドゥバッファが空であればno-modifyを設定するようにした。こうすることで、開いたばかりのバッファについて編集後すぐに編集を取り消した場合、その後の操作(終了やバッファの削除)に影響を与えにくくなった。
    • curs-render-line 中で不正なUnicode文字(>0x200000)が現れた場合に異常終了することを直した。(そのような状況はCtrl+\で簡単に作れた)
    • input-character-code で受け入れるコードポイント値を >0 ~ <0x200000 とした。
    • PWikiドキュメントのリンクが"/"で始まる場合、絶対パスでコンテンツを開くようにした。
    • エディタ上の文字の表示幅について、コードポイントが 0x10ff 以上の文字を2文字幅とした。
    • grepコマンドにおいて、実行後、元のカレントディレクトリを復旧するようにした。また、grep-next、grep-previous において、Grep バッファの CWD 行を常に参照するようにした。
    • Scratch バッファの初期表示メッセージを変更した。
    • exit コマンド時に編集されたバッファがなかった場合にエディタの動作に影響を与えないようにした。
    • クイックスタートリファレンスを追加した。
    • curs-keyin において blink: オプションを追加した。このオプションが<nil>の場合、システムのブリンクに従い、<t>の場合、Pmacsによるブリンクが行われる。pmacs.confのBLINK変数でで設定できる。
    • ビジブルベルが有効な端末で、エラー時に画面をフラッシュするようになった。

1.5.4 (2021/05/26)

  • Perfume 更新
    • awkユーティリティで、$n 変数の中に前の行の値が残るバグを修正($1~$9は自動で空文字列を設定するように)した。
    • atomic コマンドのネストに対応した。
  • Pmacs 更新
    • set-line-limit に値 "auto" を指定可能に。そのときのウィンドウの幅に合わせて長い行を改行する。また、デフォルトを "auto"に変更。
    • バッファサイズが短くなった時のリージョンハイライトが行を超えて表示されるバグを修正。
    • pasteコマンドのときリージョンが選択されていればそのリージョンがコピーバッファの内容に置き換えられるように修正。
    • カーソルをキーリピートで移動時のカーソルのフリッカーを低減した。
    • execute-editor-command/trace-editor-command で空文字列を入力されたときにはコマンドリストを作成しないよう修正。
    • Manモードに 'j' (smooth-scroll-down) / 'k' (smooth-scroll-up) をバインド。
    • キーボードアクセラレーションのパラメータ変数をチューニング。
    • manコマンドでリージョンが設定されていた場合はそのリージョンをトピックとしてmanを実行するようになった。
    • カラーDBにデフォルトで 8色(fg)/8色(bg) の組み合わせを定義。シンボルは 'fg-color-name'.'bg-color-name' となる。
    • smart-indent で、前の行の行末が ':' だった際にインデントを行うようにした。

1.5.3 (2021/04/09)

  • Perfume 更新
    • 行末が \+\r だった場合のパース処理を修正。
  • Pmacs 更新
    • goto コマンドで mark を実行するようになった。
    • grep コマンドでリージョンを検索文字列の初期値として表示するようになった。
    • buffer-list がバッファの使用によるバッファのタイムスタンプでソートされるようになった。
    • refresh-screen がスクリーン全体を再構成するようになった。
    • Java モードを追加した。
    • Ctrl+F12 によるソースコードのリージョン選択で、カーソル位置がパラグラフ内の任意の位置で可能になった。
    • バッファがプロテクモードのとき、ステータス行の色を変更できるようにした。
    • 新規エディタコマンド:
      • cursor-up-with-region リージョン選択開始と同時にカーソルを上に移動(Shift+Ctrl+UP)
      • cursor-down-with-region リージョン選択開始と同時にカーソルを下に移動(Shift+Ctrl+DOWN)
      • cursor-right-with-region リージョン選択開始と同時にカーソルを右に移動(Shift+Ctrl+RIGHT)
      • cursor-left-with-region リージョン選択開始と同時にカーソルを左に移動(Shift+Ctrl+LEFT)
    • テーマ LIGHT のカラーを変更した。
    • バグ修正:
      • execute-editor-command, trace-editor-command のコマンド名補完を修正した。

1.5.2 (2021/03/12)

  • Pmacs 更新
    • 次/前の検索結果へ移動する search-next, search-previous
    • 前に行を追加する insert-newline
    • バッファのプロテクトを変更する set-protect, set-noprotect
    • PWiki ハイパードキュメントシステムの追加:
      • PWiki モードの追加
      • 次の/前のPWikiリンクへ移動 pwiki-next-link, pwiki-previous-link
      • PWiki リンクを開く pwiki-click-link
      • 前のPWikiドキュメントに戻る pwiki-link-back
    • ステータス行にバッファのプロテクトモード表示
    • インタプリタで長い行をスプリットする変数 INTERP_LIMIT_LEN と set-line-limit
    • UNIX man を表示するシステム:
      • Man モードの追加
      • manを表示するコマンド man
      • See also 形式のリンクを表示する man-click-link
      • 次の/前の See alsoリンクへ移動する man-next-link, man-previous-link
      • 前の man ドキュメントへ戻る man-link-back
    • make をバッファ内で起動する compile コマンド
    • プロテクトバッファではASCII文字もエディタコマンドにバインド可能に
    • 上下矢印キーなどでカーソルの移動が加速する
    • smart-indent や replace-* など行単位で置換を行うための undo/redo インターフェース
    • help コマンドによりドキュメント表示(ドキュメントは作成途中)
    • ファイルをプロテクトモードでオープンする view-file
    • サブプロセスとしてシェルやgitを起動する shell, git-*
    • バッファにファイルを挿入する read-file
    • インクリメンタルサーチが Ctrl+F(前方向)、Ctrl+R(後方向) で検索可能に
    • 起動時のロゴ表示変更
  • Perfume 更新
    • file mkdir のメッセージ修正
    • man ユーティリティコマンドの追加
    • strerror がUTF-8エンコードされた文字列を返すことがあるため、これに対応
    • manテキストを適切に編集する curs-col
    • curs-keyin で連続したキーリピートを検出可能に
    • RQuote も行末の '\' で改行表現可能に

1.5.1 (2021/01/04)

  • Pmacs 更新
    • 以下のキーバインドを追加:
      • Shift+F2(F14) -> split-vertical-window-3
      • Contrl+F2(F26) -> split-vertical-window-4
      • Shift+F3(F15) -> split-horizontal-window-3
      • Contrl+F3(F27) -> split-horizontal-window-4
    • 以下のキーマップを新規作成:
      • KEY_F73 -- KEY_F96
      • kIC6, kIC7, KIC8, kDC6, kDC7, kDC8, kHOM6, kHOM7, kHOM8, kEND6, kEND7, kEND8,
      • kPRV6, kPRV7, kPRV8, kNXT6, kNXT7, kNXT8, kDN8, kUP8, kRIT8, kLFT8
    • Scratch バッファでコマンドを実行(CTRL_J)した際、コマンド行を mark するようにした。
    • 以下のエディタコマンドを新規作成:
      • roll-current-window-backward, next-page-anothor-window, previous-page-anothor-window, goto, cd,
      • previous-smooth-scroll-down-anothor-window, previous-smooth-scroll-up-anothor-window,
      • delete-word, delete-to-end-of-line,
      • grep, grep-next, grep-previous.
    • grep-next/grep-previous において、Grep バッファの1行目の CWD: 行があれば、カレントディレクトリを設定するようになった。

1.5.0 (2020/12/23 かしゆか誕生日バージョン)

  • set-itimer 周りのシグナルスタック取り扱いに関するバグを修正。
  • シグナルによる割込みを禁止するatomicコマンドを追加。
  • perfumesh インタプリタで -D PREFIX オプションによるシステムディレクトリを指定可能にした。
  • String::alphabetic? / String::numeric? / String:alphanumeric? を追加。
  • シグナル SIGARM を廃止。SIGALRM を使用し set-itimer / enable-itimer で定期アラームを処理できるようになった。
  • load コマンドに :notrace オプションを追加。
  • コルーチンスタックのスロット数を 1024から 256に変更。
  • マシンスタックのオーバーフロー検出機能を強化した。
  • Stream クラスに set-itemlimit (連続して呼び出す書き込み回数) の指定を追加。
  • 今回からバイナリーパッケージもリリースするようになった。 ⇒ https://github.com/mitchan0321/perfume/releases
  • 今回よりpmacsエディタを同梱するようになった。

1.4.1 (2020/09/10)

  • 現在のコンテキストの関数オブジェクトを返す self-func コマンドを追加。
  • Object::hash メソッドを追加。
  • コルーチンCスタックのステータスに SS_PEND (コルーチン終了からリリースまでの間)を追加。
  • List::concat は元々副作用のあるメソッドだったが、これを副作用の無い List::concat と元の副作用のある List::concat! に分割。
  • Container データタイプおよび Container::desc メソッドを追加。
  • チャットアプリケーションを修正。
  • load-func と load-class のスクリプトエラー時の動作を修正。
  • インタプリタにおいて実行したラインがエラーの場合スタックトレースを出力するように変更。
  • curses ライブラリのラッパーコマンド群を追加。

1.4.0 (2020/04/15)

  • Boolデータ型を追加。これに伴い、Nilデータ型を廃止。また、Boolのリテラル値を <t> と <nil> と定義。
  • Bool型のメソッドとして ?? (Nil結合演算子) と ??? (三項演算子)を追加。
  • Bulk::base64encode および Bulk::base64decode を追加。
  • base64 ユーティリティを追加。
  • マニュアルのフォントを Noto Sans/Serif CJK JP フォントに全体的に統一して修正。

1.3.0 (2020/02/21)

  • インタプリタで改行を含む入力を正しくパースするようになった。
  • インタープリタより呼び出した関数がコントロールを返した際にコントロールコードを文字列表現で表示するようにした。
  • and/or コマンドにおいて、引数がブロックの場合、そのブロックを評価するようになった。
  • control? コマンドを追加。
  • 関数からコントロールコマンド(return/break/continue/retry/redo)が返された場合に、呼び出し元で受け取れるようにした。コントロールコマンドを受け取る際は、コントロールが実行されないよう、リストでラップする必要がある。
  • List::permutations (順列)、List::combinations(組み合わせ) イテレータを追加。
  • date ユーティリティを追加。
  • edit ユーティリティを追加。
  • hexdump ユーティリティを追加。
  • BULK データタイプ、Bulk クラスおよび、bulk コマンドを追加。BULKデータタイプにより、バイナリーファイルを取り扱うことが可能に。
  • sysinfo ユーティリティに DEFAULT_DIRENT_ENCODING 表示を追加。

1.2.8 (2019/10/16)

  • Object::literal メソッドを定義。Object::string との違いは、文字列表現ではなく、ソース上のリテラルを文字列で返すこと。
  • Dict::stat により hash 統計情報の取得。
  • Vector::resize により配列のサイズを明示的に指定可能。
  • Vector::fill により配列の各要素を一斉に初期化。
  • List::max, List::min によりリスト要素の最大、最小値を取得。
  • String::replace 文字列内の要素のうち正規表現にマッチした部分文字列を置換。
  • newコマンドの init: パラメータに関する仕様ミスを修正。

1.2.7 (2019/08/23)

  • spawnコマンドを追加した。外部コマンドを起動し、終了ステータスを返す。fork-execコマンドとは異なり、同期実行となる。また、標準入出力については、インタプリタのものが継承される。

1.2.6 (2019/06/25)

  • ネイティブコマンドおよびネイティブメソッドに description として argspec を記述した。これは、新設の argspec コマンドにより取得可能である。また、ネイティブコマンドの文字列も変更となり、<NATIVE> → (argspec) <NATIVE> となった。
  • case コマンドのシンタックスを変更:
    • (元) case val val1 {body1} val2 {body2} .... * {default-body}
    • (新) case val val1 {body1} val2 {body2} .... default: {default-body}
    • このように、default を指定する方法が default: キーワード引数 defaults: で指定するようになった。
    • ※ 1.2.6 以前のバージョンとは非互換になります。

1.2.5 (2019/06/17)

  • pipe の各ブロックに適用するローカルスタックが間違っていたバグを修正。
  • pipe コマンドで利用できる補助関数を作成:
    • List::@>{block} ... リストの要素を標準出力へ出力し、pipe の次のブロックへ渡す。block は省略可能。
    • >@>{block} ... パイプから1行読み込み block で処理した結果を pipe の次のブロックへ渡す。
    • >@{block} ... パイプから1行読み込み block で処理する。最後の block の結果が次の pipe へ渡される。
    • いずれも上記 block の中では $_ により入力値が参照できる。
  • Integer::++ および Integer::-- の引数においても、可能であれば自動で型変換を行うように修正。

1.2.4 (2019/05/27)

  • 文の先頭がプリミティブであった場合にソース中の即値が変更される可能性があるバグを修正。
  • 標準入出力を行うコマンドのテンプレート関数である standard-io-command-templ を追加。
  • 以下のコマンドについて、standard-io-command-templ を使うように変更。
    • awk, cat, grep, head, ncat, wc

1.2.3 (2019/04/01)

  • 関数呼び出し時の実引数について、プリミティブ型(Integer, String)については、call-by-value となるように変更。
  • 同様に、set, Dict::set, Vector::set についても call-by-value となる。
  • これに関連して、toy_clone 関数、テストスクリプトを変更した。
  • awkコマンドの引数並びを他のフィルタコマンドと同じに変更し、ファイル名が省略されたときは標準入力を使用するように変更。
  • Integerクラスに順列組み合わせメソッドを追加(Integer::P, Integer::C)。

1.2.2 (2019/2/26)

  • file stat において、ファイルタイプがシンボリックリンクの場合 (type="l") シンボリックリンクの実態のパス名を属性 symbolic-link で返すようになった。
  • 上記修正に合わせて、ll.prfm ユーティリティでもシンボリックリンクの場合、実態のパス名も表示するようになった。

1.2.1 (2019/2/15 a-chan 30th birthday)

  • 以下のコマンドについて、ディレクトリ入出力の際の文字エンコーディングを行えるようにした。デフォルトのエンコーディングはDEFAULT_DIRENT_ENCODINGグローバル変数により指定する。既定値は"UTF-8"。
    • load
    • cd
    • pwd
    • file コマンドの全てのサブコマンド
    • fork-exec
    • File::open
  • コルーチンの初期スタックをコルーチンブロックのクロージャスタックとなるように変更した。
  • 文字列整数変換メソッドである String::>> , String::<< を追加。
  • file stat のシステムコール呼び出しを lstat(2) に変更したため、シンボリックリンクエントリーを正しく取得できるようになった。

1.2.0 (2018/12/23 Kashiyuka 30th birthday)

  • fileコマンドに以下のサブコマンドを追加。
    • stat ... ファイルのステータスを取得。
    • rm ... ファイルを削除。
    • rmdir ... ディレクトリを削除。
    • rename ... ファイル名を変更。
    • mkdir ... ディレクトリを作成。
    • chmod ... ファイルモード(パーミッション)を変更。
  • dict-closure: クロージャが持つ環境の辞書を返す。
  • strftime、strptime 時刻を文字列に、文字列から時刻に変換するコマンド。
  • time-of-day コマンドの追加。現在時刻を返す。
  • Real::inf?、Real::nan? 実数型が無限大か、未定義値かを判定するメソッド。
  • Block::>>> 標準出力をファイルへ追加出力する。
  • Block::<<< 文字列を標準入力とする(ヒアドキュメント)。
  • String::expand 文字列中の変数を展開する。
  • awk コマンド: awkと似たファイルの処理。
  • pipe コマンドに :append オプションを追加。
  • List::create-block メソッドの追加。リストからクロージャを生成する。
  • String::at メソッドの追加。指定位置の文字を返す。
  • File::fd? メソッドの追加。ファイル記述子を返す。
  • パーサーの変更:
    • オクタル表現 (ex: 0o777)
    • 文字列の継続 (ex: .*\$ → 次の行へ文字列を継続する)
  • サンプルプログラムの追加:
    • chatd.prfm ... チャットサーバ、chat.prfm ... チャットクライアント。
    • ll.prfm ... ls -l に似たファイルの表示。
    • sysinfo.prfm ... システム情報の表示。
  • ユーティリティスクリプトをクラスごとに整理(util.prfm)。
  • ゼロ除算のバグ修正。
  • ワイド文字の判定バグを修正(String::sub, String::split バグの修正)。

1.1.1 (2018/5/17)

  • マニュアルを最新化。
  • Integer::sqrt、Real::sqrt に負数を指定した際のバグを修正。

1.1.0 (2018/05/15)

  • TCP/IP に関する次のコマンドを追加: accept、close、select、socket-server
  • connectコマンドに、次のオプションを追加: bind-address:、bind-port:
  • host-address-string 補助関数を追加。
  • Dict::keys、Dict::pairs に :string スイッチを追加。このスイッチを指定することにより、キー値を文字列型で返すことが可能。
  • 次の関数を追加: Integer::nextprime、Integer::sqrt、Integer::neg、Integer::abs、Real::neg、Real::abs
  • refコマンドを追加。
  • C言語風 for シンタックスを追加。
  • Real の文字列表記方法を変更。
  • tryコマンドの本体ブロック中でbreakした際に、tryコマンドの戻り値をCTRL_BREAKとするように修正。
  • condコマンド内でcontinueを使用した際のバグを修正。

1.0.0 (2017/03/21)

  • 文字列の内部コードを Unicode(UTF-32) に変更。エンコーディングとしては、UTF-8、EUC-JP、Shift-JIS および RAW を用意。エンコーダーはFileクラスに実装。
  • File クラスに encoding プロパティを追加。
  • String::uexport (内部文字コードを Unicode 文字コードとしてエクスポート)、String::uimport! (Unicode 文字コードを文字列にインポート) を追加。
  • File::set-encoding、File::set-input-encoding、File::set-output-encoding を追加。
  • 広域変数に DEFAULT_FILE_ENCODING(File オブジェクトに設定されるエンコーディングの既定値)、DEFAULT_SCRIPT_ENCODING(スクリプト読み込み時に使用されるエンコーディングの既定値)を追加。
  • パーサーのバグ修正。

0.9.2 (2016/3/12)

  • time コマンドに count: オプションを追加。最小時間、最大時間、合計時間、平均時間を表示するようにした。
  • if コマンドに新しい書式: if cond then-block else-block のキーワードパラメータを使用しない形式を導入した。
  • loop コマンドに新しい書式: loop do: block 形式を導入した。
  • tag? コマンド、tag ユーティリティを導入した。
  • その他サンプルコード(lib/fib*.prfm、lib/tarai*.prfm) の修正を行った。

0.9.1 (2016/3/2)

  • lib/exec.prfm - 外部プロセスが実行できないときは終了コードとして255を返却するようにした。
  • lib/http-get.prfm - リクエストURLを変更した。
  • lib/lsort.prfm - 副作用を無くした。

0.9.0 (2016/2/15 A-chan 27th birthday)

  • String::clean - 文字列データの前後の空白とスペース以外の空白文字を除去する。
  • String::upper - アルファベットを大文字に。
  • String::lower - アルファベットを小文字に。
  • lib/http-get.prfm - シンプルなhttpアクセス関数。

0.8.1_p4 (2016/2/2)

  • perfumesh -c のパラメータ数が1以外のときのエラー処理を追加。
  • lib/tarai-slow.prfm を最適化。
  • misc/ にその他のファイルを整理。

0.8.1_p3 (2016/1/14)

  • lib/Pipe.prfm -> lib/PipeWrapper.prfm, lib/pipe.prfm: Pipe.prfm のクラス名、ファイル名を PipeWrapper.prfm に変更

0.8.1_p2 (2016/1/7)

  • ドキュメントの修正。
  • setup.prfm, lib/util.prfm: unknown, load-func, load-class のバグ修正。

0.8.1_p1 (2015/12/31)

  • lib/pipe.prfm, lib/Pipe.prfm: 最後のブロックが終了しても pipe が終了しないバグを修正。

0.8.1 (2015/12/30)

  • lib/Pipe.prfm: INFILE, OUTFILE, CO-MODE をグローバル変数化。
  • lib/Pipe.prfm: 未定義変数を参照するバグを修正。
  • lib/exec.prfm, lib/pipe.exec: グローバル変数の参照方法を変更(true?/false?)。
  • lib/interp.prfm: INTERACTIVE モードを設定するように変更。
  • interp.c: -c "command" によりコマンドを実行できるように変更。また、バッチモードのときは result を表示しないように変更。
  • setup.toy を読むところを setup.prfm を読むように修正。

0.8.0 (2015/09/20 Kashiyuka 27th birthday)

0.7.0 (2015/09/20 NOCCHi 27th birthday)

0.6.0 (2015/08/09)

0.5.0 (20150215 A-chan 26th birthday)

0.4.0 (20141223 Kashiyuka 26th birthday)

Clone this wiki locally