72 Commits

Author SHA1 Message Date
439d3af7d3 [tui] Open application with no editor tab.
The explorer can be used to open the first tab.
2026-01-25 15:22:47 -05:00
ae9f787c81 [tui] Add About page within Help MenuBar. 2026-01-25 14:57:34 -05:00
76fe09f39b [tui] Implement View MenuBar actions.
You can show / hide the Logger and the Explorer now.
2026-01-25 12:45:52 -05:00
fa36a633ee [tui] Add File MenuBar options Reload and Close. 2026-01-25 12:04:31 -05:00
6c2f3f9005 [tui] Highlight border of active widget. 2026-01-25 10:16:08 -05:00
a3d850acd9 [tui] Clean up logger and editor.
Filter some noisy system logs in the Logger by default.
Use LLD for linking to silence warning for deprecated gold linker.
2026-01-25 10:16:03 -05:00
01eeb9f0ac [tui] Add more logging. 2026-01-25 09:07:41 -05:00
711f92b7dd [tui] Add EditorTab widget.
+ This adds support for tabbed editors wrapped by EditorTab widgets.
+ The Explorer widget now opens new EditorTabs when a file is selected
  with Enter.
+ The same file may not be opened multiple times.
+ Tabs can be switched with ALT+h or ALT+l (or ALT+ arrow keys)
+ Tabs cannot yet be closed :)

Fixes #9
2026-01-25 01:32:46 -05:00
5d2a7fa0a1 [tui] Rename title_bar.rs 2026-01-24 16:31:36 -05:00
45d665f8f6 [tui] Implement Widget for Explorer and MenuBar. 2026-01-24 16:30:22 -05:00
f531886255 [tui] Handle MenuBar actions.
Fixes #7.
2026-01-24 16:06:50 -05:00
4e9aedd34c [tui] Renames. 2026-01-24 15:40:19 -05:00
78c13f5766 [tui] Add TitleBar popups for drop-down menus. 2026-01-24 15:33:48 -05:00
82ad3ab29f [tui] Add TitleBar struct to handle rendering.
This will support adding drop-down menus.
For now, the widget just highlights which item you selected in the title
bar with left / right keys.
2026-01-24 14:22:42 -05:00
dd55d7fc5f [tui] Handle mouse input for all widgets.
This way you can still click to interact with the file explorer while
editing a file, for example, without changing widget focus.
2026-01-24 12:49:33 -05:00
aa4bf8aea6 [tui] Add help text for last focused widget.
+ Fill in TODO help text for all widgets.
2026-01-24 12:32:08 -05:00
029e0b2952 [tui] Remove AppComponent data.
It just seems to be simpler this way.
2026-01-24 11:46:00 -05:00
a3c1065f96 [tui] Add bottom status bar with help text.
Fixes #3
2026-01-22 20:36:26 -05:00
0c87fda795 [tui] Add basic support for focusing widgets.
It's pretty bad but it allows to control which widget accepts input.
2026-01-22 19:47:59 -05:00
a4413cd052 [tui] Clean up logging. 2026-01-21 20:28:24 -05:00
4d81cd51a6 [tui] Add ComponentOf trait.
I think it will help with fetching a component by type from the
Components vector attached to App?
2026-01-20 20:50:36 -05:00
7149ad0118 [tui] Add debug console.
The input will not be handled correctly until #8 is complete, but the
input logic is there and was tested.

