English | 日本語
Terse はテキスト UI 向けに、描画・入力・端末能力検出を一元化する C ライブラリです。端末ごとの差異を吸収しながら安全に縮退し、カラー・マウス・画像などの拡張機能を段階的に扱えるよう設計されています。
- プロファイル制御:
TERSE_PROFILE_AUTOと P0〜P3 プロファイルで、端末能力に応じた自動縮退と上限クリップを提供。 - 端末検出: Apple Terminal / GNOME Terminal (VTE) / iTerm2 / WezTerm / kitty / Ghostty / Warp などを判別し、利用可能な機能セットを推定。
- 描画 API: カーソル移動、画面/行消去、文字列・スタイル・カラー出力、インライン画像表示、通知送出を網羅。
- 入力正規化:
terse_read_eventがキー・マウス・リサイズ・ブランケットペーストなどを抽象化し、修飾キーも一貫して扱えるようにする。 - 符号化サポート: UTF-8 を既定としつつ、Shift_JIS 変換や mini iconv フォールバックで多バイト入出力に対応。
- 一貫した状態管理:
terse_capture_state/terse_restore_stateや push/pop API でカーソルやスタイルを安全に退避・復元。
Terse は端末の能力を 4 段階のプロファイルで管理し、利用可能な機能を段階的に拡張します。
| プロファイル | 機能 |
|---|---|
| P0 | カーソル移動、画面クリア、テキスト出力、サイズ取得、入力イベント |
| P1 | P0 + 16/256/TrueColor、テキスト装飾(太字・斜体・下線など) |
| P2 | P1 + マウス追跡、ブランケットペースト、ウィンドウタイトル、ハイパーリンク |
| P3 | P2 + クリップボード、インライン画像、カーソル形状、デスクトップ通知 |
TERSE_PROFILE_AUTO を指定すると、端末の能力を自動検出して適切なプロファイルで動作します。
- C99 対応コンパイラ(POSIX 系は clang / GCC、Windows は MSVC、Human68k は m68k-xelf-gcc)
- CMake 3.14 以降
- CMake 対応のビルドツール(Ninja / Make / Visual Studio など)
POSIX 系(macOS / Linux):
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build buildWindows(MSVC):
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config DebugHuman68k(クロスコンパイル):
cmake -S . -B build-human68k -DCMAKE_TOOLCHAIN_FILE=cmake/human68k.cmake
cmake --build build-human68kWindows では iconv が標準で利用できないため、内蔵の mini iconv 実装が自動的に選択されます(Shift_JIS ↔ UTF-8 のみ対応)。
ctest --test-dir build --output-on-failureWindows では -C Debug のように構成を指定してください。Human68k 向けビルドではテストはビルドされません。
#include "terse.h"
#include <unistd.h>
int main(void)
{
terse_options_t options = {
.input_fd = STDIN_FILENO,
.output_fd = STDOUT_FILENO,
.codec_name = "UTF-8"
};
terse_handle_t handle = terse_open(TERSE_PROFILE_AUTO, &options);
if (!handle) return 1;
terse_clear_screen(handle, TERSE_CLEAR_ALL);
terse_move_to(handle, 0, 0);
terse_write_text(handle, "Hello, Terse!");
terse_close(handle);
return 0;
}samples/ には各プロファイルの機能を確認できるデモが揃っており、ライブラリと一緒にビルドされて build/samples/ に配置されます。サンプルが不要な場合は cmake で -DTERSE_BUILD_SAMPLES=OFF を指定してください。
P0:
p0_demo: カーソル移動・画面消去・テキスト出力の基本操作line_edit_demo: P0 API だけで実装した簡易ラインエディタcursor_position_test: カーソル位置取得の動作確認
P1:
p1_style_demo: 太字・斜体・下線などテキスト装飾p1_color_demo: 16/256/TrueColor のカラーグリッド
P2:
p2_features_demo: マウス追跡・ブランケットペースト・ウィンドウタイトル・ハイパーリンクmouse_click_demo: マウスクリックイベントの取得input_complete_demo: キー・マウス・修飾キーを含む入力イベントの網羅的なログ
P3:
p3_notifications_demo: ベル・ビジュアル・デスクトップ通知p3_image_demo: 端末の能力に応じたインライン画像表示p3_sixel_demo: Sixel プロトコルでの画像表示p3_kitty_graphics_demo: kitty graphics プロトコルでの画像表示p3_image_protocol_fallback_demo: 画像プロトコルの自動選択・縮退
その他:
event_logger_demo: 入力イベントの内容をログ出力
- macOS 26.5 (arm64)
- Ubuntu 24.04.4 LTS (x86_64 WSL2)
- Ubuntu 24.04 LTS (aarch64)
- Debian 13 trixie (aarch64)
- Windows 11 25H2 (x86_64)
- Human68k (X68000)
docs/terse-api-user.md: アプリケーション開発者向け API ガイドdocs/terse-specs.md: プロファイル仕様と縮退ルールdocs/progress-overview.md: 実装状況のサマリdocs/graphics-roadmap.md: 画像系機能の計画docs/terse-platform-porting.md: 追加プラットフォーム移植の指針docs/mini-iconv-plan.md: mini iconv 実装メモ
詳細なサンプルと運用上の注意は上記ドキュメントを参照してください。
MIT No Attribution (MIT-0)。詳細は LICENSE を参照してください。