Skip to content

Commit aeb8345

Browse files
committed
Avoid polluting base classes with vi undo logic
1 parent d3e358d commit aeb8345

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

Lib/_pyrepl/commands.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ def do(self) -> None:
6161

6262

6363
class KillCommand(Command):
64-
modifies_buffer = True
65-
6664
def kill_range(self, start: int, end: int) -> None:
6765
if start == end:
6866
return
@@ -424,8 +422,6 @@ def do(self) -> None:
424422

425423

426424
class backspace(EditCommand):
427-
modifies_buffer = True
428-
429425
def do(self) -> None:
430426
r = self.reader
431427
b = r.buffer
@@ -439,8 +435,6 @@ def do(self) -> None:
439435

440436

441437
class delete(EditCommand):
442-
modifies_buffer = True
443-
444438
def do(self) -> None:
445439
r = self.reader
446440
b = r.buffer

Lib/_pyrepl/reader.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ def make_default_commands() -> dict[CommandName, type[Command]]:
173173
(r",", "vi-repeat-find-opposite"),
174174

175175
# Edit commands
176-
(r"x", "delete"),
176+
(r"x", "vi-delete"),
177177
(r"i", "vi-insert-mode"),
178178
(r"a", "vi-append-mode"),
179179
(r"A", "vi-append-eol"),
@@ -207,12 +207,12 @@ def make_default_commands() -> dict[CommandName, type[Command]]:
207207
(r"\<down>", "down"),
208208
(r"\<home>", "beginning-of-line"),
209209
(r"\<end>", "end-of-line"),
210-
(r"\<delete>", "delete"),
210+
(r"\<delete>", "vi-delete"),
211211
(r"\<backspace>", "left"),
212212

213213
# Control keys (important ones that work in both modes)
214214
(r"\C-c", "interrupt"),
215-
(r"\C-d", "delete"),
215+
(r"\C-d", "vi-delete"),
216216
(r"\C-l", "clear-screen"),
217217
(r"\C-r", "reverse-history-isearch"),
218218

Lib/_pyrepl/vi_commands.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22
Vi-specific commands for pyrepl.
33
"""
44

5-
from .commands import Command, MotionCommand, KillCommand
5+
from .commands import Command, MotionCommand, KillCommand, delete
66
from . import input as _input
77
from .types import ViFindDirection
88
from .trace import trace
99

1010

11+
class ViKillCommand(KillCommand):
12+
"""Base class for Vi kill commands that modify the buffer."""
13+
modifies_buffer = True
14+
15+
1116
# ============================================================================
1217
# Vi-specific Motion Commands
1318
# ============================================================================
@@ -112,7 +117,12 @@ def do(self) -> None:
112117
# Delete Commands
113118
# ============================================================================
114119

115-
class vi_delete_word(KillCommand):
120+
class vi_delete(delete):
121+
"""Delete character under cursor (x)."""
122+
modifies_buffer = True
123+
124+
125+
class vi_delete_word(ViKillCommand):
116126
"""Delete from cursor to start of next word (dw)."""
117127
def do(self) -> None:
118128
r = self.reader
@@ -122,28 +132,28 @@ def do(self) -> None:
122132
self.kill_range(r.pos, end)
123133

124134

125-
class vi_delete_line(KillCommand):
135+
class vi_delete_line(ViKillCommand):
126136
"""Delete entire line content (dd)."""
127137
def do(self) -> None:
128138
r = self.reader
129139
self.kill_range(r.bol(), r.eol())
130140

131141

132-
class vi_delete_to_bol(KillCommand):
142+
class vi_delete_to_bol(ViKillCommand):
133143
"""Delete from cursor to beginning of line (d0)."""
134144
def do(self) -> None:
135145
r = self.reader
136146
self.kill_range(r.bol(), r.pos)
137147

138148

139-
class vi_delete_to_eol(KillCommand):
149+
class vi_delete_to_eol(ViKillCommand):
140150
"""Delete from cursor to end of line (d$ or D)."""
141151
def do(self) -> None:
142152
r = self.reader
143153
self.kill_range(r.pos, r.eol())
144154

145155

146-
class vi_delete_char_before(KillCommand):
156+
class vi_delete_char_before(ViKillCommand):
147157
"""Delete character before cursor (X)."""
148158
def do(self) -> None:
149159
r = self.reader
@@ -343,7 +353,7 @@ def do(self) -> None:
343353
# Change Commands
344354
# ============================================================================
345355

346-
class vi_change_word(KillCommand):
356+
class vi_change_word(ViKillCommand):
347357
"""Change from cursor to end of word (cw)."""
348358
def do(self) -> None:
349359
r = self.reader
@@ -354,15 +364,15 @@ def do(self) -> None:
354364
r.enter_insert_mode()
355365

356366

357-
class vi_change_to_eol(KillCommand):
367+
class vi_change_to_eol(ViKillCommand):
358368
"""Change from cursor to end of line (C)."""
359369
def do(self) -> None:
360370
r = self.reader
361371
self.kill_range(r.pos, r.eol())
362372
r.enter_insert_mode()
363373

364374

365-
class vi_substitute_char(KillCommand):
375+
class vi_substitute_char(ViKillCommand):
366376
"""Delete character under cursor and enter insert mode (s)."""
367377
def do(self) -> None:
368378
r = self.reader

0 commit comments

Comments
 (0)