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
1845just 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+ ]
62106scrollable_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 ]
76109activate_hint_mode = " Cmd+Shift+Space"
77110activate_scroll_mode = " Cmd+Shift+J"
78111
79- [scroll]
80- scroll_speed = 50
81- highlight_color = "#FF0000"
82-
83112[hints ]
84113font_size = 14
85114background_color = " #FFD700"
86115text_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+
89141See ` 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
99151To find an app's bundle ID:
152+
100153``` bash
101154osascript -e ' id of app "AppName"'
102155```
103156
104157Example per-app configuration:
158+
105159``` toml
106160[[accessibility .app_configs ]]
107161bundle_id = " com.microsoft.VSCode"
@@ -159,14 +213,40 @@ Activate different modes (requires GoVim to be running):
159213# Activate hint mode (direct click)
160214govim hints
161215
162- # Activate hint mode with action selection
216+ # Activate hint mode ( with action)
163217govim hints_action
164218
165219# Activate scroll mode
166220govim 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
211291The 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
218299GoVim 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
253335If GoVim isn't working, ensure it has Accessibility permissions:
336+
2543371 . Open System Settings
2553382 . Go to Privacy & Security → Accessibility
2563393 . 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
272343Logs are stored at: ` ~/Library/Logs/govim/app.log `
273344
274345Enable debug logging in your config for troubleshooting:
346+
275347``` toml
276348[logging ]
277349log_level = " debug"
@@ -282,6 +354,7 @@ log_level = "debug"
282354If hints aren't appearing in Electron app content areas:
283355
2843561 . 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"
298371To reduce hint length:
299372
3003731 . ** 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
3063802 . ** 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:
316391To enable hints in Chrome:
317392
3183931 . 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
365441Inspired by:
442+
366443- [ Homerow] ( https://www.homerow.app/ )
367444- [ Vimac] ( https://github.com/dexterleng/vimac )
368445- [ Shortcat] ( https://shortcat.app/ )
0 commit comments