A colletion of ansi/bbs related applications
  • Rust 88.4%
  • Fluent 5.3%
  • Modula-3 3.6%
  • xBase 1.5%
  • WGSL 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Mike Krüger b568f6a087 Fix Cmd+V and text field paste in the egui frontends
eframe was built without its clipboard feature, so egui-winit only knew
text copied inside the app. It also swallowed Cmd+V when its clipboard read
came up empty, so on macOS neither the terminal nor text fields could paste
since the switch to the egui frontend in IcyTerm 0.9.0.

Enable eframe's clipboard feature for all apps. IcyTerm additionally handles
the clipboard shortcuts itself: in the terminal Cmd/Ctrl+V stays a key, so
Cmd+V reaches the paste shortcut (read through clipboard-rs like the menu)
and plain Ctrl+V goes to the host; elsewhere pastes are read through
clipboard-rs.
2026-11-03 11:13:04 +01:00
.cargo fixed mac build. 2025-12-23 18:39:07 +01:00
.github Add IcyMail release packaging 2026-10-10 14:27:11 +02:00
crates Fix Cmd+V and text field paste in the egui frontends 2026-11-03 11:13:04 +01:00
doc Add UTF-8 art mode to Icy Draw 2026-10-21 09:31:19 +02:00
tools Add IcyMail release packaging 2026-10-10 14:27:11 +02:00
.gitattributes Enable RGB RIP test2 reference 2026-08-24 10:45:46 +02:00
.gitignore Track Cargo.lock for reproducible CI 2026-04-27 17:49:03 +02:00
.gitmodules Update submodule url. 2025-02-15 11:40:06 +01:00
Cargo.lock Fix Cmd+V and text field paste in the egui frontends 2026-11-03 11:13:04 +01:00
Cargo.toml Fix Cmd+V and text field paste in the egui frontends 2026-11-03 11:13:04 +01:00
collab.sh Improved collab tools. 2025-12-19 15:46:43 +01:00
color_test.ans Improved skypix support. 2025-11-28 21:15:36 +01:00
cosmos_db_shell_logo.ans Fix Icy Draw MCP editing workflow 2026-07-15 12:38:43 +02:00
LICENSE-APACHE Initial commit. 2024-04-10 13:09:49 +02:00
LICENSE-MIT Initial commit. 2024-04-10 13:09:49 +02:00
README.md Normalize pasted typographic symbols per target encoding 2026-11-02 05:45:39 +01:00
rustfmt.toml Initial commit. 2024-04-10 13:09:49 +02:00
test_scroll.ans Improved skypix support. 2025-11-28 21:15:36 +01:00

icy_tools

This repository contains tools releated to BBSing and Ansi in general. It contains:

Icy Term a terminal program for legacy BBS systems.

Icy Draw a drawing tool supporting almost all ANSI formats.

Icy View a viewer to browse/view Ansi screens.

Icy Play a tool that shows icy draw animations on cmd line/bbs.

Plain-text paste

Icy Term, Icy Mail and Icy Draw adapt pasted smart quotes and common typographic symbols to the target encoding. A symbol the encoding has a printable glyph for is kept (for example ½/¼ in CP437, ←/→/½ in Viewdata, ©/®/™ on the Atari ST); otherwise it falls back to plain text: quotes become straight quotes, arrows become <- and ->, en/em dashes become - and --, copyright/registered/trademark symbols become (c), (r) and TM, fractions become 1/4, 1/2 and 3/4, ellipses become ..., and modifier circumflexes become ^. Glyphs that sit on control codes (CP437 and ATASCII arrows) are never sent. PETSCII and Icy Term's SkyPix (Amiga) mode always use the plain-text forms. UTF-8 text and rich Icy clipboard data are unchanged.

The shared routines are icy_engine::clipboard::normalize_paste_text and, for text sent to a terminal host, normalize_terminal_paste_text; callers apply them before converting plain clipboard text to the destination encoding.

Build instructions

Use the current stable Rust toolchain. The egui 0.37 desktop frontend requires Rust 1.95 or newer.

Dependency versions and sources are maintained in [workspace.dependencies] in the root Cargo.toml. Member crates inherit them with workspace = true and keep crate-specific features and optional flags locally. Shared dependencies with differing default-feature needs (such as chrono and resvg) disable defaults at the workspace level; members opt in with features = ["default"]. The legacy UI continues to use the egui/wgpu versions provided by icy_ui.

Windows

Install the Rust MSVC toolchain and Visual Studio (or Build Tools) with the Desktop development with C++ workload, including a Windows SDK and C++ CMake tools for Windows.

Open x64 Native Tools Command Prompt for Visual Studio, then run:

cd C:\work\icy_tools
git submodule update --init --recursive
cargo build --workspace --locked

Debug executables are in target\debug. Add --release for optimized executables in target\release.

The native Opus dependency requires CMake and Ninja. If the build reports CMAKE_MAKE_PROGRAM is not set for Ninja, use the developer command prompt above so Visual Studio's bundled tools are on PATH.

Linux

# Clone the repository  
git clone https://github.com/mkrueger/icy_tools.git  
cd icy_tools  

# Update the repository and submodules  
git pull  
git submodule update --init --recursive  

# Install Rust toolchain  
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh  
source $HOME/.cargo/env  

# Install dependencies (for Debian/Ubuntu)  
sudo apt-get install build-essential libssl-dev libasound2-dev

# Install dependencies (for Nobara/Fedora)  
sudo dnf install @development-tools pkgconf-pkg-config openssl-devel alsa-lib-devel

# If you don't have apt-get, installing these libraries is similar.  
# The next step will tell you what's missing exactly.  

# Update Rust dependencies  
cargo update  

# Build the project  
cargo build --release  

# Executables for all tools are in  
ls target/release  

App icons

Each GUI tool keeps its icon master at crates/<tool>/build/icon.svg. After editing one, regenerate the Linux, macOS, Windows and web icons with python tools/render_app_icons.py (requires Inkscape and ImageMagick). The design proposals are in doc/icon-proposal*.

CI and releases

Pushes and pull requests run cargo fmt, the workspace tests, and one debug build of IcyTERM. They do not package installers.

Release binaries are built when you push a version tag for one tool:

git tag IcyTerm0.8.3
git push origin IcyTerm0.8.3

Accepted prefixes: IcyTerm, IcyDraw, IcyView. That opens a draft GitHub release and attaches Linux (.deb, AppImage), Windows (.exe), and macOS (.dmg) packages for that tool only. Review the draft, then publish it.

You can rebuild an existing tag from Actions → Release → Run workflow.