@@ -7,6 +7,113 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
88## [ Unreleased]
99
10+ ## [ 0.5.0] - 2026-01-07
11+
12+ ### Added
13+
14+ ** Major Feature: 45+ New Commands with Typestate Input Architecture**
15+
16+ This release significantly expands command coverage with a complete typestate-based input system for handling multi-key sequences.
17+
18+ - ** Selection Commands (12 new)** (#100 )
19+ - <kbd >s</kbd > select_regex: Select regex matches in selection
20+ - <kbd >S</kbd > split_selection: Split selection on regex
21+ - <kbd >Alt</kbd >-<kbd >s</kbd > split_selection_newlines: Split on newlines
22+ - <kbd >&</kbd > align_selections: Align selections to columns
23+ - <kbd >_ </kbd > trim_selections: Trim whitespace from selections
24+ - <kbd >Alt</kbd >-<kbd >-</kbd > merge_selections: Merge all selections
25+ - <kbd >Alt</kbd >-<kbd >_ </kbd > merge_consecutive: Merge adjacent selections
26+ - <kbd >C</kbd > copy_selection_next_line: Copy selection down
27+ - <kbd >Alt</kbd >-<kbd >C</kbd > copy_selection_prev_line: Copy selection up
28+ - <kbd >K</kbd > keep_selections_matching: Keep matching selections
29+ - <kbd >Alt</kbd >-<kbd >K</kbd > remove_selections_matching: Remove matching
30+ - <kbd >Ctrl</kbd >-<kbd >c</kbd > toggle_comments: Toggle line comments
31+
32+ - ** Search Commands (7 new)** (#100 )
33+ - <kbd >/</kbd > search_forward: Search forward with regex
34+ - <kbd >?</kbd > search_backward: Search backward with regex
35+ - <kbd >n</kbd > search_next: Jump to next match
36+ - <kbd >N</kbd > search_prev: Jump to previous match
37+ - <kbd >* </kbd > search_word_under_cursor: Search word forward
38+ - <kbd >#</kbd > search_word_backward: Search word backward (#105 )
39+ - <kbd >Alt</kbd >-<kbd >* </kbd > search_selection: Search selection text
40+
41+ - ** View Commands (6 new)** (#100 )
42+ - <kbd >z</kbd >/<kbd >zz</kbd > view_center: Center view on cursor
43+ - <kbd >zt</kbd > view_top: Scroll cursor to top
44+ - <kbd >zb</kbd > view_bottom: Scroll cursor to bottom
45+ - <kbd >zm</kbd > view_center_horizontal: Center horizontally
46+ - <kbd >zj</kbd > scroll_down: Scroll view down
47+ - <kbd >zk</kbd > scroll_up: Scroll view up
48+
49+ - ** Movement Commands (8 new)** (#105 , #106 )
50+ - <kbd >{</kbd > goto_prev_paragraph: Jump to previous paragraph
51+ - <kbd >}</kbd > goto_next_paragraph: Jump to next paragraph
52+ - <kbd >^</kbd > goto_first_nonblank: Alias for <kbd >gs</kbd >
53+ - <kbd >Ctrl</kbd >-<kbd >b</kbd > page_up: Scroll page up
54+ - <kbd >Ctrl</kbd >-<kbd >f</kbd > page_down: Scroll page down
55+ - <kbd >Ctrl</kbd >-<kbd >u</kbd > half_page_up: Scroll half page up
56+ - <kbd >Ctrl</kbd >-<kbd >d</kbd > half_page_down: Scroll half page down
57+ - <kbd >Alt</kbd >-<kbd >.</kbd > repeat_last_motion: Repeat last f/F/t/T
58+
59+ - ** Editing Commands (3 new)** (#106 )
60+ - <kbd >Alt</kbd >-<kbd >`</kbd > switch_to_uppercase: Convert to uppercase
61+ - <kbd >R</kbd > replace_with_yanked: Replace selection with yanked text
62+ - <kbd >Alt</kbd >-<kbd >J</kbd > join_selections_space: Join with spaces
63+
64+ - ** Selection Management (3 new)** (#106 )
65+ - <kbd >,</kbd > keep_primary_selection: Keep only primary selection
66+ - <kbd >Alt</kbd >-<kbd >,</kbd > remove_primary_selection: Remove primary selection
67+ - <kbd >Alt</kbd >-<kbd >x</kbd > shrink_to_line_bounds: Shrink selection to line bounds
68+
69+ - ** Surround Commands (Match Mode)** (#107 )
70+ - <kbd >ms</kbd > + char: Add surround (wrap selection with brackets/quotes)
71+ - <kbd >md</kbd > + char: Delete surround (remove enclosing pair)
72+ - <kbd >mr</kbd > + char + char: Replace surround (change pair type)
73+
74+ - ** Text Object Selection** (#108 )
75+ - <kbd >ma</kbd > + object: Select around (includes delimiters)
76+ - <kbd >mi</kbd > + object: Select inside (excludes delimiters)
77+ - Supported objects: ` w ` , ` W ` , ` ( ` , ` [ ` , ` { ` , ` < ` , ` " ` , ` ' ` , `` ` `` , ` p `
78+
79+ - ** Lesson Navigation** (#103 )
80+ - Next/Previous scenario navigation after completion
81+ - <kbd >n</kbd > to go to next lesson from Results screen
82+ - <kbd >p</kbd > to go to previous lesson
83+ - <kbd >l</kbd > to return to scenario list
84+
85+ ### Changed
86+
87+ - ** Typestate Input Architecture** (#100 , #102 )
88+ - Replaced ` command_buffer: String ` with ` InputStateMachine `
89+ - Added ` InputStateAccess ` trait for uniform state access
90+ - 8 pending states: ` FindCharPending ` , ` TillCharPending ` , ` SurroundAddPending ` , ` SurroundDeletePending ` , ` SurroundReplacePending ` , ` TextObjectAroundPending ` , ` TextObjectInsidePending ` , ` ViewPending `
91+ - Type-safe state transitions at compile time
92+ - ` FindState ` module to track last find/till motion for repeat
93+
94+ - ** Command System**
95+ - Extended command constants for all new commands
96+ - Extended ` cmd_to_key_events() ` for multi-key command sequences
97+ - Unified handler pattern across all pending states
98+
99+ ### Fixed
100+
101+ - ** Alt-, Command** (#106 )
102+ - Fixed ` Alt-, ` to correctly call ` remove_primary_selection `
103+ - Was incorrectly mapped to ` repeat_last_motion_reverse ` (Vim feature, not Helix)
104+
105+ - ** Empty Document Handling** (#108 )
106+ - Fixed panic in ` find_surrounding_pair() ` when document is empty
107+ - Fixed panic in ` select_around_paragraph() ` / ` select_inside_paragraph() ` for empty documents
108+ - Added early returns with safe defaults for edge cases
109+
110+ ### Quality
111+
112+ - ** Tests** : 1116 (was 845, +271 new tests)
113+ - ** Clippy** : Zero warnings
114+ - ** Commands** : 45+ new commands (total ~ 90 commands supported)
115+ - ** Architecture** : Complete typestate input system for all multi-key sequences
116+
10117## [ 0.4.8] - 2026-01-06
11118
12119### Added
@@ -866,7 +973,8 @@ With this release, all Phase 1 components are fully implemented:
866973
867974---
868975
869- [ Unreleased ] : https://github.com/bug-ops/helix-trainer/compare/v0.4.8...HEAD
976+ [ Unreleased ] : https://github.com/bug-ops/helix-trainer/compare/v0.5.0...HEAD
977+ [ 0.5.0 ] : https://github.com/bug-ops/helix-trainer/compare/v0.4.8...v0.5.0
870978[ 0.4.8 ] : https://github.com/bug-ops/helix-trainer/compare/v0.4.7...v0.4.8
871979[ 0.4.7 ] : https://github.com/bug-ops/helix-trainer/compare/v0.4.6...v0.4.7
872980[ 0.4.6 ] : https://github.com/bug-ops/helix-trainer/compare/v0.4.5...v0.4.6
0 commit comments