dfdfdd
This commit is contained in:
128
CLI.py
128
CLI.py
@@ -1052,6 +1052,28 @@ class CmdletExecutor:
|
||||
if cmd_name_norm in {"get-relationship", "get-rel", ".pipe", ".matrix", ".telegram", "telegram", "delete-file", "del-file"}:
|
||||
return
|
||||
|
||||
# add-file directory selector mode: show only the selection table, no Live progress.
|
||||
if cmd_name_norm in {"add-file", "add_file"}:
|
||||
try:
|
||||
from pathlib import Path as _Path
|
||||
|
||||
toks = list(filtered_args or [])
|
||||
i = 0
|
||||
while i < len(toks):
|
||||
t = str(toks[i])
|
||||
low = t.lower().strip()
|
||||
if low in {"-path", "--path", "-p"} and i + 1 < len(toks):
|
||||
nxt = str(toks[i + 1])
|
||||
if nxt and ("," not in nxt):
|
||||
p = _Path(nxt)
|
||||
if p.exists() and p.is_dir():
|
||||
return
|
||||
i += 2
|
||||
continue
|
||||
i += 1
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
quiet_mode = bool(config.get("_quiet_background_output")) if isinstance(config, dict) else False
|
||||
except Exception:
|
||||
@@ -1097,6 +1119,20 @@ class CmdletExecutor:
|
||||
while i < len(toks):
|
||||
t = str(toks[i])
|
||||
low = t.lower().strip()
|
||||
if cmd_name_norm in {"add-file", "add_file"} and low in {"-path", "--path", "-p"} and i + 1 < len(toks):
|
||||
nxt = str(toks[i + 1])
|
||||
if nxt:
|
||||
if "," in nxt:
|
||||
parts = [p.strip().strip('"\'') for p in nxt.split(",")]
|
||||
parts = [p for p in parts if p]
|
||||
if parts:
|
||||
preview.extend(parts)
|
||||
i += 2
|
||||
continue
|
||||
else:
|
||||
preview.append(nxt)
|
||||
i += 2
|
||||
continue
|
||||
if low in {"-url", "--url"} and i + 1 < len(toks):
|
||||
nxt = str(toks[i + 1])
|
||||
if nxt and not nxt.startswith("-"):
|
||||
@@ -1845,15 +1881,49 @@ class PipelineExecutor:
|
||||
else:
|
||||
selected_row_args: List[str] = []
|
||||
skip_pipe_expansion = source_cmd == ".pipe" and len(stages) > 0
|
||||
# Only perform @N command expansion for *single-item* selections.
|
||||
# For multi-item selections (e.g. @*, @1-5), expanding to a single
|
||||
# row would silently drop items. In those cases we pipe the selected
|
||||
# items downstream instead.
|
||||
if source_cmd and not skip_pipe_expansion and len(selection_indices) == 1:
|
||||
idx = selection_indices[0]
|
||||
row_args = ctx.get_current_stage_table_row_selection_args(idx)
|
||||
if row_args:
|
||||
selected_row_args.extend(row_args)
|
||||
# Command expansion via @N:
|
||||
# - Default behavior: expand ONLY for single-row selections.
|
||||
# - Special case: allow multi-row expansion for add-file directory tables by
|
||||
# combining selected rows into a single `-path file1,file2,...` argument.
|
||||
if source_cmd and not skip_pipe_expansion:
|
||||
src = str(source_cmd).replace("_", "-").strip().lower()
|
||||
|
||||
if src == "add-file" and selection_indices:
|
||||
row_args_list: List[List[str]] = []
|
||||
for idx in selection_indices:
|
||||
try:
|
||||
row_args = ctx.get_current_stage_table_row_selection_args(idx)
|
||||
except Exception:
|
||||
row_args = None
|
||||
if isinstance(row_args, list) and row_args:
|
||||
row_args_list.append([str(x) for x in row_args if x is not None])
|
||||
|
||||
# Combine `['-path', <file>]` from each row into one `-path` arg.
|
||||
paths: List[str] = []
|
||||
can_merge = bool(row_args_list) and (len(row_args_list) == len(selection_indices))
|
||||
if can_merge:
|
||||
for ra in row_args_list:
|
||||
if len(ra) == 2 and str(ra[0]).strip().lower() in {"-path", "--path", "-p"}:
|
||||
p = str(ra[1]).strip()
|
||||
if p:
|
||||
paths.append(p)
|
||||
else:
|
||||
can_merge = False
|
||||
break
|
||||
|
||||
if can_merge and paths:
|
||||
selected_row_args.extend(["-path", ",".join(paths)])
|
||||
elif len(selection_indices) == 1 and row_args_list:
|
||||
selected_row_args.extend(row_args_list[0])
|
||||
else:
|
||||
# Only perform @N command expansion for *single-item* selections.
|
||||
# For multi-item selections (e.g. @*, @1-5), expanding to one row
|
||||
# would silently drop items. In those cases we pipe items downstream.
|
||||
if len(selection_indices) == 1:
|
||||
idx = selection_indices[0]
|
||||
row_args = ctx.get_current_stage_table_row_selection_args(idx)
|
||||
if row_args:
|
||||
selected_row_args.extend(row_args)
|
||||
|
||||
if selected_row_args:
|
||||
if isinstance(source_cmd, list):
|
||||
@@ -2026,6 +2096,32 @@ class PipelineExecutor:
|
||||
name = str(stage_tokens[0]).replace("_", "-").lower()
|
||||
if name == "@" or name.startswith("@"):
|
||||
continue
|
||||
|
||||
# add-file directory selector stage: avoid Live progress so the
|
||||
# selection table renders cleanly.
|
||||
if name in {"add-file", "add_file"}:
|
||||
try:
|
||||
from pathlib import Path as _Path
|
||||
|
||||
toks = list(stage_tokens[1:])
|
||||
i = 0
|
||||
while i < len(toks):
|
||||
t = str(toks[i])
|
||||
low = t.lower().strip()
|
||||
if low in {"-path", "--path", "-p"} and i + 1 < len(toks):
|
||||
nxt = str(toks[i + 1])
|
||||
if nxt and ("," not in nxt):
|
||||
p = _Path(nxt)
|
||||
if p.exists() and p.is_dir():
|
||||
name = "" # mark as skipped
|
||||
break
|
||||
i += 2
|
||||
continue
|
||||
i += 1
|
||||
except Exception:
|
||||
pass
|
||||
if not name:
|
||||
continue
|
||||
# Display-only: avoid Live progress for relationship viewing.
|
||||
# This keeps `@1 | get-relationship` clean and prevents progress UI
|
||||
# from interfering with Rich tables/panels.
|
||||
@@ -2352,6 +2448,20 @@ class PipelineExecutor:
|
||||
while i < len(toks):
|
||||
t = str(toks[i])
|
||||
low = t.lower().strip()
|
||||
if cmd_name == "add-file" and low in {"-path", "--path", "-p"} and i + 1 < len(toks):
|
||||
nxt = str(toks[i + 1])
|
||||
if nxt:
|
||||
if "," in nxt:
|
||||
parts = [p.strip().strip('"\'') for p in nxt.split(",")]
|
||||
parts = [p for p in parts if p]
|
||||
if parts:
|
||||
preview.extend(parts)
|
||||
i += 2
|
||||
continue
|
||||
else:
|
||||
preview.append(nxt)
|
||||
i += 2
|
||||
continue
|
||||
if low in {"-url", "--url"} and i + 1 < len(toks):
|
||||
nxt = str(toks[i + 1])
|
||||
if nxt and not nxt.startswith("-"):
|
||||
|
||||
Reference in New Issue
Block a user