ShellBar is a tool designed to streamline how developers interact with their projects, especially in complex environments such as monorepos. It centralizes your most frequently used commands into a dedicated action bar within the shell, turning them into instant, one-click shortcuts.
- 1.1 Create
CMakeLists.txtwith libghostty-vt fetch and GTK4 dependencies - 1.2 Create
shellbar.c— entry point, AdwApplication init - 1.3 Create
sb_window.c/h— Adw.ApplicationWindow, basic layout - 1.4 Create
sb_terminal.c/h— terminal widget:-
sb_terminal_new()/sb_terminal_free() -
sb_terminal_pty_spawn()— forkpty with user's shell -
sb_terminal_pty_read()— drain PTY → ghostty_terminal_vt_write() -
sb_terminal_pty_write()— write to PTY (input + commands) -
sb_terminal_render()— Cairo draw callback for rendering cells -
sb_terminal_resize()— terminal resize
-
- 1.5 Keyboard input:
- Map GTK keys → GhosttyKey
- Use ghostty_key_encoder_encode() → pty_write()
- Support Ctrl, Alt, Shift, Super
- Direct UTF-8 fallback for unmapped symbols (*, ñ, !, @, etc.)
- 1.6 Mouse input:
- Click, selection (drag, double-click word, triple-click line, Shift+extend)
- Scroll via ghostty_mouse_encoder_encode()
- 1.7 Scrollback:
- Mouse wheel → ghostty_terminal_scroll_viewport()
- Visual scrollbar
- 1.8 Functional terminal — prompt visible, can type
- 2.1 Create
sb_toolbar.c/h:- Horizontal bar (Gtk.Box)
- Buttons with icon + label from config
- Flow layout, wrap if many buttons
- 2.2 Connect button → command:
- Click signal → write(pty_fd, command\n)
- Writes to the active tab's terminal
- 2.3 "+" button placeholder for adding commands
- 2.4 Configurable position: top / bottom / left / right
- 3.1 Create
sb_config.c/h:- key=value parser (similar to Ghostty)
- Load from
~/.config/shellbar/config - Load from
~/.config/shellbar/config.d/(include)
- 3.2 Define
SbConfigButtonstruct (name, command, icon) - 3.3 Populate toolbar from config (fallback to defaults)
- 3.4 Hot reload (SIGHUP → pipe → GLib IO watch)
- 3.5 Icon catalog:
- Embedded SVG icons
- GTK theme icon support
- Icon preview picker
- 4.1 Dark theme (AdwStyleManager → PREFER_DARK)
- 4.2 Minimalist HeaderBar:
- New tab button
[+]+Ctrl+T - Menu (New Tab, About, Quit) with GActions + GMenu
- No window title (AdwTabBar as title_widget)
- New tab button
- 4.3 Tabs (Adw.TabBar + Adw.TabView):
- Open/close tabs (each with its own terminal)
- Dynamic tab titles (from shell via OSC 0/2)
- Keyboard focus on terminal when switching tabs
- TabBar as standalone bar (not nested in header — fixes zero-height issue)
- 4.4 Thin scrollbar on the right
- 4.5 Animations: resize overlay, new tab transition
- 4.6 HiDPI
- 4.7 JetBrains Mono font (via Pango, fallback Monospace)
- 4.8 Ghostty-matching CSS:
- Rounded borders
- Refined spacing
- 5.1 Toolbar button shortcuts (Alt+1, Alt+2, ..., Alt+0)
- 5.2 Configurable keybinds
- 5.3 Drag & drop to reorder buttons
- 5.4 Tooltip shows command on hover
- 5.5 Visual feedback when executing command (brief highlight)
- 6.5 Terminal search (Ctrl+F) — inline search bar, match navigation, highlight with fade-out
- 6.1 Button groups/folders
- 6.2 Commands with variables (user input)
- 6.3 Export/import configuration
- 6.4 Split panes (horizontal/vertical)
- 6.6 Command completion notifications
- 7.1 Font zoom (Ctrl+= / Ctrl+-) with zoom level chip overlay
- 7.2 Visual button feedback (200ms flash on click)
- 7.3 Embedded SVG drag-handle icon (GResource, no theme dependency)
- 7.4 Utility bar toggle with tools SVG icon (green ON / gray OFF)
- 7.5 Preferences dialog rows: flat borders, extra padding
- 7.6 Drag-and-drop memory safety (weak pointer guards, deferred rebuild)
- 7.7 Search match highlight with rounded green border and fade-out on click
- 8.1 Command palette (Ctrl+P) — search and run from shell history + PATH executables
- 8.2 Inline ghost-text autocomplete with command history support
- 8.3 Autocomplete uses shell history first, falls back to PATH executables
- 8.4 Autocomplete accepts with Right arrow only when cursor hasn't moved
- 8.5 Autocomplete clears on navigation keys (Left, Up, Down, etc.)
- 8.6 Configurable button bar position: top / bottom / left / right
- 8.7 Preferences Settings page with button bar position dropdown
- 8.8 Hot-reload support for button bar position changes
- 8.9 Tab transitions — smooth slide-in animation for new tabs
- 8.10 Resize overlay — terminal dimensions (cols × rows) on window resize
- 8.11 Minimalist new tab button with green accent hover
- 8.12 Tab pills styled as true tabs (straight top, curved bottom)
- 8.13 Fixed autocomplete use-after-free causing invalid UTF-8 ghost text
- 8.14 Button bar position reload preserves widget references (g_object_ref/unref)
- 8.15 Tabs aligned to top edge, tighter spacing via AdwToolbarView flat style
- M1 Document libghostty-vt API usage
- M2 Basic CI (build on Linux)
- M3 Script to update libghostty-vt tag
- M4 Changelog
Legend: [ ] pending · [x] completed · [-] in progress