Aster
- 6 Devlogs
- 43 Total hours
A customizable terminal emulator and multiplexer because I got very bored with my regular old windows terminal, hehe.
A customizable terminal emulator and multiplexer because I got very bored with my regular old windows terminal, hehe.
Devlog-6
in the last devlog I ended by saying “Next I want a shortcuts command to show all the shortcuts cause I am STARTING TO FORGET EVERYTHING”
…yeahhhh, i made that and an entire command system
Aster has COMMANDSSSSS
Before this, every action was linked to a keyboard shortcut. That was a mildly questionable.
SO i made shortcuts for tabs, panes, zooming, focusing the panes, search, copy, paste, opening the system monitor, blah blah and I was reaching the point where I MADE THE TERMINAL AND EVEN I COULDN’T REMEMBER HOW TO USE IT.
So instead of having all those actions just scattered around the keyboard handling code part, so I made a command system
So things like NewTab, CloseTab, SplitVertical, SplitHorizontal, and much more are now commands
The keyboard shortcuts just execute those commands now instead of each shortcut having its own completely separate logic.
whichhhhh also meant I could use those exact same commands from other places…
SHORTCUT MENU
I did the thing yep! i made the menu
There is a shortcuts overlay now that shows the shortcuts for tabs, panes, navigation and other terminal commands.
So I no longer need to remember ANYTHING to summon the features.
very useful considering this project now has TOOOO MANY CONTROLS
COMMAND PALETTE
There is also a searchable command palette now. So when you open it and start typing it, it would filter out the available aster commands.
Then you can select any one command you like and execute it just by clicking enter
ASTER HAS : COMMANDS
ok my absolute favourite feature. If you just type : in a fresh terminal input, Aster would intercept and open its OWN COMMAND LINE AHGHHHH.
I can now do things like :themes , :monitor, :shortcuts
and these are SPECIFICALLY aster command, not for powershell
BTW IT ALSO HAS AUTOCOMPLETE when you click tab after you typed some of your commands out.
A BUNCH MORE THEMES
I have been planning this for too long and NOW THEY EXIST
Now Aster has themes like: stardance, nebula, sunshine, mono and you can change them in the shortcuts command line.
NEXTTTT
Aster is much much closer to where I wanted it to be.
I only want some more patches here and there for this iteration of this project
FOR THE FINAL STRETCH:
AND THENNNNN ASTER IS DONE (for now)
Devlog-5
soooooo last devlog, I said I wanted to add some uniquely dedicated panes, something specific like something that could monitor RAM and memory while I was working.
… I may have gotten a little too further in that… like a 10 hours too further
SO ALL PANES WONT JUST BE TERMINALS
Originally every pane in Aster was fundamentally a terminal. That did work just fine, but I wanted something more cause i like torturing myself…
and I refactored the pane’s architecture. Instead of a pane directly holding a terminal, panes can now be different types using a rust enum called PaneKind
So, a pane is just like a container and anything in it can be different and it took a longggg longggg time to change all the code for this, but i can add SOOO many more stuff cause of this (i will tease them in the coming up section)
System Monitor
and then i just accidentally made my first specific pane
Ctrl+Shift+M now splits the current pane and opens up a super live System Monitor and it displays CPU usage, Memory usage, Disk usage, Network activity, System uptime, Running processes. Both the CPU and memory have cute little bars. (they use sysinfo to update btw)
Process List & Process Inspector and Terminator
You can select a process and pressing I or Enter to open up a specific process inspector and it shows the process specific stuff like specific things like name, pid, cpu usage and memory usage. and esc or q can get u out of the specific process.
You can kill processes now! just by pressing k in the specific process inspector and saying yes to a confirmation. Though the kill still uses the stored pid, finds the corresponding process through sysinfo and it would request the OS terminate it. (I may have killed Aster… with Aster…)
Originally I was just going to show the top five processes anddddd that lasted exactly one run, because I couldnt kill a process as it kept shifting as the cpu usage kept changing. So, i made it so u can see all the processes
NEXT
While making Aster I realised that WINDOWS TERMINAL ALREADY HAVE A LOT OF THE THINGS I WANTED.
SO i am changing directions: instead of making aster just another customizable terminal, i want it to be more of a terminal-centered around developer workspace. SO THIS IS THE FIRST STEP.
Next, i want a shortcuts command to show all the shortcuts cause i myself am starting to forget everything. AI Agent monitor so you can see what your agents are doing meanwhile u work.
AND yes i need to make the themes… and fix the bugs…
Devlog-4!
So last time, we were done with vertical panes, being able to have multiple tabs and plenty of shortcut keys to move through the tabs, cursor and panes much quicker.
PANE STUFF
I first added borders to each individual pane because it became visually messy without them and the ability to be able to resize the panes because some panes are more important than the other, obvi. I did the resizing using a regular hand dragging motion and using some simple math using the old width and height and the current hand grabbing motion’s position to calculate the new position of the panes.
Switching between panes have become much easier with its own shortcuts: ctrl + shift + (any arrow keys) to move between them. Apparently this was called spatial navigation when I was researching abt it.
TEXT SELECTION!!!
I did add text selection and copy and paste, because I got sick and tired of having to test some long and painful commands by hand, instead of just copy-pasting it from the internet. Paste => Ctrl + Shift + V and to copy just select the text by hovering over the text, and click and drag the text and Copy => Ctrl + C
Added a much more accurate scrollback to retrieve your terminal commands from even before you opened aster.
SEARCH UR STUFF
you can now also search whatever previous commands you typed into using Ctrl + Shift + F. Yes, I did make it run ASTER aster Aster 100 times to test search😭
so it will do the regular selection point from the start to end of the search terms and show the amount of times it has appeared in the terminal
it is just a super simple for loop searching for the particular search terms and the thing is rust is fast as hell, even if there are 10000 instances, rust is super fast just like c++… i have a feeling i fell out of love with java and found someone new
Moving on by the next devlog, I want to add some uniquely dedicated panes, maybe a pane that would monitor the RAM and memory usage on the side while you are working on your main pane or even a AI agent pane that would update on the progress of your AI agents. I also want to add a lot more themes, and just make the core template aesthetically pleasing while retaining its bare personality. (and fix the bugs… i have too much of them.
I will write the specificities a bit later, but! i added scroll up and down, keyboard shortcuts like arrow_up, arrow_down. arrow_right and arrow_left to edit text and ofc backspace and stuff like that. Then I worked on having multiple terminal windows and added shortcuts like ctrl+shift+t for a new tab, ctrl+tab to alternate between tabs, and ctrl+shift+tab to delete tabs. And also the multiplexer option where you can have two or more windows open at the same time!
im going to come back to put in the description in full detail
i need to write more and edit this cause i have bad internet So I started ASTER, a FULLY-customizable terminal emulator and multiplexer in Rust. This is also my first Rust project (I have had a little dusting up in Rust so dont worry too much). But I did have to get familiar with borrowing a bit more, and enums. I started with the terminal itself then the GUI. I created the Cell structure to show all individual characters and their formatting, then built a terminal width using a flat Vec. Each (x,y) coordinate represents an index using that y * width + x formula.