iterm2 2.29__tar.gz → 2.30__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iterm2-2.29 → iterm2-2.30}/PKG-INFO +1 -1
- {iterm2-2.29 → iterm2-2.30}/iterm2/_version.py +1 -1
- {iterm2-2.29 → iterm2-2.30}/iterm2/selection.py +4 -3
- {iterm2-2.29 → iterm2-2.30}/iterm2.egg-info/PKG-INFO +1 -1
- {iterm2-2.29 → iterm2-2.30}/iterm2.egg-info/SOURCES.txt +1 -0
- iterm2-2.30/tests/test_selection.py +52 -0
- {iterm2-2.29 → iterm2-2.30}/MANIFEST.in +0 -0
- {iterm2-2.29 → iterm2-2.30}/README.rst +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/__init__.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/alert.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/api_pb2.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/api_pb2.pyi +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/app.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/arrangement.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/auth.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/binding.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/broadcast.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/capabilities.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/color.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/colorpresets.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/connection.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/customcontrol.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/filepanel.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/focus.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/keyboard.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/lifecycle.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/mainmenu.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/notifications.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/preferences.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/profile.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/prompt.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/py.typed +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/registration.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/rpc.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/screen.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/session.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/statusbar.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/tab.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/tabgroup.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/tmux.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/tool.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/transaction.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/triggers.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/util.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/variables.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2/window.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2.egg-info/dependency_links.txt +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2.egg-info/not-zip-safe +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2.egg-info/requires.txt +0 -0
- {iterm2-2.29 → iterm2-2.30}/iterm2.egg-info/top_level.txt +0 -0
- {iterm2-2.29 → iterm2-2.30}/setup.cfg +0 -0
- {iterm2-2.29 → iterm2-2.30}/setup.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_auth.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_binding.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_color.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_connection.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_context_menu.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_floating_panes.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_init.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_mainmenu.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_profile.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_registration.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_session.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_triggers.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_util.py +0 -0
- {iterm2-2.29 → iterm2-2.30}/tests/test_window.py +0 -0
|
@@ -290,11 +290,11 @@ class Selection:
|
|
|
290
290
|
indexes |= indexes_to_add
|
|
291
291
|
|
|
292
292
|
# In multipart windowed ranges, add connectors for the endpoint
|
|
293
|
-
# of all but the last
|
|
293
|
+
# of all but the last range. Each enumerated range is on its
|
|
294
294
|
# own line.
|
|
295
295
|
if (
|
|
296
296
|
outer.windowed_coord_range.hasWindow
|
|
297
|
-
and outer_range.end
|
|
297
|
+
and outer_range.end != outer.windowed_coord_range.coordRange.end
|
|
298
298
|
and the_range.length > 0
|
|
299
299
|
):
|
|
300
300
|
connectors |= {the_range.max}
|
|
@@ -328,13 +328,14 @@ class Selection:
|
|
|
328
328
|
|
|
329
329
|
sorted_ranges = sorted(all_ranges, key=range_key)
|
|
330
330
|
for idx, sorted_range in enumerate(sorted_ranges):
|
|
331
|
+
# Make the end exclusive, as connectors are, before finding its index.
|
|
332
|
+
sorted_range.end.x += 1
|
|
331
333
|
end_index = (
|
|
332
334
|
sorted_range.start.x
|
|
333
335
|
+ sorted_range.start.y * width
|
|
334
336
|
+ sorted_range.length(width)
|
|
335
337
|
)
|
|
336
338
|
eol = (end_index not in connectors) and idx + 1 < len(sorted_ranges)
|
|
337
|
-
sorted_range.end.x += 1
|
|
338
339
|
stop = await callback(WindowedCoordRange(sorted_range), eol)
|
|
339
340
|
if stop:
|
|
340
341
|
break
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""Tests for iterm2.selection."""
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
|
|
5
|
+
from iterm2.selection import Selection, SelectionMode, SubSelection
|
|
6
|
+
from iterm2.util import CoordRange, Point, Range, WindowedCoordRange
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def test_windowed_lines_are_joined_but_end_with_a_newline():
|
|
10
|
+
"""Like iTerm2, each line of a windowed selection but the last is connected."""
|
|
11
|
+
windowed = SubSelection(
|
|
12
|
+
WindowedCoordRange(CoordRange(Point(12, 0), Point(15, 2)), Range(10, 10)),
|
|
13
|
+
SelectionMode.CHARACTER,
|
|
14
|
+
False,
|
|
15
|
+
)
|
|
16
|
+
later = SubSelection(
|
|
17
|
+
WindowedCoordRange(CoordRange(Point(0, 5), Point(4, 5))),
|
|
18
|
+
SelectionMode.CHARACTER,
|
|
19
|
+
False,
|
|
20
|
+
)
|
|
21
|
+
eols = []
|
|
22
|
+
|
|
23
|
+
async def callback(_coord_range, eol):
|
|
24
|
+
eols.append(eol)
|
|
25
|
+
return False
|
|
26
|
+
|
|
27
|
+
asyncio.run(Selection([windowed, later]).async_enumerate_ranges(80, callback))
|
|
28
|
+
|
|
29
|
+
assert eols == [False, False, True, False]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_connected_sub_selection_is_joined_to_the_next():
|
|
33
|
+
"""A connected sub-selection gets no newline after it."""
|
|
34
|
+
first = SubSelection(
|
|
35
|
+
WindowedCoordRange(CoordRange(Point(0, 0), Point(5, 0))),
|
|
36
|
+
SelectionMode.CHARACTER,
|
|
37
|
+
True,
|
|
38
|
+
)
|
|
39
|
+
second = SubSelection(
|
|
40
|
+
WindowedCoordRange(CoordRange(Point(0, 1), Point(5, 1))),
|
|
41
|
+
SelectionMode.CHARACTER,
|
|
42
|
+
False,
|
|
43
|
+
)
|
|
44
|
+
eols = []
|
|
45
|
+
|
|
46
|
+
async def callback(_coord_range, eol):
|
|
47
|
+
eols.append(eol)
|
|
48
|
+
return False
|
|
49
|
+
|
|
50
|
+
asyncio.run(Selection([first, second]).async_enumerate_ranges(80, callback))
|
|
51
|
+
|
|
52
|
+
assert eols == [False, False]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|