Document features and layers

♥ Minnie ♥ 2025-10-15 01:09:02 +08:00
parent 49a657ebb4
commit e5a33a8e62
Signed by: jasmine
GPG key ID: 8563E358D4E8040E
5 changed files with 371 additions and 1 deletions

84
Autocorrect.md Normal file

@ -0,0 +1,84 @@
# Autocorrect
Automatically fixes common typing mistakes in real-time. Uses Pascal Getreuer's [400-entry autocorrection dictionary](https://getreuer.info/posts/keyboards/autocorrection/index.html) for frequently mistyped words, reducing the need for manual backspacing and retyping.
## How It Works
The autocorrect feature monitors your keystrokes and automatically replaces common typos as you type. Corrections happen instantly and invisibly.
## Word-Start Corrections
Some corrections require a word boundary before them (indicated by `:` prefix). These only trigger at the start of a word:
| Typo | Correction |
|----------|------------|
| `:htere` | `there` |
| `:thier` | `their` |
| `:hwihc` | `which` |
| `:owudl` | `would` |
| `:htink` | `think` |
| `:goign` | `going` |
## Common Corrections
### Frequent Words
| Typo | Correction |
|------------|------------|
| `abbout` | `about` |
| `abotu` | `about` |
| `woudl` | `would` |
| `coudl` | `could` |
| `shoudl` | `should` |
| `whcih` | `which` |
| `whihc` | `which` |
| `teh` | `the` |
### Common Mistakes
| Typo | Correction |
|------------|------------|
| `peaple` | `people` |
| `peopel` | `people` |
| `peolpe` | `people` |
| `becasue` | `because` |
| `becuase` | `because` |
| `beacuse` | `because` |
| `thikn` | `think` |
| `thnigs` | `things` |
| `aroud` | `around` |
| `arround` | `around` |
| `alwasy` | `always` |
| `alwyas` | `always` |
| `anohter` | `another` |
| `beween` | `between` |
| `bewteen` | `between` |
### Positional Typos
| Typo | Correction |
|------------|------------|
| `realy` | `really` |
| `raelly` | `really` |
| `littel` | `little` |
| `befoer` | `before` |
| `bedore` | `before` |
| `beeing` | `being` |
| `almsot` | `almost` |
| `chnage` | `change` |
| `chekc` | `check` |
| `childen` | `children` |
| `claer` | `clear` |
| `comapny` | `company` |
## Examples
```
Type: "I htink this is graet" → "I think this is great"
Type: "peaple aroud the world" → "people around the world"
Type: "becuase I shoudl check" → "because I should check"
```
## Reference
For the complete dictionary of all 400 corrections, see our [autocorrect_data.h](../qmk_userspace/features/autocorrect_data.h).

53
Combos.md Normal file

