railmux 0.3.2.dev2__py3-none-any.whl → 0.3.2.dev4__py3-none-any.whl
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.
- railmux/__init__.py +1 -1
- railmux/diagnostics.py +4 -0
- railmux/discovery.py +2 -2
- railmux/fast_display_client.py +32 -22
- railmux/fast_display_input.py +5 -2
- railmux/favorites.py +2 -2
- railmux/legacy_sessions.py +2 -0
- railmux/mux/tmux_backend.py +2 -0
- railmux/renames.py +2 -2
- railmux/runtime_config.py +4 -0
- railmux/self_update.py +2 -0
- railmux/session_index.py +1 -1
- railmux/settings.py +1 -1
- railmux/tmux_ctl.py +14 -4
- railmux/tool_panes.py +2 -0
- railmux/ui/app.py +6 -4
- {railmux-0.3.2.dev2.dist-info → railmux-0.3.2.dev4.dist-info}/METADATA +1 -1
- {railmux-0.3.2.dev2.dist-info → railmux-0.3.2.dev4.dist-info}/RECORD +22 -22
- {railmux-0.3.2.dev2.dist-info → railmux-0.3.2.dev4.dist-info}/WHEEL +0 -0
- {railmux-0.3.2.dev2.dist-info → railmux-0.3.2.dev4.dist-info}/entry_points.txt +0 -0
- {railmux-0.3.2.dev2.dist-info → railmux-0.3.2.dev4.dist-info}/licenses/LICENSE +0 -0
- {railmux-0.3.2.dev2.dist-info → railmux-0.3.2.dev4.dist-info}/top_level.txt +0 -0
railmux/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.3.2.
|
|
1
|
+
__version__ = "0.3.2.dev4"
|
railmux/diagnostics.py
CHANGED
|
@@ -151,6 +151,8 @@ def _tool_diagnostic(
|
|
|
151
151
|
env=environ,
|
|
152
152
|
capture_output=True,
|
|
153
153
|
text=True,
|
|
154
|
+
encoding="utf-8",
|
|
155
|
+
errors="replace",
|
|
154
156
|
timeout=3,
|
|
155
157
|
check=False,
|
|
156
158
|
)
|
|
@@ -300,6 +302,8 @@ def collect_doctor_snapshot(
|
|
|
300
302
|
env=effective_env,
|
|
301
303
|
capture_output=True,
|
|
302
304
|
text=True,
|
|
305
|
+
encoding="utf-8",
|
|
306
|
+
errors="replace",
|
|
303
307
|
timeout=2,
|
|
304
308
|
check=False,
|
|
305
309
|
)
|
railmux/discovery.py
CHANGED
|
@@ -43,9 +43,9 @@ def _path_cache_file() -> Path:
|
|
|
43
43
|
|
|
44
44
|
def _load_path_cache() -> dict[str, str]:
|
|
45
45
|
try:
|
|
46
|
-
data = json.loads(_path_cache_file().read_text())
|
|
46
|
+
data = json.loads(_path_cache_file().read_text(encoding="utf-8"))
|
|
47
47
|
return data if isinstance(data, dict) else {}
|
|
48
|
-
except (OSError, json.JSONDecodeError):
|
|
48
|
+
except (OSError, UnicodeError, json.JSONDecodeError):
|
|
49
49
|
return {}
|
|
50
50
|
|
|
51
51
|
|
railmux/fast_display_client.py
CHANGED
|
@@ -45,6 +45,7 @@ from railmux.fast_display_input import (
|
|
|
45
45
|
SelectionSegment,
|
|
46
46
|
SgrMouseEvent,
|
|
47
47
|
TermuxTouchKeyboard,
|
|
48
|
+
TouchKeyboardAction,
|
|
48
49
|
TerminalInputDecoder,
|
|
49
50
|
is_termux_environment,
|
|
50
51
|
page_key_direction,
|
|
@@ -223,6 +224,33 @@ def compact_status_row(screen: AppliedScreen) -> int | None:
|
|
|
223
224
|
return None
|
|
224
225
|
|
|
225
226
|
|
|
227
|
+
def termux_prompt_touch_action(
|
|
228
|
+
touch_keyboard: TermuxTouchKeyboard,
|
|
229
|
+
event: SgrMouseEvent,
|
|
230
|
+
history: LocalHistoryView,
|
|
231
|
+
screen: AppliedScreen | None,
|
|
232
|
+
*,
|
|
233
|
+
now: float | None = None,
|
|
234
|
+
) -> TouchKeyboardAction:
|
|
235
|
+
"""Classify one translated Termux tap against live screen route authority."""
|
|
236
|
+
if screen is None:
|
|
237
|
+
return TouchKeyboardAction()
|
|
238
|
+
clicked_pane_id = history.pane_id_at_position(event.x - 1, event.y - 1)
|
|
239
|
+
cursor_pane_id = history.pane_id_at_position(
|
|
240
|
+
screen.cursor_x,
|
|
241
|
+
screen.cursor_y,
|
|
242
|
+
)
|
|
243
|
+
return touch_keyboard.pointer_event(
|
|
244
|
+
event,
|
|
245
|
+
clicked_pane_id=clicked_pane_id,
|
|
246
|
+
cursor_pane_id=cursor_pane_id,
|
|
247
|
+
cursor_y=screen.cursor_y,
|
|
248
|
+
pane_frozen=history.pane_is_frozen(clicked_pane_id),
|
|
249
|
+
navigation_row=compact_status_row(screen),
|
|
250
|
+
now=now,
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
|
|
226
254
|
class ProbeError(RuntimeError):
|
|
227
255
|
"""A bounded, user-facing SSH display failure."""
|
|
228
256
|
|
|
@@ -2723,34 +2751,16 @@ def run(args: argparse.Namespace) -> int:
|
|
|
2723
2751
|
latest_screen.cursor_x, latest_screen.cursor_y
|
|
2724
2752
|
)
|
|
2725
2753
|
)
|
|
2726
|
-
clicked_pane_id = (
|
|
2727
|
-
None
|
|
2728
|
-
if latest_screen is None
|
|
2729
|
-
else history.pane_id_at_position(part.x - 1, part.y - 1)
|
|
2730
|
-
)
|
|
2731
|
-
cursor_pane_id = (
|
|
2732
|
-
None
|
|
2733
|
-
if latest_screen is None
|
|
2734
|
-
else history.pane_id_at_position(
|
|
2735
|
-
latest_screen.cursor_x,
|
|
2736
|
-
latest_screen.cursor_y,
|
|
2737
|
-
)
|
|
2738
|
-
)
|
|
2739
2754
|
status_row = (
|
|
2740
2755
|
compact_status_row(latest_screen)
|
|
2741
2756
|
if latest_screen is not None
|
|
2742
2757
|
else None
|
|
2743
2758
|
)
|
|
2744
|
-
touch_action =
|
|
2759
|
+
touch_action = termux_prompt_touch_action(
|
|
2760
|
+
touch_keyboard,
|
|
2745
2761
|
part,
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
cursor_y=0 if latest_screen is None else latest_screen.cursor_y,
|
|
2749
|
-
cursor_visible=(
|
|
2750
|
-
False if latest_screen is None else latest_screen.cursor_visible
|
|
2751
|
-
),
|
|
2752
|
-
pane_frozen=history.pane_is_frozen(clicked_pane_id),
|
|
2753
|
-
navigation_row=status_row,
|
|
2762
|
+
history,
|
|
2763
|
+
latest_screen,
|
|
2754
2764
|
now=time.monotonic(),
|
|
2755
2765
|
)
|
|
2756
2766
|
if touch_action.suspend_mouse:
|
railmux/fast_display_input.py
CHANGED
|
@@ -129,7 +129,6 @@ class TermuxTouchKeyboard:
|
|
|
129
129
|
clicked_pane_id: str | None,
|
|
130
130
|
cursor_pane_id: str | None,
|
|
131
131
|
cursor_y: int,
|
|
132
|
-
cursor_visible: bool,
|
|
133
132
|
pane_frozen: bool,
|
|
134
133
|
navigation_row: int | None = None,
|
|
135
134
|
now: float | None = None,
|
|
@@ -150,7 +149,6 @@ class TermuxTouchKeyboard:
|
|
|
150
149
|
or self._active
|
|
151
150
|
or self._close_reassert_pending
|
|
152
151
|
or pane_frozen
|
|
153
|
-
or not cursor_visible
|
|
154
152
|
or clicked_pane_id is None
|
|
155
153
|
or clicked_pane_id != cursor_pane_id
|
|
156
154
|
or (navigation_row is not None and event.y == navigation_row)
|
|
@@ -158,6 +156,11 @@ class TermuxTouchKeyboard:
|
|
|
158
156
|
or not self._is_plain_left_press(event)
|
|
159
157
|
):
|
|
160
158
|
return TouchKeyboardAction()
|
|
159
|
+
# DEC cursor visibility is presentation state, not prompt authority.
|
|
160
|
+
# Providers may hide the hardware cursor while retaining its exact
|
|
161
|
+
# input coordinates. The verified live-agent route, matching cursor
|
|
162
|
+
# route, unfrozen viewport, and bounded row distance remain the
|
|
163
|
+
# fail-closed authority for yielding one Termux tap.
|
|
161
164
|
requested_at = time.monotonic() if now is None else now
|
|
162
165
|
# A rapid reopen supersedes the delayed ownership reassertion queued by
|
|
163
166
|
# the previous close; Termux must receive this new native prompt tap.
|
railmux/favorites.py
CHANGED
|
@@ -29,10 +29,10 @@ class Favorites:
|
|
|
29
29
|
if not self._path.is_file():
|
|
30
30
|
return
|
|
31
31
|
try:
|
|
32
|
-
data = json.loads(self._path.read_text())
|
|
32
|
+
data = json.loads(self._path.read_text(encoding="utf-8"))
|
|
33
33
|
if isinstance(data, list):
|
|
34
34
|
self._ids = set(data)
|
|
35
|
-
except (json.JSONDecodeError, OSError):
|
|
35
|
+
except (json.JSONDecodeError, OSError, UnicodeError):
|
|
36
36
|
self._ids = set()
|
|
37
37
|
|
|
38
38
|
def _save(self) -> None:
|
railmux/legacy_sessions.py
CHANGED
railmux/mux/tmux_backend.py
CHANGED
railmux/renames.py
CHANGED
|
@@ -32,8 +32,8 @@ class Renames:
|
|
|
32
32
|
if not self._path.is_file():
|
|
33
33
|
return
|
|
34
34
|
try:
|
|
35
|
-
data = json.loads(self._path.read_text())
|
|
36
|
-
except (json.JSONDecodeError, OSError):
|
|
35
|
+
data = json.loads(self._path.read_text(encoding="utf-8"))
|
|
36
|
+
except (json.JSONDecodeError, OSError, UnicodeError):
|
|
37
37
|
return
|
|
38
38
|
if isinstance(data, dict):
|
|
39
39
|
self._titles = {
|
railmux/runtime_config.py
CHANGED
|
@@ -125,6 +125,8 @@ def check_executable(
|
|
|
125
125
|
env=None if environ is None else dict(environ),
|
|
126
126
|
capture_output=True,
|
|
127
127
|
text=True,
|
|
128
|
+
encoding="utf-8",
|
|
129
|
+
errors="replace",
|
|
128
130
|
timeout=timeout,
|
|
129
131
|
check=False,
|
|
130
132
|
)
|
|
@@ -168,6 +170,8 @@ def check_utf8_locale(
|
|
|
168
170
|
env=env,
|
|
169
171
|
capture_output=True,
|
|
170
172
|
text=True,
|
|
173
|
+
encoding="utf-8",
|
|
174
|
+
errors="replace",
|
|
171
175
|
timeout=timeout,
|
|
172
176
|
check=False,
|
|
173
177
|
)
|
railmux/self_update.py
CHANGED
railmux/session_index.py
CHANGED
|
@@ -92,7 +92,7 @@ def _scan_session(project: Project, jsonl_path: Path) -> SessionMeta | None:
|
|
|
92
92
|
last_stop_reason: str = "" # only set for assistant records
|
|
93
93
|
|
|
94
94
|
try:
|
|
95
|
-
with jsonl_path.open("r") as f:
|
|
95
|
+
with jsonl_path.open("r", encoding="utf-8", errors="replace") as f:
|
|
96
96
|
for line in f:
|
|
97
97
|
line = line.strip()
|
|
98
98
|
if not line:
|
railmux/settings.py
CHANGED
railmux/tmux_ctl.py
CHANGED
|
@@ -102,6 +102,8 @@ def _tmux_version_for_authority(
|
|
|
102
102
|
argv,
|
|
103
103
|
stderr=subprocess.DEVNULL,
|
|
104
104
|
text=True,
|
|
105
|
+
encoding="utf-8",
|
|
106
|
+
errors="replace",
|
|
105
107
|
timeout=2.0,
|
|
106
108
|
)
|
|
107
109
|
except (
|
|
@@ -1016,6 +1018,8 @@ def create_dual_pane_layout(
|
|
|
1016
1018
|
stdout=subprocess.PIPE,
|
|
1017
1019
|
stderr=subprocess.DEVNULL,
|
|
1018
1020
|
text=True,
|
|
1021
|
+
encoding="utf-8",
|
|
1022
|
+
errors="replace",
|
|
1019
1023
|
check=False,
|
|
1020
1024
|
)
|
|
1021
1025
|
except OSError:
|
|
@@ -1284,6 +1288,8 @@ def pane_process_alive(pane_id: str) -> bool:
|
|
|
1284
1288
|
["tmux", "display-message", "-p", "-t", pane_id, "#{pane_dead}"],
|
|
1285
1289
|
capture_output=True,
|
|
1286
1290
|
text=True,
|
|
1291
|
+
encoding="utf-8",
|
|
1292
|
+
errors="replace",
|
|
1287
1293
|
timeout=1,
|
|
1288
1294
|
)
|
|
1289
1295
|
return result.returncode == 0 and result.stdout.strip() == "0"
|
|
@@ -2772,7 +2778,8 @@ def new_detached_session(name: str, cmd: str,
|
|
|
2772
2778
|
try:
|
|
2773
2779
|
dead = subprocess.run(
|
|
2774
2780
|
["tmux", "list-panes", "-t", name, "-F", "#{pane_dead}"],
|
|
2775
|
-
capture_output=True, text=True,
|
|
2781
|
+
capture_output=True, text=True, encoding="utf-8",
|
|
2782
|
+
errors="replace", timeout=2,
|
|
2776
2783
|
)
|
|
2777
2784
|
if dead.returncode != 0:
|
|
2778
2785
|
# With tmux's default ``remain-on-exit off``, an immediately
|
|
@@ -2789,7 +2796,8 @@ def new_detached_session(name: str, cmd: str,
|
|
|
2789
2796
|
if dead.stdout.strip() == "1":
|
|
2790
2797
|
capture = subprocess.run(
|
|
2791
2798
|
["tmux", "capture-pane", "-t", name, "-p", "-S", "-20"],
|
|
2792
|
-
capture_output=True, text=True,
|
|
2799
|
+
capture_output=True, text=True, encoding="utf-8",
|
|
2800
|
+
errors="replace", timeout=2,
|
|
2793
2801
|
)
|
|
2794
2802
|
pane_content = capture.stdout.strip() if capture.returncode == 0 else ""
|
|
2795
2803
|
# Clean up the dead session — it can never recover.
|
|
@@ -2913,13 +2921,15 @@ def start_detached_holder(
|
|
|
2913
2921
|
dead = subprocess.run(
|
|
2914
2922
|
["tmux", "display-message", "-p", "-t", identity.pane_id,
|
|
2915
2923
|
"#{pane_dead}"],
|
|
2916
|
-
capture_output=True, text=True,
|
|
2924
|
+
capture_output=True, text=True, encoding="utf-8",
|
|
2925
|
+
errors="replace", timeout=2,
|
|
2917
2926
|
)
|
|
2918
2927
|
if dead.returncode == 0 and dead.stdout.strip() == "1":
|
|
2919
2928
|
capture = subprocess.run(
|
|
2920
2929
|
["tmux", "capture-pane", "-t", identity.pane_id,
|
|
2921
2930
|
"-p", "-S", "-20"],
|
|
2922
|
-
capture_output=True, text=True,
|
|
2931
|
+
capture_output=True, text=True, encoding="utf-8",
|
|
2932
|
+
errors="replace", timeout=2,
|
|
2923
2933
|
)
|
|
2924
2934
|
lines = [line.strip() for line in capture.stdout.splitlines()
|
|
2925
2935
|
if line.strip()] if capture.returncode == 0 else []
|
railmux/tool_panes.py
CHANGED
railmux/ui/app.py
CHANGED
|
@@ -1981,7 +1981,8 @@ class App:
|
|
|
1981
1981
|
import subprocess as _sp
|
|
1982
1982
|
try:
|
|
1983
1983
|
out = _sp.check_output(
|
|
1984
|
-
["less", "--version"], stderr=_sp.STDOUT, text=True,
|
|
1984
|
+
["less", "--version"], stderr=_sp.STDOUT, text=True,
|
|
1985
|
+
encoding="utf-8", errors="replace", timeout=3)
|
|
1985
1986
|
# "less 668 (GNU regular expressions)" → major version
|
|
1986
1987
|
ver = int(out.strip().split()[1].split(".")[0])
|
|
1987
1988
|
if ver >= 590:
|
|
@@ -6722,6 +6723,7 @@ class App:
|
|
|
6722
6723
|
f"\t#{{{orphan_marker.OPTION_NAME}}}"
|
|
6723
6724
|
f"\t#{{{_SESSION_BINDING_OPTION}}}"],
|
|
6724
6725
|
stderr=_sp.DEVNULL, text=True,
|
|
6726
|
+
encoding="utf-8", errors="replace",
|
|
6725
6727
|
)
|
|
6726
6728
|
except (OSError, _sp.CalledProcessError):
|
|
6727
6729
|
return False
|
|
@@ -9000,8 +9002,8 @@ class App:
|
|
|
9000
9002
|
return True
|
|
9001
9003
|
try:
|
|
9002
9004
|
source_stat = history_path.stat()
|
|
9003
|
-
lines = history_path.read_text().splitlines()
|
|
9004
|
-
except OSError:
|
|
9005
|
+
lines = history_path.read_text(encoding="utf-8").splitlines()
|
|
9006
|
+
except (OSError, UnicodeError):
|
|
9005
9007
|
return False
|
|
9006
9008
|
kept = []
|
|
9007
9009
|
changed = False
|
|
@@ -9081,7 +9083,7 @@ class App:
|
|
|
9081
9083
|
import json
|
|
9082
9084
|
record = json.dumps({"type": "ai-title", "aiTitle": new_title})
|
|
9083
9085
|
try:
|
|
9084
|
-
with session.jsonl_path.open("a") as f:
|
|
9086
|
+
with session.jsonl_path.open("a", encoding="utf-8") as f:
|
|
9085
9087
|
f.write(record + "\n")
|
|
9086
9088
|
except OSError:
|
|
9087
9089
|
synced = False
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
railmux/__init__.py,sha256=
|
|
1
|
+
railmux/__init__.py,sha256=GIZowKPo2qNGBQEy4LsFRJBGsrIZGhYatppNXNC-X_c,27
|
|
2
2
|
railmux/__main__.py,sha256=F060V6TUYogqDcKCWX-0BeHpk1TVSPgUfWAOmQ8-_Mo,86
|
|
3
3
|
railmux/atomic_file.py,sha256=oY2iI4Qj4meTwPLDO6xVHVSEhB9QV_q9Rs4jcpQ7X20,1730
|
|
4
4
|
railmux/background_index.py,sha256=njCt15lvT4GmJ9FH3m_0RqknN-0F58Gur_RmQP1Sc40,14143
|
|
@@ -6,19 +6,19 @@ railmux/cli.py,sha256=Bxu8bHlxDXZBKS2s-Iuj8xIGQi455zWhsxjMRn0MQ44,18552
|
|
|
6
6
|
railmux/codex_index.py,sha256=CCZK4QeYF6ewLoyxx3enFJ1hYoIwvHwe7KTAD2uJ6Hs,51787
|
|
7
7
|
railmux/config.py,sha256=M81oTSRsCKwn_WFfdOA8X2QGx_KdYeqV-rBBsrRB5SI,6252
|
|
8
8
|
railmux/config_cli.py,sha256=l7ic5TLj6Ka6BBD2OAZjsMMflaO3WAjarGXJysZHdDk,24456
|
|
9
|
-
railmux/diagnostics.py,sha256=
|
|
10
|
-
railmux/discovery.py,sha256=
|
|
9
|
+
railmux/diagnostics.py,sha256=xVjxvXZ3FN3E-bF-SXosW2vrVeqL6kIYzLvIgb5eiJo,21056
|
|
10
|
+
railmux/discovery.py,sha256=IPfVCrq_zAIlEgR-DF7LV11EqrEeFSYMx80iDyNbilM,12026
|
|
11
11
|
railmux/display_transport.py,sha256=JkQXCSMjj_ZSJxFiJs-bx6CX2W-d6liRHilLnic6ZJo,46381
|
|
12
|
-
railmux/fast_display_client.py,sha256=
|
|
12
|
+
railmux/fast_display_client.py,sha256=OEgK2KmhYnEM4lzVUbdok0qX4iaPQ5x9ycrppKQRuiY,135625
|
|
13
13
|
railmux/fast_display_history.py,sha256=unl2jyoEHMhgzEuAT_VcudHh1FnzNVNQY7_iBbpcbww,38545
|
|
14
|
-
railmux/fast_display_input.py,sha256=
|
|
14
|
+
railmux/fast_display_input.py,sha256=9uu8mTeh8Puzn_6JKq4hvJyyfTr7TVXayLaF1Q-xBCo,43926
|
|
15
15
|
railmux/fast_display_protocol.py,sha256=tV78OzcK78H1n-AKZBubcY3xCTXk5U6tKHFfJ3NWq3k,42781
|
|
16
16
|
railmux/fast_display_server.py,sha256=vYLmxOzEo24VPOqpbusTC-x5OKCxx0vfV27nWnjnQuc,87789
|
|
17
|
-
railmux/favorites.py,sha256=
|
|
17
|
+
railmux/favorites.py,sha256=oQIi3dGIeI9mj1UIqkQY_2IxMAEDyCewm3KS-pxNTVs,2120
|
|
18
18
|
railmux/fuzzy.py,sha256=3OOAqC1Kb1MlzO1AQjkvokh8-7yIHSeGp0pSUb-LARA,946
|
|
19
19
|
railmux/help_workspace.py,sha256=oa4T_HiDSdTxIB_Ndq2amKQPqh7wHIztCy8pQNr2Dfw,3568
|
|
20
20
|
railmux/launcher.py,sha256=hn4_hYHNF73fBzRI6183S8-_Sp9uMiGlffwlZZwUhVM,2034
|
|
21
|
-
railmux/legacy_sessions.py,sha256=
|
|
21
|
+
railmux/legacy_sessions.py,sha256=7onPumCBAq2nQ0rxcOecEx70Yo3abkrClTMuWO0Rnv4,3103
|
|
22
22
|
railmux/local_clipboard.py,sha256=YOzXfweBHbMOZVLgnCoKKUiTVnFnnGFaUMK6tRzmUaY,3321
|
|
23
23
|
railmux/local_open.py,sha256=jFsfWtCMRWY-QEkVHUP6aUzAVhPCL5OZVOQpKoALBoc,9348
|
|
24
24
|
railmux/models.py,sha256=nMF5AJTg60DiRdROOr3JgVhO-feMjdXMPLN0UXwkbX8,3162
|
|
@@ -28,17 +28,17 @@ railmux/orphan_marker.py,sha256=wGHVoAAFJfg9T3_mTp97CPK89L5OsVso244-s29xEHg,9006
|
|
|
28
28
|
railmux/pane_surface.py,sha256=Mgu1BOXFZ68nAOntNbJ_FoVZ7NrN_3nssCuutbT3VRs,3490
|
|
29
29
|
railmux/path_codec.py,sha256=fpSxQqvFo2T8xYucCC1BjayMGS9-6LWyTqn2TzQO6Hg,10831
|
|
30
30
|
railmux/remote_config.py,sha256=YZW7ANPS8Dse5YU2_aSA9V3ODGI9QFsKrkQuXYf9L08,9993
|
|
31
|
-
railmux/renames.py,sha256=
|
|
31
|
+
railmux/renames.py,sha256=LhbaZ_b0ox9Z9XzaQG2Eu5hBkiHphKnorwd8Ti7993A,2854
|
|
32
32
|
railmux/restart_state.py,sha256=IFGY81m4LX-9P1yo8U9cCkPaVne8ZDocZpJdvKShAo4,22596
|
|
33
|
-
railmux/runtime_config.py,sha256=
|
|
33
|
+
railmux/runtime_config.py,sha256=awboGj9k1OsVjTWLajPmVQbgTD4mWp_6Zz2UkJMW_50,6228
|
|
34
34
|
railmux/scroll_agent.py,sha256=TU8vIBt-37o0Znzl9DFKd2TUUhj41jxzBM2NNrNF6DA,6377
|
|
35
35
|
railmux/scroll_manager.py,sha256=c8Zdwv8Cfe2x0EXo-RI8nSWiCHKdOwnB5Af8vUX3n5s,9958
|
|
36
36
|
railmux/selection_isolation.py,sha256=Fgc3BQVra0LkWFanu17Y7crskC4AKdy1Fcp_RXMxjtU,6502
|
|
37
|
-
railmux/self_update.py,sha256=
|
|
37
|
+
railmux/self_update.py,sha256=1s6cJdX3UCbJzmETwXOwcZZbyX4UNiBO9DrJrWpmfPE,6926
|
|
38
38
|
railmux/session_cache.py,sha256=Sw5_d_z5B9tDOxFZKrCD8Qv2F0Wab7p0fxUCbv974uY,4826
|
|
39
|
-
railmux/session_index.py,sha256=
|
|
39
|
+
railmux/session_index.py,sha256=NN3ojfyj0eN9mPOhCflQXABkGKHOBHd3ZzeSM2Gvc1I,9811
|
|
40
40
|
railmux/setting_contracts.py,sha256=Xrb4t7Q0FJT-jlmkmFJ1MCpqEQBEdlz1oHnxftT4Ag4,2479
|
|
41
|
-
railmux/settings.py,sha256=
|
|
41
|
+
railmux/settings.py,sha256=UjFlgpCL4QMxtYV7tQxOxlORgJHE-5IJ1ceSl2n6WcA,11289
|
|
42
42
|
railmux/ssh_args.py,sha256=vW97O18d_8sTrMqDwC10bB61Xtzyx3TzfKjRk6HNzx8,2312
|
|
43
43
|
railmux/ssh_compat.py,sha256=wr2R0jBXbfKiqE46UQD9gWh8C4jWxx_-TdeND79hgss,5856
|
|
44
44
|
railmux/ssh_display_diagnostics.py,sha256=iqGnQkET1HUKU4xWgq0yG-DhpTfOoL3t4YY1LWd5M5A,9052
|
|
@@ -47,14 +47,14 @@ railmux/system_deps.py,sha256=WAW58lDYxf5VSqIPnVeUxjhqUTnB2V_8eV4n-7CmS7s,6516
|
|
|
47
47
|
railmux/terminal_emulator.py,sha256=F3SX2ufLW4j3x61jN1TQYJDcAZnr8g0LWoGBNVdPVHA,6553
|
|
48
48
|
railmux/terminal_status.py,sha256=JiugQ37ipGHO2PmYUQgLAUuagO8guV7vWP4mvt-SGrw,2104
|
|
49
49
|
railmux/tmux_binding_manager.py,sha256=qrCsq7TCYLUXPJGzqO1eODDoh5RFHQLt8l9yPtbZb88,32492
|
|
50
|
-
railmux/tmux_ctl.py,sha256=
|
|
50
|
+
railmux/tmux_ctl.py,sha256=GotCjRR889siQ5J6DH9WYlBR8V7YBDiC39lsOZ9635M,110298
|
|
51
51
|
railmux/tmux_health.py,sha256=0v6n9hLE0FJRdULisOFyCzs8p-6ZuoMugSSoXEnITLs,8535
|
|
52
52
|
railmux/tmux_server.py,sha256=JLnAsoGIYUstX-zqA64qS__1gbyEomv2jIikVDyBxs8,18940
|
|
53
|
-
railmux/tool_panes.py,sha256=
|
|
53
|
+
railmux/tool_panes.py,sha256=Pz5XQECzi4uvE_X3wtO4PTqj508sOKyNnww4UAXNhQs,39796
|
|
54
54
|
railmux/transcript.py,sha256=kY7WlcfqqWDxnzkLiH86pxL6RGQsKE0mdcNY6wBleTw,24528
|
|
55
55
|
railmux/mux/__init__.py,sha256=TC3R-RxsCqzwm8Uq4rSJYQjo-jjlwsw9FY-0lMXEStA,257
|
|
56
56
|
railmux/mux/backend.py,sha256=_QO9uFvuTEMYwtlfjTjFCZl1-uHwCJQ0QOOx1tfHMDs,2081
|
|
57
|
-
railmux/mux/tmux_backend.py,sha256=
|
|
57
|
+
railmux/mux/tmux_backend.py,sha256=F-XqRoG-fHxeqPnd-Va8YyeN4ub6n-tqc3eogT_g2uA,5381
|
|
58
58
|
railmux/platform/__init__.py,sha256=e9oF_PbVGfa9OqlsvBx0IhhOkZZDARIssRbLQRkzPKc,1340
|
|
59
59
|
railmux/platform/config_paths.py,sha256=EOqXGvopdrJRaxWaRmq-EkM2clxG5WevwoAZpxZcMd0,917
|
|
60
60
|
railmux/platform/console.py,sha256=P8VTwRRykJvXVDC4Mi3boPda7cJXtN_T2GzmSpb6CUM,6822
|
|
@@ -65,7 +65,7 @@ railmux/platform/process.py,sha256=ath6FNL_IQPG9X0KtjU6GAoMT_fBhMMVTyWGHJHSnIY,6
|
|
|
65
65
|
railmux/platform/runtime_paths.py,sha256=XUr7yYvApV0N_nE6yXPK1kuj3Y-8nZUi2mRcKuMGB6s,2836
|
|
66
66
|
railmux/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
67
|
railmux/ui/_widgets.py,sha256=0JOHrqJ2-zvmMNmRaOxO5d7fuqeC8kRPXDf2otZcKA8,8933
|
|
68
|
-
railmux/ui/app.py,sha256=
|
|
68
|
+
railmux/ui/app.py,sha256=9ZU5sK5go7W8Jk6b_36emTFX8kpDHUfsfh4et1QUShs,460374
|
|
69
69
|
railmux/ui/keymap.py,sha256=L-iSX5liFFMEj6k66oolEw5NAJzFKMax8Wq0jFrsvAs,6882
|
|
70
70
|
railmux/ui/modals.py,sha256=KaxWN8AGAgmXSv_c5uGajL1YeWDo21zWJx_UiXn51sM,49684
|
|
71
71
|
railmux/ui/projects_pane.py,sha256=TnQAWBJYFPv4-e8_jVrHRVlh2bFEm9SaKYxDebnWqLM,9209
|
|
@@ -84,9 +84,9 @@ railmux/winlocal/history_viewer.py,sha256=ERlIPnHGmkajzskxQZzO-ZUexXcCLq-oVUtMIq
|
|
|
84
84
|
railmux/winlocal/ipc.py,sha256=3xQYs_F2f3nA4aP6Vlo-GCwowOVC5mdQ_yuSaxQOr94,2382
|
|
85
85
|
railmux/winlocal/session_store.py,sha256=5Dxiz6AjpmC-gKLenzX-oCb1EkahVYC8aYtxeIu65BE,3284
|
|
86
86
|
railmux/winlocal/virtual_screen.py,sha256=03_ScgDJscO8SHMqscNfIn4_q6tx1cIlqCFgqrlnKEU,3495
|
|
87
|
-
railmux-0.3.2.
|
|
88
|
-
railmux-0.3.2.
|
|
89
|
-
railmux-0.3.2.
|
|
90
|
-
railmux-0.3.2.
|
|
91
|
-
railmux-0.3.2.
|
|
92
|
-
railmux-0.3.2.
|
|
87
|
+
railmux-0.3.2.dev4.dist-info/licenses/LICENSE,sha256=xnLXR7xpCcm1-hEv126WiSuPgjJvalI_LpKbY3E8qiY,1069
|
|
88
|
+
railmux-0.3.2.dev4.dist-info/METADATA,sha256=ZD2npzgN_UQ-kL80jtvyP6DNdeFwWRBqFtveUXx5Q6U,41667
|
|
89
|
+
railmux-0.3.2.dev4.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
90
|
+
railmux-0.3.2.dev4.dist-info/entry_points.txt,sha256=VD-VJ3G0m7_5ND2bZr_tAm3gPx5RF-mzbl5wP2WHqKg,45
|
|
91
|
+
railmux-0.3.2.dev4.dist-info/top_level.txt,sha256=b39h282u-2T3hVrzH4702rHKHPMF0pySYn4LpBVrtlk,8
|
|
92
|
+
railmux-0.3.2.dev4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|