Skip to content

Commit 1747c53

Browse files
authored
chore(readme): update readme for more info [skip-ci] (#3)
1 parent 0aab5c0 commit 1747c53

1 file changed

Lines changed: 136 additions & 59 deletions

File tree

README.md

Lines changed: 136 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,143 @@
1-
# GoVim
1+
# GoVim 🚀
22

3-
Keyboard-driven navigation for macOS - click and scroll without a mouse.
3+
<div align="center">
44

5-
## Features
5+
[![License](https://img.shields.io/github/license/y3owk1n/govim)](LICENSE)
6+
![Platform](https://img.shields.io/badge/platform-macOS-lightgrey)
7+
![Go Version](https://img.shields.io/github/go-mod/go-version/y3owk1n/govim)
8+
[![Latest Release](https://img.shields.io/github/v/release/y3owk1n/govim)](https://github.com/y3owk1n/govim/releases)
69

7-
- **Hint Mode** - Show labels on clickable elements, type to click
8-
- **Scroll Mode** - Vim-style scrolling (j/k/h/l) anywhere
9-
- **Universal** - Works in browsers, native apps, Electron apps
10-
- **Electron & Chrome Support** - Built-in support for VS Code, Windsurf, Chrome, and more
11-
- **Fast** - Event tap for key capture, CGEvent for scrolling
12-
- **Configurable** - TOML config file
10+
**Keyboard-driven navigation for macOS - Navigate and click without touching your mouse 🖱️**
1311

14-
## Quick Start
12+
[Installation](#installation)
13+
[Features](#features)
14+
[Usage](#usage)
15+
[Configuration](#configuration)
16+
17+
</div>
18+
19+
## ✨ Features
20+
21+
- 🎯 **Hint Mode** - Click any UI element using keyboard shortcuts
22+
- 📜 **Scroll Mode** - Vim-style scrolling in any application
23+
- 🌐 **Universal** - Works with native macOS apps and Electron apps
24+
-**Performance** - Built with native macOS APIs for instant response
25+
- 🛠️ **Customizable** - Configure hints, hotkeys, and behaviors via TOML
26+
- 🎨 **Minimal UI** - Non-intrusive hints that don't get in your way
27+
28+
## 🚀 Installation
29+
30+
### Homebrew (Recommended)
31+
32+
```bash
33+
brew tap y3owk1n/tap
34+
brew install y3owk1n/tap/govim
35+
```
36+
37+
### Manual Build
1538

1639
```bash
40+
# Clone the repository
41+
git clone https://github.com/y3owk1n/govim.git
42+
cd govim
43+
1744
# Build
1845
just build
1946

20-
# Check version
21-
./bin/govim --version
22-
2347
# Run
2448
./bin/govim
2549
```
2650

27-
**Required**: Grant Accessibility permissions in System Settings → Privacy & Security → Accessibility
51+
### Required Permissions
52+
53+
⚠️ Grant Accessibility permissions in:
54+
System Settings → Privacy & Security → Accessibility
2855

29-
## Usage
56+
## 🎮 Usage
3057

3158
### Hint Mode
3259

33-
1. Press `Cmd+Shift+Space`
34-
2. Type the label shown on the element (e.g., "aa", "ab")
35-
3. Element is clicked automatically
36-
4. Press `Escape` to exit
60+
1. Press `Cmd+Shift+Space` (default)
61+
2. Clickable elements show hint labels
62+
3. Type the label to click (e.g., "aa", "ab")
63+
4. Press `Esc` to exit
3764

3865
### Scroll Mode
3966

40-
1. Press `Cmd+Shift+J`
41-
2. Use `j`/`k` to scroll down/up, `h`/`l` for left/right
42-
3. Press `Escape` to exit
67+
1. Press `Cmd+Shift+J` (default)
68+
2. Use Vim-style navigation:
69+
- `j` / `k` - Scroll down/up
70+
- `h` / `l` - Scroll left/right
71+
- `c-d` / `c-u` - Page down/up
72+
- `gg` / `G` - Top/bottom
73+
3. Press `Esc` to exit
4374

4475
### Menu Bar
4576

46-
Click the ⌨️ icon to quit GoVim.
77+
The ⌨️ icon in your menu bar provides:
4778

48-
## Configuration
79+
- Quit option
4980

50-
Config file: `~/Library/Application Support/govim/config.toml`
81+
## ⚙️ Configuration
82+
83+
Config file location can be any of the following:
84+
85+
- Macos Convention: `~/Library/Application Support/govim/config.toml`
86+
- XDG: `~/.config/govim/config.toml`
87+
88+
or any other location specified via the `--config` flag.
5189

5290
### Example Configuration
5391

5492
```toml
5593
[general]
56-
hint_characters = "asdfghjkl"
57-
hint_style = "alphabet"
94+
hint_characters = "asdfghjkl" # Characters used for hints
95+
hint_style = "alphabet" # "alphabet" or "numeric"
5896

5997
[accessibility]
60-
# Global roles used for all apps
61-
clickable_roles = ["AXButton", "AXCheckBox", "AXLink", ...]
98+
# Clickable elements
99+
clickable_roles = [
100+
"AXButton",
101+
"AXCheckBox",
102+
"AXMenuItem",
103+
"AXRadioButton",
104+
"AXLink"
105+
]
62106
scrollable_roles = ["AXScrollArea"]
63107

64-
# Per-app configurations (optional)
65-
# Add additional roles for specific apps
66-
[[accessibility.app_configs]]
67-
bundle_id = "com.apple.Safari"
68-
additional_clickable_roles = ["AXGroup", "AXImage"]
69-
additional_scrollable_roles = ["AXWebArea"]
70-
71-
[accessibility.electron_support]
72-
enable = true
73-
additional_bundles = ["com.google.Chrome"]
74-
75108
[hotkeys]
76109
activate_hint_mode = "Cmd+Shift+Space"
77110
activate_scroll_mode = "Cmd+Shift+J"
78111

79-
[scroll]
80-
scroll_speed = 50
81-
highlight_color = "#FF0000"
82-
83112
[hints]
84113
font_size = 14
85114
background_color = "#FFD700"
86115
text_color = "#000000"
116+
opacity = 0.9
117+
118+
[scroll]
119+
scroll_speed = 50
120+
```
121+
122+
See [`configs/default-config.toml`](configs/default-config.toml) for all available options.
123+
124+
### Application Support
125+
126+
GoVim works with:
127+
128+
- Native macOS applications
129+
- Electron-based apps (VS Code, Chrome, etc.)
130+
- Web browsers
131+
- System UI elements
132+
133+
For app-specific settings, find the bundle ID using:
134+
135+
```bash
136+
osascript -e 'id of app "App Name"'
87137
```
88138

139+
## 🤝 Contributing
140+
89141
See `configs/default-config.toml` for all available options.
90142

91143
### Per-App Role Configuration
@@ -97,11 +149,13 @@ GoVim supports global and per-app accessibility role configurations:
97149
- The final roles used = global roles + app-specific additional roles (merged)
98150

99151
To find an app's bundle ID:
152+
100153
```bash
101154
osascript -e 'id of app "AppName"'
102155
```
103156

104157
Example per-app configuration:
158+
105159
```toml
106160
[[accessibility.app_configs]]
107161
bundle_id = "com.microsoft.VSCode"
@@ -159,14 +213,40 @@ Activate different modes (requires GoVim to be running):
159213
# Activate hint mode (direct click)
160214
govim hints
161215

162-
# Activate hint mode with action selection
216+
# Activate hint mode (with action)
163217
govim hints_action
164218

165219
# Activate scroll mode
166220
govim scroll
221+
```
167222

168-
# Return to idle mode
169-
govim idle
223+
#### Electron Apps Support
224+
225+
GoVim includes special support for Electron-based applications like VS Code and Chrome, with:
226+
227+
- Optimized element detection
228+
- Improved scrolling behavior
229+
- Better hint placement
230+
231+
## 🤝 Contributing
232+
233+
Contributions welcome! Here's how:
234+
235+
1. Fork the repository
236+
2. Create a feature branch
237+
3. Make your changes
238+
4. Run `just test` and `just lint` to verify
239+
5. Submit a pull request
240+
241+
## 📝 License
242+
243+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
244+
245+
---
246+
247+
<div align="center">
248+
Made with ❤️ by <a href="https://github.com/y3owk1n">y3owk1n</a>
249+
</div>
170250
```
171251
172252
### Examples
@@ -209,13 +289,15 @@ Start it first with: govim launch
209289
### IPC Architecture
210290

211291
The CLI uses Unix domain sockets (`/tmp/govim.sock`) for communication with the daemon. This allows:
292+
212293
- Fast, reliable communication
213294
- Multiple CLI commands while daemon runs
214295
- Proper error handling when daemon is not running
215296

216297
## Architecture
217298

218299
GoVim is built with:
300+
219301
- **Go**: Core application logic
220302
- **CGo/Objective-C**: macOS Accessibility API integration
221303
- **Native macOS APIs**: For overlay rendering and hotkey management
@@ -251,27 +333,17 @@ govim/
251333
### Accessibility Permissions
252334

253335
If GoVim isn't working, ensure it has Accessibility permissions:
336+
254337
1. Open System Settings
255338
2. Go to Privacy & Security → Accessibility
256339
3. Enable GoVim
257340

258-
### Configuration Issues
259-
260-
Reload configuration without restarting:
261-
```bash
262-
govim reload-config
263-
```
264-
265-
Check configuration syntax:
266-
```bash
267-
govim validate-config
268-
```
269-
270341
### Logs
271342

272343
Logs are stored at: `~/Library/Logs/govim/app.log`
273344

274345
Enable debug logging in your config for troubleshooting:
346+
275347
```toml
276348
[logging]
277349
log_level = "debug"
@@ -282,6 +354,7 @@ log_level = "debug"
282354
If hints aren't appearing in Electron app content areas:
283355

284356
1. Ensure Electron support is enabled (default):
357+
285358
```toml
286359
[accessibility.electron_support]
287360
enable = true
@@ -298,12 +371,14 @@ When there are many clickable elements, hints will use 3 characters (e.g., "AAA"
298371
To reduce hint length:
299372

300373
1. **Reduce max hints** to stay within 2-character range:
374+
301375
```toml
302376
[performance]
303377
max_hints_displayed = 80 # With 9 chars, this keeps hints at 2 chars
304378
```
305379

306380
2. **Add more hint characters** for more 2-char combinations:
381+
307382
```toml
308383
[general]
309384
hint_characters = "asdfghjklqwertyuiop" # 19 chars = 361 two-char combos
@@ -316,6 +391,7 @@ To reduce hint length:
316391
To enable hints in Chrome:
317392

318393
1. Add to your config:
394+
319395
```toml
320396
[accessibility.electron_support]
321397
enable = true
@@ -363,6 +439,7 @@ MIT License - see LICENSE file for details
363439
## Acknowledgments
364440

365441
Inspired by:
442+
366443
- [Homerow](https://www.homerow.app/)
367444
- [Vimac](https://github.com/dexterleng/vimac)
368445
- [Shortcat](https://shortcat.app/)

0 commit comments

Comments
 (0)