Fixes #5.
2026-01-20 20:50:27 -05:00
1e635ee059 [tui] Use anyhow::bail!() macro. 2026-01-20 19:14:34 -05:00
42a40fe7f3 [tui] Remove most usage of expect().
Still not quite sure what to do about some pieces in QML bindings for
the GUI.
2026-01-20 17:20:37 -05:00
ce2949159c [tui] Add AppComponent enum for storing all components. 2026-01-20 16:03:38 -05:00
3ffdcc2865 [gui] Update cxx-qt dependencies to 0.8.0. 2026-01-20 12:44:13 -05:00
ecd94a2621 Update to use clap.
Structopt is deprecated.
Also removed some unused dependencies.
2026-01-20 12:24:20 -05:00
2713d29285 [tui] Store SyntaxSet in the Editor. 2026-01-20 12:06:06 -05:00
d2846e1e4e [tui] Set tab title to file name.
Also update to use anyhow::Result in some places.
2026-01-20 12:00:24 -05:00
bccc5a35e2 [tui] Add function for refreshing editor contents.
It's still temporary, but at least it isn't done ad-hoc.
2026-01-19 18:37:45 -05:00
e65eb20048 [tui] File explorer controls editor contents. 2026-01-19 17:41:46 -05:00
f10d4cd41d [tui] Allow saving file with CTRL+S.
+ Improved event handling in general.
2026-01-19 15:03:50 -05:00
507a4d8651 [tui] Cleanup and renames. 2026-01-19 10:27:06 -05:00
ce6c12f068 [tui] Move default input logic into ClideComponent. 2026-01-18 11:02:41 -05:00
fe6390c1cd [tui] Add edtui editor for basic vim emulation. 2026-01-18 10:09:28 -05:00
a8de77f370 [tui] WIP neovim editor. 2026-01-17 19:21:14 -05:00
b35b98743b [tui] Clean up Border titles. 2026-01-17 17:39:13 -05:00
733a43ccde [tui] Add basic component trait. 2026-01-17 17:18:34 -05:00
b65565adfa [tui] Add Explorer widget for left panel. 2026-01-17 15:07:26 -05:00
fac6ea6bcd Create App struct for TUI. 2026-01-17 14:04:02 -05:00
7fe3e3e14d WIP ratatui. 2026-01-17 11:41:48 -05:00
cf59fdfcca Embed SVG icons. 2025-04-19 13:49:29 -04:00
6a4957588d Pass root path to GUI process. 2025-04-13 13:47:12 -04:00
f4242f7749 Factor out TUI code. 2025-04-13 12:17:11 -04:00
fd3c8fb204 Factor out GUI code. 2025-04-13 12:15:31 -04:00
fd9d47f0c0 Clean up. 2025-04-13 12:09:18 -04:00
d53ef9aa1b Launch clide in separate process by default.
Improve CLI to support tui and gui modes.
Also supports attaching the GUI to the current terminal via -g
2025-04-13 11:58:28 -04:00
a29ae43e84 Use CWD if no directory is provided. 2025-04-13 11:01:37 -04:00
41a9a2a3bf Use structopt. 2025-04-13 10:21:02 -04:00
7bf6c3299c Add basic CLI for launching head(less) mode. 2025-04-13 09:35:55 -04:00
90c10d2a16 Debug missing console placeholder text.
It appears on resizing horizontally
2025-04-13 08:31:41 -04:00
2dcf0529d1 Custom highlighting to fix UI bugs.
+ Selecting text caused blurry editor view.
+ Now prefers syntect theme background color over QML background color.
2025-04-12 13:33:39 -04:00
f740ff347b Fix file loading. 2025-03-31 22:56:57 -04:00
9b86553513 Add syntax highlighting with syntect. 2025-03-31 22:32:17 -04:00
365940267f Add some checks before reading file. 2025-03-31 19:26:04 -04:00
b426b88b79 Fix colors. 2025-03-30 21:58:38 -04:00
bdf942371c Add basic FileSystem view. 2025-03-30 21:38:57 -04:00
b62dce631f Add ClideTreeView. 2025-03-30 16:14:58 -04:00
1546eb1028 Add FileSystem Rust module. 2025-03-30 13:50:23 -04:00
4f3aebe64f Add basic stub for filesystem. 2025-03-30 13:14:58 -04:00
413500dad3 Add an about window. 2025-03-30 12:52:44 -04:00
b0064c2f69 Update README. 2025-03-30 12:00:27 -04:00
0f055603a2 Remove unused LineCount. 2025-03-30 11:51:23 -04:00
094ac92fe4 Reorganize qml files. 2025-03-30 11:49:00 -04:00
3b8e407632 Consolidate source files. 2025-03-30 11:47:16 -04:00
d2f5823594 Add RustColors singleton helper. 2025-03-30 11:20:21 -04:00
be9981291c Speed up animation for dock handles. 2025-03-29 20:20:28 -04:00
500a329dea Separate LineCount from main. 2025-03-29 20:14:42 -04:00
70e9f79c8a Separate ProjectView and Editor. 2025-03-29 18:00:16 -04:00
13a405a801 Add LineCount module. 2025-03-29 16:55:26 -04:00
a6d2fb9e31 Change colors. 2025-03-29 10:26:39 -04:00
8b71af06a8 Add placeholders for side panel and console. 2025-03-29 09:55:09 -04:00
3 changed files with 3 additions and 64 deletions

View File

@@ -3,7 +3,8 @@
CLIDE is an extendable command-line driven development environment written in Rust using the Qt UI framework that supports both full and headless Linux environments.
The GUI is written in QML compiled through Rust using the cxx-qt crate, while the TUI was implemented using the ratatui crate.
It's up to you to build your own development environment for your tools. Plugins are planned to be supported in the future for bringing your own language-specific tools or features.
It's up to you to build your own development environment for your tools.
To add tools for your purposes, create a plugin that implements the `ClidePlugin` trait. (This is currently under development and not yet available.)
Once you've created your plugin, you can submit a pull request to add a link to the git repository for your plugin to the final section in this README if you'd like to contribute.
The following packages must be installed before the application will build.
@@ -19,68 +20,6 @@ And of course, [Rust](https://www.rust-lang.org/tools/install).
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
## Usage
To install and run clide
```bash
git clone https://git.shaunreed.com/shaunrd0/clide
cd clide
cargo install --path .
```
After installation `clide` can be used directly
```bash
clide --help
Extendable command-line driven development environment written in Rust using the Qt UI framework.
If no flags are provided, the GUI editor is launched in a separate process.
If no path is provided, the current directory is used.
Usage: clide [OPTIONS] [PATH]
Arguments:
[PATH] The root directory for the project to open with the clide editor
Options:
-t, --tui Run clide in headless mode
-g, --gui Run the clide GUI in the current process, blocking the terminal and showing all output streams
-h, --help Print help
```
### TUI
The TUI is implemented using the ratatui crate and has the typical features you would expect from a text editor.
You can browse your project tree, open / close new editor tabs, and save / reload files.
Controls for the TUI are listed at the bottom of the window, and update depending on which widget you have focused.
For now, there are no language-specific features or plugins available for the TUI it is only a text editor.
To run the TUI, pass the `-t` or `--tui` flags.
```bash
# With cargo from the project root
cargo run -- -t
# Or via clide directly after installation
clide -t
```
![image](./resources/tui.png)
### GUI
The GUI is still in development. It is at this point a text viewer, instead of a text editor.
There are many placeholder buttons and features in the GUI that do nothing when used.
The GUI is run by default when executing the `clide` application.
```bash
# With cargo from the project root
cargo run
# Or via clide directly after installation
clide
```
## Development
It's recommended to use RustRover or Qt Creator for development.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 533 KiB

View File

@@ -6,7 +6,7 @@ use std::process::{Command, Stdio};
pub mod gui;
pub mod tui;
/// Extendable command-line driven development environment written in Rust using the Qt UI framework.
/// Command line interface IDE with full GUI and headless modes.
/// If no flags are provided, the GUI editor is launched in a separate process.
/// If no path is provided, the current directory is used.
#[derive(Parser, Debug)]