mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-15 12:23:46 +08:00
Fix completion install script for bash (#830)
* Fix completion install script for bash * Update install.py
This commit is contained in:
1 parent
3652d3112f
commit
ae55559c32
1 file changed
+39
-33
@@ -133,46 +133,52 @@ def _update_rc(
|
||||
"""
|
||||
|
||||
# Install or uninstall `source_line`.
|
||||
source_lines = "\n".join(
|
||||
[
|
||||
"",
|
||||
"# Source nerfstudio autocompletions.",
|
||||
"# From https://unix.stackexchange.com/questions/339954/zsh-command-not-found-compinstall-compinit-compdef",
|
||||
"autoload -Uz compinit",
|
||||
"compinit",
|
||||
f"source {completions_dir / 'setup'}.{shell}",
|
||||
]
|
||||
)
|
||||
header_line = "# Source nerfstudio autocompletions."
|
||||
if shell == "zsh":
|
||||
source_lines = "\n".join(
|
||||
[
|
||||
"",
|
||||
header_line,
|
||||
"if ! command -v compdef &> /dev/null; then",
|
||||
" autoload -Uz compinit",
|
||||
" compinit",
|
||||
"fi",
|
||||
f"source {completions_dir / 'setup.zsh'}",
|
||||
]
|
||||
)
|
||||
elif shell == "bash":
|
||||
source_lines = "\n".join(
|
||||
[
|
||||
"",
|
||||
header_line,
|
||||
f"source {completions_dir / 'setup.bash'}",
|
||||
]
|
||||
)
|
||||
else:
|
||||
assert_never(shell)
|
||||
|
||||
rc_path = pathlib.Path(os.environ["HOME"]) / f".{shell}rc"
|
||||
|
||||
# Always try to uninstall previous completions.
|
||||
rc_source = rc_path.read_text()
|
||||
while header_line in rc_source:
|
||||
before_install, _, after_install = rc_source.partition(header_line)
|
||||
source_file, _, after_install = after_install.partition("\nsource ")[2].partition("\n")
|
||||
assert source_file.endswith(f"/completions/setup.{shell}")
|
||||
rc_source = before_install + after_install
|
||||
rc_path.write_text(rc_source)
|
||||
CONSOLE.log(f":broom: Existing completions uninstalled from {rc_path}.")
|
||||
|
||||
# Install completions.
|
||||
if mode == "install":
|
||||
if source_lines in rc_path.read_text():
|
||||
CONSOLE.log(f":call_me_hand: Completions are already installed in {rc_path}. {_exclamation()}")
|
||||
return
|
||||
|
||||
if not Confirm.ask(f"[bold yellow]Install to {rc_path}?", default=True):
|
||||
CONSOLE.log(f"[bold red]Skipping install for {rc_path.name}.")
|
||||
return
|
||||
|
||||
rc_path.write_text(rc_path.read_text() + source_lines)
|
||||
assert source_lines not in rc_source
|
||||
rc_path.write_text(rc_source.rstrip() + "\n" + source_lines)
|
||||
CONSOLE.log(
|
||||
f":person_gesturing_ok: Completions installed to {rc_path}. {_exclamation()} Open a new shell to try them"
|
||||
" out."
|
||||
)
|
||||
|
||||
elif mode == "uninstall":
|
||||
if source_lines not in rc_path.read_text():
|
||||
CONSOLE.log(f":heavy_check_mark: No completions to uninstall from {rc_path.name}.")
|
||||
return
|
||||
|
||||
if not Confirm.ask(f"[bold yellow]Uninstall from {rc_path}?", default=True):
|
||||
CONSOLE.log(f"[dim red]Skipping uninstall for {rc_path.name}.")
|
||||
return
|
||||
|
||||
rc_path.write_text(rc_path.read_text().replace(source_lines, ""))
|
||||
CONSOLE.log(f":broom: Completions uninstalled from {rc_path}.")
|
||||
|
||||
else:
|
||||
assert_never(mode)
|
||||
assert mode == "uninstall"
|
||||
|
||||
|
||||
def main(mode: ConfigureMode = "install") -> None:
|
||||
|
||||
Reference in new issue
Block a user