# Scitano 1.0 **Jeremy Anderson** — info@dcos.net https://git.dcos.net/dcosnet/scitano/ A hotkey-first programmer's editor built in Rust on the iced GUI framework. Scitano combines the menu structure of SciTE, strict GNU nano hotkeys, and Geany-inspired sidebar and context features into a single unified editing environment. ![Scitano 1.0 screenshot](screenshot.png) --- ## Features - **Strict Nano Hotkeys** — `^K`/`^U` kill-ring, `^O` writeout, `^X` exit, `^W` search, and more — all faithful to GNU nano behavior - **SciTE-Style Menus** — File, Edit, Search, View, Build, Tools, Syntax, Options, Help, and AI-Bridge menus across the top - **Geany-Inspired Sidebar** — Symbol tree auto-parses `fn`, `struct`, `impl`, `enum`, `trait`, `class`, `def`, `mod`, and `macro_rules!` definitions - **Multi-Tab Editing** — Multiple buffers with dirty indicators (`●`), right-click close, and `+` to create new tabs - **Syntax Highlighting** — 20+ languages: Rust, Python, C/C++, Shell, JavaScript, TypeScript, Markdown, HTML, CSS, JSON, XML, YAML, Go, Ruby, PHP, Java, C#, SQL, and more - **Dual Highlight Tones** — CandyPop (Base16 Ocean) and Matte (Base16 Mocha) switchable from the View menu - **Bottom Panel** — Messages, Diagnostics, Build Logs, and AI Terminal panes with color-coded output - **Right-Click Context Menu** — Quick access to Save, Close, Build, Lint, Comment/Uncomment, and case transforms - **Build Integration** — Compile, build-and-run, run-only, and lint with output routed to the Build Logs pane - **AI Bridge** — Aider and Hermes/Odysseus integration points for AI-assisted editing --- ## Quickstart ### Prerequisites - Rust 1.70+ (edition 2021) - A system display server (X11 or Wayland with XWayland) ### Build ```bash git clone https://git.dcos.net/dcosnet/scitano.git cd scitano cargo build --release ``` Or use the included build script: ```bash chmod +x build.sh ./build.sh ``` The release binary will be at `target/release/scitano`. ### Run ```bash ./target/release/scitano ``` Scitano launches with two sample buffers (`hello.rs` and `script.py`) so you can start editing immediately. ### Install (system-wide) ```bash cargo install --path . ``` --- ## Hotkey Reference All hotkeys follow GNU nano conventions. `^` denotes `Ctrl`. Hotkeys are active when no text is selected and the editor has focus. ### Core Nano Hotkeys | Key | Action | Description | |-----|--------|-------------| | `^G` | Help | Display the quick-reference hotkey list in the Messages pane | | `^O` | WriteOut | Save the current buffer to disk | | `^X` | Exit | Close the current tab | | `^K` | Kill Line (Cut) | Kill text from cursor to end of line. Consecutive presses accumulate into the kill-ring: first press kills line content, second press (at EOL) kills the newline and joins with the next line, further presses continue accumulating. Any non-`^K` action resets the accumulation. | | `^U` | Unkill (Paste/Yank) | Insert the entire kill-ring at the cursor position. Cursor advances to the end of the pasted text. Resets the consecutive-kill flag. | | `^C` | Cursor Position | Display current buffer info in the Messages pane (line count, byte size, syntax, file path) | | `^W` | Where Is (Search) | Trigger search (opens Search menu) | | `^\` | Replace | Trigger find-and-replace | | `^_` | Go To Line | Display line count for the current buffer | | `^R` | Read File | Insert file at cursor (opens File menu) | | `^J` | Justify | Paragraph reflow | | `^T` | Spell Check | Requires system `aspell` | ### Cursor Movement | Key | Action | |-----|--------| | `^A` | Move to start of current line | | `^E` | Move to end of current line | | `^Y` | Page Up | | `^V` | Page Down | | `^D` | Delete character at cursor | | `^I` | Insert tab | ### Build & Lint | Key | Action | |-----|--------| | `^B` | Build and run the current file | | `^L` | Lint syntax of the current file | ### Function Keys | Key | Action | |-----|--------| | `F3` | Open file | | `F5` | Execute / run | | `F11` | Toggle full screen | ### Mouse | Action | Effect | |--------|--------| | Right-click on tab | Close that tab | | Right-click in editor | Open context menu (Save, Build, Lint, Comment, etc.) | ### Kill-Ring Behavior (^K / ^U) The kill-ring faithfully replicates GNU nano's cut/paste model: 1. **Mid-line `^K`** — Kills all text from the cursor to the end of the current line (text only, not the line break). Cursor stays in place. 2. **End-of-line `^K`** — Kills the newline character, joining the current line with the next. Cursor sits at the junction point. 3. **Empty-line `^K`** — Same as end-of-line: removes the line by joining with the next. 4. **Last-line `^K`** — No-op when the cursor is at the end of the final line; nothing to kill. 5. **Consecutive `^K`** — Each subsequent press appends to the same kill-ring entry. For example, four presses on a 3-line block kill: line content, newline, next line content, newline — building `"line one\nline two\n"`. 6. **`^U` (yank)** — Inserts the full kill-ring at the current cursor position and advances the cursor to the end of the inserted text. Resets the consecutive-kill flag. 7. **Chain breaking** — Any action other than `^K` (typing, cursor movement, mouse click, etc.) resets the kill chain so the next `^K` starts a fresh kill-ring entry. --- ## Menu Structure ### File `New` · `Open (F3)` · `Open Selected` · `^O WriteOut (Save)` · `Save As...` · `^X Close Tab` · `Reload File` · `Save Session` · `Load Session` · `Print...` · `Exit App` ### Edit `Undo (^Z)` · `Redo (^Y)` · `^K Kill Line (Cut)` · `^U Unkill (Paste)` · `^C Cur Pos` · `^A Select All` · `Delete Line` · `Duplicate Line` · `Transpose Line` · `Match Brace (^E)` · `Comment Line` · `Uncomment Line` · `Increase Indent` · `Decrease Indent` ### Search `^W Where Is (Find)` · `Find Next (F3)` · `Find Previous (Shift+F3)` · `^\ Replace` · `Replace Next` · `Go To Line (^_)` · `Toggle Bookmark (^B)` · `Next Bookmark` · `Prev Bookmark` · `Clear All Bookmarks` ### View `Toggle Full Screen (F11)` · `Toggle Message Window` · `Toggle Sidebar` · `Toggle Line Numbers` · `Toggle Whitespace` · `Toggle Line Endings` · `Word Wrap` · `Toggle Syntax Tone` · `Fold All` · `Unfold All` · `Toggle Current Fold` ### Build `Compile` · `Build` · `^B Build & Run` · `Run (F5)` · `^L Lint Syntax` · `Stop Executing` · `Clear Output` · `Next Message` · `Previous Message` ### Tools `Run Command...` · `Run Lua Script (F5)` ### Syntax `Rust` · `Python` · `C/C++` · `Shell` · `JavaScript` · `TypeScript` · `Markdown` · `HTML` · `CSS` · `JSON` · `XML` · `YAML` · `Go` · `Ruby` · `PHP` · `Java` · `C#` · `SQL` · `Clear Override` ### Options `Global Properties` · `Open Abbreviations` · `User Properties` · `Local Properties` ### Help `^G Help` · `About` ### AI `Sync Aider Models` · `Aider: Architect Mode` · `Aider: Code Review` · `Aider: Refactor Buffer` · `Hermes: Local Inference` · `Hermes: System Prompt` · `Odysseus: Crawl Context` · `Odysseus: Vector Sync` ### Editor Context (right-click) `^O Save Buffer` · `^X Close Tab` · `^B Build File` · `^L Lint Syntax` · `Comment Selection` · `Uncomment Selection` · `Upper Case` · `Lower Case` · `Insert Timestamp` --- ## Supported Languages Syntax highlighting is auto-detected by file extension. Manual override is available via the Syntax menu. | Extension | Language | Extension | Language | |-----------|----------|-----------|----------| | `.rs` | Rust | `.rb` | Ruby | | `.py` `.pyw` | Python | `.php` `.phtml` | PHP | | `.c` `.h` | C | `.java` | Java | | `.cpp` `.hpp` `.cc` `.cxx` | C++ | `.cs` | C# | | `.sh` `.bash` `.zsh` | Shell | `.sql` | SQL | | `.js` `.mjs` `.cjs` | JavaScript | `.r` | R | | `.ts` `.tsx` | TypeScript | `.lua` | Lua | | `.md` | Markdown | `.pl` `.pm` | Perl | | `.html` `.htm` | HTML | `.ex` `.exs` | Elixir | | `.css` `.scss` `.sass` `.less` | CSS | `.hs` | Haskell | | `.json` | JSON | `.scala` | Scala | | `.xml` | XML | `.swift` | Swift | | `.yaml` `.yml` | YAML | `.kt` `.kts` | Kotlin | | `.toml` | TOML | `.dart` | Dart | | `.ps1` `.psm1` | PowerShell | `.bat` `.cmd` | Batch | | `.conf` `.cfg` `.ini` | Config/INI | `.vbs` | VBScript | | Dockerfile / Containerfile | Dockerfile | `.go` | Go | Special filenames: `Makefile`, `*.rc` (Shell), `nginx*` (Nginx), `apache*`/`httpd*` (Apache) --- ## Project Structure ``` scitano/ ├── Cargo.toml # Package manifest (iced 0.13, edition 2021, GPLv2) ├── Cargo.lock # Dependency lockfile ├── LICENSE # GPLv2 full text ├── build.sh # Release build script ├── screenshot.png # Application screenshot ├── README.md # This file └── src/ ├── main.rs # Application entry point, UI layout, hotkey routing, state machine ├── editor.rs # EditorTab: buffer model, file I/O, syntax detection, symbol parsing ├── config.rs # User configuration (tab width, wrap, auto-save) └── theme.rs # Dark theme: color constants, panel/button/container styles ``` --- ## License GPLv2 — see [LICENSE](LICENSE) for the full text. Jeremy Anderson — info@dcos.net — https://git.dcos.net/dcosnet/scitano/