@ -0,0 +1,53 @@
# Combos
Press multiple keys simultaneously to output different characters or trigger actions. Enables access to numbers, symbols, and commands without leaving the home position.
Inspired by Jonas Hietala's [T-34 keyboard layout](https://www.jonashietala.se/series/t-34/).
## Vertical Numbers
Press home row and upper row simultaneously for the column number:
| Combo | Output | Combo | Output |
|--------------|--------|--------------|--------|
| `W` + `C` | `1` | `Z` + `M` | `6` |
| `L` + `R` | `2` | `F` + `N` | `7` |
| `Y` + `S` | `3` | `O` + `E` | `8` |
| `P` + `T` | `4` | `U` + `I` | `9` |
| `B` + `G` | `5` | `'` + `A` | `0` |
## Home Row Shortcuts
### Left Hand
| Combo | Output | Description |
|--------------|------------------|------------------|
| `R` + `S` | `Tab` | Tab key |
| `S` + `T` | `Ctrl+Backspace` | Delete word |
### Right Hand
| Combo | Output | Description |
|--------------|-----------|--------------|
| `N` + `E` | `Escape` | Escape key |
| `E` + `I` | `Enter` | Enter key |
## Bottom Row Shortcuts
### Left Hand
| Combo | Output | Description |
|--------------|------------|---------------------|
| `J` + `V` | `:` | Vim command mode |
| `V` + `D` | `Gui+A` | XMonad prefix |
### Right Hand
| Combo | Output | Description |
|--------------|------------|---------------------|
| `H` + `/` | `Alt+A` | WezTerm prefix |
| `/` + `,` | `\` | Escape sequences |
## Reference
For the complete implementation, see our [combos.def](../qmk_userspace/keyboards/ferris/sweep/keymaps/sajenim/combos.def).

44
Home.md

@ -1 +1,43 @@
Welcome to the Wiki.
Welcome to the Wiki.
## Layout
**[Canary](https://github.com/Apsu/Canary)**<br>
Community-designed keyboard layout with over 55% rolling trigrams for a flowy typing experience. Emphasizes reduced same-finger bigrams and balanced hand usage. We use the standard Canary layout without modifications.
## Features
**[Autocorrect](Autocorrect)**<br>
Automatically fixes 400+ common typing mistakes in real-time
**[Combos](Combos)**<br>
Press multiple keys simultaneously for numbers, symbols, and shortcuts
**[Repeat and Magic Key](Repeat-and-Magic-Key)**<br>
Advanced repeat key implementation with intelligent context-aware completions
## Layers
**[Colemak Extend](https://colemakmods.github.io/ergonomic-mods/extend.html)** | **[DreymaR](https://dreymar.colemak.org/layers-extend.html)** | **[Seniply](https://stevep99.github.io/seniply/)**<br>
Our NAV and NUM layers are inspired by Colemak Extend, a navigation and editing layer concept that keeps frequently-used keys accessible from home position. Extend layers provide cursor movement, text editing shortcuts, and number access without reaching for dedicated keys. Our implementation adapts these principles for a split 34-key layout with application-specific modifier positioning.
**[Symbol Layer](Symbol-Layer)**<br>
Custom symbol layer optimized for programming with bracket rolls and logical operator placement
## Home Row Mods
**[Precondition's Guide](https://precondition.github.io/home-row-mods)**<br>
Modifier keys (Alt, Shift, GUI, Ctrl) placed on the home row as dual-function keys. Tap for letter, hold for modifier. Reduces finger movement and strain by eliminating reaches to traditional modifier positions.
### Our Positioning Rationale
Each modifier is positioned based on its primary application:
| Modifier | Application | Purpose |
|-----------|-------------|--------------------------------------|
| **GUI** | XMonad | Workspace switching, window management |
| **Alt** | WezTerm | Tab navigation, pane control |
| **Ctrl** | Neovim | Text manipulation, commands |
| **Shift** | - | Chording with other modifiers |
The NAV and NUM layers duplicate these modifiers on the opposite hand. This creates powerful home row chords: hold a modifier on one hand while accessing navigation keys or numbers on the other. For example, GUI+arrow keys manages XMonad windows, Alt+numbers switches WezTerm tabs, and Ctrl+navigation executes Neovim motions - all without moving from home position.

105
Repeat-and-Magic-Key.md Normal file

@ -0,0 +1,105 @@
# Repeat and Magic Key
Two intelligent repeat mechanisms on the thumb keys that reduce keystrokes and improve typing flow. Inspired by [magic sturdy](https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic_sturdy/magic_sturdy.md) by Ikcelaks.
## Repeat Key
Replays the last key press with intelligent overrides for common patterns.
### Repeat Key Overrides
| First Key | Output | Result | Frequency |
|-----------|-----------|-----------|-----------|
| `A` | `nd` | `and` | 3.293% |
| `I` | `ng` | `ing` | 3.476% |
| `Y` | `ou` | `you` | 3.492% |
| `N` | `f` | `nf` | 0.036% |
| `B` | `ecause` | `because` | - |
| `W` | `ould` | `would` | - |
| `,` | ` and` | `, and` | - |
| `Space` | `for` | ` for` | - |
### Path Shortcuts
| Keys | Output |
|-------------------|-------------|
| `` ` `` + Repeat | `~/` |
| `.` + Repeat | `../` |
| `.` + Repeat × 2 | `../../` |
## Magic Key
Context-aware completions based on the previous key. Reduces same-finger bigrams and enables common suffixes.
### Same Finger Bigrams
| First Key | Output | Bigram | Frequency |
|-----------|--------|--------|-----------|
| `Y` | `S` | YS | 0.123% |
| `E` | `O` | EO | 0.121% |
| `R` | `L` | RL | 0.114% |
| `U` | `I` | UI | 0.073% |
| `O` | `E` | OE | 0.060% |
| `P` | `T` | PT | 0.050% |
| `S` | `Y` | SY | 0.024% |
| `D` | `G` | DG | 0.021% |
### Magic Suffixes
| First Key | Output | Example |
|-----------|---------|----------------------------|
| `B` | `efore` | before |
| `I` | `on` | ion, action, question |
| `J` | `ust` | just, adjust |
| `M` | `ent` | ment, moment, movement |
| `N` | `ion` | nation, station |
| `T` | `ment` | treatment, statement |
| `V` | `er` | over, never, ever |
| `W` | `hich` | which |
| `X` | `es` | fixes, boxes |
| `,` | ` but` | text, but more text |
| `Space` | `the` | the |
### Coding Shortcuts
**Compound Assignment:**
| First Key | Output | Result |
|-----------|--------|--------|
| `+` | `=` | `+=` |
| `-` | `=` | `-=` |
| `*` | `=` | `*=` |
| `/` | `=` | `/=` |
**Auto-pair Cursor Positioning:**
| First Key | Output | Result (│ = cursor) |
|-----------|--------|---------------------|
| `>` | `Left` | `<│>` |
| `)` | `Left` | `(│)` |
| `]` | `Left` | `[│]` |
| `}` | `Left` | `{│}` |
## Usage Examples
### Natural Language
```
Type: "n" + Magic → "nation"
Type: "treat" + Magic → "treatment"
Type: "b" + Repeat → "because"
Type: "y" + Magic → "ys" (avoiding SFB)
```
### Coding
```
Type: "count +" + Magic → "count +="
Type: "{}" + Magic → "{│}" (cursor inside)
Type: "../" → "." + Repeat
Type: "../../" → "." + Repeat + Repeat
```
## Reference
For the complete implementation, see our [keymap.c](../qmk_userspace/keyboards/ferris/sweep/keymaps/sajenim/keymap.c).

