TERM39
A modern, retro-styled terminal multiplexer inspired by Norton Disk Doctor (MS-DOS), built with Rust. TERM39 brings the classic DOS aesthetic to your terminal with a full-screen text-based interface, window management, and terminal emulation.
███████████ ██████████ ███████████ ██████ ██████ ████████ ████████
░█░░░███░░░█░░███░░░░░█░░███░░░░░███ ░░██████ ██████ ███░░░░███ ███░░░░███
░ ░███ ░ ░███ █ ░ ░███ ░███ ░███░█████░███ ░░░ ░███░███ ░███
░███ ░██████ ░██████████ ░███░░███ ░███ ██████░ ░░█████████
░███ ░███░░█ ░███░░░░░███ ░███ ░░░ ░███ ░░░░░░███ ░░░░░░░███
░███ ░███ ░ █ ░███ ░███ ░███ ░███ ███ ░███ ███ ░███
█████ ██████████ █████ █████ █████ █████░░████████ ░░████████
░░░░░ ░░░░░░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░░░░ ░░░░░░░░
Screenshot

Features
- Retro DOS Aesthetic: Classic blue-and-white color scheme with box-drawing characters
- Multiple Terminal Windows: Create, manage, and switch between multiple terminal sessions
- Window Management: Drag, resize, minimize, and maximize windows with mouse or keyboard
- Tiling Windows: Automatic window tiling and layout management
- Snap Corners: Snap windows to screen corners for quick positioning
- Clipboard Support: Full copy/paste functionality with system clipboard integration
- Mouse drag to select text in terminals
- Ctrl+Shift+C to copy, Ctrl+Shift+V to paste
- Right-click context menu for clipboard operations
- Top bar buttons for quick clipboard access
- Customizable Themes: Multiple built-in color schemes
- Classic (default DOS blue/cyan), Dark (Dracula-inspired), Monochrome (grayscale)
- Green Phosphor (classic green terminal), Amber (vintage amber terminal)
- Select via
--themeflag or settings window
- Configuration System: Persistent settings with auto-tiling and UI customization options
- Double-Buffered Rendering: Smooth, flicker-free display at ~60fps
- Cross-Platform: Works on Linux, macOS, and Windows
- Linux Framebuffer Mode (Experimental): Direct console rendering with DOS-like text modes
- Pixel-perfect rendering on Linux console (TTY) via
/dev/fb0 - Text modes: 40x25, 80x25, 80x43, 80x50 (like classic DOS)
- Requires compile-time
--features framebuffer-backendflag - Authentic VGA 16-color palette and PSF2 bitmap fonts
- Unifont support for comprehensive Unicode character coverage
- Hardware mouse cursor rendering with pixel-accurate positioning
- Raw mouse input from
/dev/input/miceand/dev/input/event*devices
- Pixel-perfect rendering on Linux console (TTY) via
- ASCII Compatibility Mode: Optional
--asciiflag for maximum terminal compatibility - Full Terminal Emulation: Complete VT100/ANSI escape sequence support with true color
- Mouse & Keyboard Support: Intuitive interface with both input methods
- GPM Support: Native mouse support in Linux virtual consoles (TTY)
Installation
From crates.io (Recommended)
The easiest way to install TERM39 is via cargo:
# Standard installation (terminal backend)
# Linux with framebuffer support (requires Linux console/TTY)
The framebuffer backend enables:
- Direct
/dev/fb0rendering on Linux console - DOS-like text modes (40x25, 80x25, 80x43, 80x50)
- Hardware mouse cursor rendering
- Unifont support for comprehensive Unicode coverage
Requires Rust to be installed. Install Rust
Linux Packages
Debian/Ubuntu (and derivatives)
Download and install the .deb package from the Releases page:
# x86_64 (amd64)
# or
# ARM64 (aarch64)
# or
Fedora/RHEL/CentOS/openSUSE
Download and install the .rpm package from the Releases page:
# x86_64
# or
# ARM64 (aarch64)
# or
Arch Linux (AUR)
Using an AUR helper (yay, paru, etc.):
# Binary package (recommended - faster)
# Source package (builds from source)
Manual installation:
# Binary package
# Source package
macOS
Download the binary for your architecture from the Releases page:
# Extract and install
From Source
# Standard build (terminal backend)
# Linux build with framebuffer support
Requires Rust 1.70 or later. Install Rust
Usage
Basic Usage
# Run with Unicode characters (recommended)
# Run with ASCII-only characters for compatibility
# Run with a specific theme
# Available themes:
# classic, dark, monochrome, green_phosphor, amber
Keyboard Shortcuts
| Key | Action |
|---|---|
t |
Create new terminal window (from desktop) |
T |
Create new maximized terminal window (from desktop) |
q or ESC |
Exit application (from desktop) |
h |
Show help screen |
s |
Show settings/configuration window |
l |
Show license and about information |
c |
Show calendar |
ALT+TAB |
Switch between windows |
Ctrl+Shift+C |
Copy selected text to clipboard |
Ctrl+Shift+V |
Paste from clipboard |
Dialog Controls
| Key | Action |
|---|---|
TAB or LEFT/RIGHT |
Navigate between dialog buttons |
ENTER |
Activate selected button |
ESC |
Close dialog |
Calendar Navigation (when calendar is open)
| Key | Action |
|---|---|
LEFT/RIGHT or </> or ,/. |
Navigate months |
UP/DOWN |
Navigate years |
t or HOME |
Jump to today |
ESC |
Close calendar |
Mouse Controls
- Click title bar - Drag window to move
- Click [X] - Close window
- Drag ╬ handle - Resize window (bottom-right corner)
- Click window - Focus window
- Click bottom bar - Switch between windows
- Drag in terminal - Select text
- Right-click in terminal - Open context menu (copy/paste/close)
- Click top bar buttons - Quick clipboard access (copy/paste/clear)
Window Controls
Each window has three buttons in the title bar:
- [X] (red) - Close window
- [+] (green) - Maximize/restore window
- [_] (yellow) - Minimize window
Architecture
Core Components
- Video Buffer System: Double-buffered rendering with dirty region tracking
- Window Manager: Z-order management with focus handling
- Terminal Emulator: VT100/ANSI escape sequence parser using VTE
- Charset Configuration: Switchable Unicode/ASCII rendering modes
- PTY Integration: Real shell integration via portable-pty
Rendering System
TERM39 uses a sophisticated double-buffer system:
- Front/back buffers for flicker-free rendering
- Per-cell dirty tracking (only updates changed cells)
- Save/restore regions for efficient window management
- Shadow system for 3D depth effect
Building and Development
Prerequisites
- Rust 1.70 or later
- Cargo (comes with Rust)
Build Commands
# Development build
# Optimized release build
# Linux build with framebuffer support
# Run directly
# Run with ASCII mode
# Run with framebuffer mode (Linux only, requires root or video group)
# Run tests
# Check code quality
# Format code
Project Structure
term39/
├── src/
│ ├── main.rs # Entry point and event loop
│ ├── charset.rs # Unicode/ASCII character sets
│ ├── video_buffer.rs # Double-buffered rendering
│ ├── window.rs # Window rendering and UI
│ ├── window_manager.rs # Multi-window management
│ ├── terminal_emulator.rs # VT100/ANSI parser
│ ├── terminal_window.rs # Terminal integration
│ ├── term_grid.rs # Terminal cell grid
│ ├── ansi_handler.rs # ANSI escape handling
│ ├── button.rs # UI button component
│ └── prompt.rs # Dialog/prompt system
├── Cargo.toml
├── LICENSE
└── README.md
Contributing
Contributions are welcome! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.
How to Contribute
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes: Follow the existing code style
- Test your changes:
cargo test && cargo clippy - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
Development Guidelines
- Follow Rust best practices and idioms
- Run
cargo fmtbefore committing - Ensure
cargo clippypasses without warnings - Add tests for new functionality
- Update documentation as needed
- Keep commits atomic and well-described
Areas for Contribution
- Terminal emulation: Improve ANSI/VT escape sequence coverage
- Performance: Optimize rendering and buffer management
- Features: Tab completion, session saving, themes, etc.
- Platform support: Testing and fixes for Windows/Linux/macOS
- Documentation: Tutorials, examples, code comments
- Testing: Unit tests, integration tests, edge cases
Roadmap
- Configuration file support (colors, keybindings)
- Tiling windows
- Snap corners
- Custom themes
- Copy/paste support with system clipboard
- Scrollback buffer
- Session persistence (save/restore windows)
- Tab completion
- Split panes within windows
- Search functionality in scrollback
- Advanced selection modes (line, word)
Dependencies
- crossterm - Cross-platform terminal manipulation
- chrono - Date and time library
- portable-pty - Cross-platform PTY support
- vte - ANSI/VT parser
- arboard - Cross-platform clipboard access
Similar Projects
If you're interested in terminal multiplexers, check out:
- tmux - Terminal multiplexer
- GNU Screen - Terminal multiplexer
- byobu - Text-based window manager
- zellij - Modern terminal workspace
License
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2025 Alejandro Quintanar
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Acknowledgments
- Inspired by Norton Disk Doctor and classic DOS applications
- Built with the amazing Rust programming language
- Thanks to the open source community for the excellent libraries
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Check the Wiki