86
Symbol-Layer.md Normal file

@ -0,0 +1,86 @@
# Symbol Layer
Our custom symbol layer is designed for programming efficiency, prioritizing fast rolls for common bracket pairs and logical symbol placement for operators.
Inspired by Pascal Getreuer's [symbol layer design](https://getreuer.info/posts/keyboards/symbol-layer/index.html).
## Design Philosophy
1. **Brackets as rolls** - Opening and closing pairs on the same hand for fluid typing
2. **Operators on home row** - Frequently used symbols in comfortable positions
3. **Related symbols grouped** - Logical grouping by symbol type and usage
4. **Minimize same-finger bigrams** - Avoid uncomfortable stretches
## Symbol Grouping
### Left Hand - Logic & Control
**Top row:** Angle brackets and minus for arrows and comparisons<br>
**Home row:** Parentheses and pipe for function calls and conditionals<br>
**Bottom row:** Boolean operators (`!`, `&`, `^`, `@`) for logic and bitwise operations
### Right Hand - Structures & Math
**Top row:** Square brackets for data structures<br>
**Home row:** Curly braces for code blocks, dollar for variables/strings<br>
**Bottom row:** Asterisk for multiplication and pointers
## Bracket Rolls
Fast same-hand rolls for common bracket pairs:
| Pair | Position | Roll Direction | Use Case |
|------|----------|----------------|----------|
| `<>` | Left top row | Index → Ring | HTML tags, comparisons |
| `()` | Left home row | Index → Ring | Function calls, grouping |
| `[]` | Right top row | Index → Ring | Arrays, indexing |
| `{}` | Right home row | Index → Ring | Code blocks, objects |
## Redirected Rolls
More complex patterns requiring direction changes on the same hand:
| Pattern | Keys | Use Case |
|---------|------|----------|
| `/**/` | `/``*``*``/` | C-style comment blocks |
| `${}` | `$``{``}` | Variable interpolation (shell, JS) |
| `{};` | `{``}``;` | Empty block/attribute scaffolding |
## Operator Positioning
### Arithmetic & Assignment
| Symbol | Position | Reasoning |
|--------|----------|-----------|
| `=` | Left home (middle) | Most common operator, prime position |
| `-` | Left top (middle) | Accessible for subtraction and arrows |
| `+` | Right top (pinky) | Addition, concatenation |
| `_` | Right top (middle) | Underscores in identifiers |
| `*` | Right bottom (index) | Multiplication, pointers, globs |
### Comparison & Compound Assignment
Relatively easy patterns with some tradeoffs:
| Pattern | Hand Pattern | Notes |
|---------|--------------|-------|
| `<=` | Left hand vertical | Easy |
| `>=` | Left hand vertical | Easy |
| `!=` | Left hand vertical | Easy |
| `+=` | Alternate hands | Comfortable |
| `*=` | Alternate hands | Comfortable |
| `-=` | Left hand SFB | Sacrifice for layout optimization |
### Arrow Operators
All arrow operators are positioned on the left hand for easy typing:
| Pattern | Keys | Use Case |
|---------|------|----------|
| `<-` | Top row inward roll | Assignment (R, Haskell) |
| `->` | Top row outward roll | Method access, lambdas |
| `=>` | Home to top diagonal | Fat arrow (JS, Rust) |
## Reference
For the complete implementation, see our [keymap.c](../qmk_userspace/keyboards/ferris/sweep/keymaps/sajenim/keymap.c).