mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 09:58:03 +02:00
146 lines
5.1 KiB
Fish
Executable File
146 lines
5.1 KiB
Fish
Executable File
if not type -q fastfetch
|
|
exit
|
|
end
|
|
|
|
command -q python3
|
|
if test $status -ne 0
|
|
exit
|
|
end
|
|
|
|
complete -c fastfetch -f
|
|
|
|
function __fastfetch_complete_bool
|
|
echo -e "true\tBool"
|
|
echo -e "false\tBool"
|
|
end
|
|
|
|
function __fastfetch_complete_color
|
|
echo -e "black\tColor"
|
|
echo -e "red\tColor"
|
|
echo -e "green\tColor"
|
|
echo -e "yellow\tColor"
|
|
echo -e "blue\tColor"
|
|
echo -e "magenta\tColor"
|
|
echo -e "cyan\tColor"
|
|
echo -e "white\tColor"
|
|
echo -e "default\tColor"
|
|
end
|
|
|
|
function __fastfetch_complete_command
|
|
for line in (fastfetch --list-modules autocompletion)
|
|
set -l pair (string split -m 2 : $line)
|
|
set -l module (string lower $pair[1])
|
|
|
|
echo -e "$module-format\tModule format"
|
|
end
|
|
echo -e "format\tCustom format"
|
|
echo -e "color\tColor format"
|
|
end
|
|
|
|
function __fastfetch_complete_config
|
|
for line in (fastfetch --list-presets autocompletion)
|
|
echo -e "$line\tPreset"
|
|
end
|
|
echo -e "none\tDisable loading config file"
|
|
end
|
|
|
|
function __fastfetch_complete_logo
|
|
for line in (fastfetch --list-logos autocompletion)
|
|
echo -e "$line\tBuiltin logo"
|
|
end
|
|
echo -e "none\tDon't print logo"
|
|
echo -e "small\tPrint small ascii logo if available"
|
|
end
|
|
|
|
function __fastfetch_complete_structure
|
|
for line in (fastfetch --list-modules autocompletion)
|
|
set -l pair (string split -m 2 : $line)
|
|
echo -e "$pair[1]\t$pair[2]"
|
|
end
|
|
end
|
|
|
|
echo '
|
|
import json, subprocess, sys
|
|
|
|
|
|
def escape_fish_dq(s: str) -> str:
|
|
"""Escape special characters for Fish double quotes to prevent unexpected expansions. One slash in output needs four slashes in script"""
|
|
return str(s).replace("\\\\", "\\\\\\\\").replace("\\"", "\\\\\\"").replace("$", "\\\\$")
|
|
|
|
|
|
def main():
|
|
data: dict[str, list[dict]] = json.loads(subprocess.check_output(["fastfetch", "--help-raw"]))
|
|
|
|
enum_functions = []
|
|
complete_commands = []
|
|
|
|
for key in data:
|
|
for flag in data[key]:
|
|
long_name = flag.get("long", "")
|
|
|
|
# Handle pseudo flag logo-color-[1-9]
|
|
if long_name == "logo-color-[1-9]":
|
|
safe_desc_global = escape_fish_dq(flag.get("desc", ""))
|
|
for i in range(1, 10):
|
|
complete_commands.append(f"complete -c fastfetch -d \"{safe_desc_global}\" -l \"logo-color-{i}\" -x -a \"(__fastfetch_complete_color)\"")
|
|
continue
|
|
|
|
if flag.get("pseudo", False):
|
|
continue
|
|
|
|
safe_desc_global = escape_fish_dq(flag.get("desc", ""))
|
|
command_prefix = f"complete -c fastfetch -d \"{safe_desc_global}\" -l \"{long_name}\""
|
|
|
|
if "short" in flag:
|
|
short_name = flag["short"]
|
|
command_prefix += f" -o {short_name}"
|
|
|
|
if "arg" in flag:
|
|
arg_type: str = flag["arg"]["type"]
|
|
if arg_type == "bool":
|
|
complete_commands.append(f"{command_prefix} -x -a \"(__fastfetch_complete_bool)\"")
|
|
elif arg_type == "color":
|
|
complete_commands.append(f"{command_prefix} -x -a \"(__fastfetch_complete_color)\"")
|
|
elif arg_type == "command":
|
|
complete_commands.append(f"{command_prefix} -x -a \"(__fastfetch_complete_command)\"")
|
|
elif arg_type == "config":
|
|
complete_commands.append(f"{command_prefix} -x -a \"(__fastfetch_complete_config)\"")
|
|
elif arg_type == "enum":
|
|
# Sanitize flag name to create a valid Fish function name
|
|
func_name = long_name.replace("-", "_").replace("[", "_").replace("]", "_")
|
|
func_name = f"__fastfetch_complete_enum_{func_name}"
|
|
|
|
# Generate the enum function
|
|
func_lines = [f"function {func_name}"]
|
|
for enum_val, enum_desc in flag["arg"]["enum"].items():
|
|
safe_val = escape_fish_dq(enum_val)
|
|
safe_desc = escape_fish_dq(enum_desc)
|
|
func_lines.append(f" echo -e \"{safe_val}\\t{safe_desc}\"")
|
|
func_lines.append("end\n")
|
|
enum_functions.append("\n".join(func_lines))
|
|
|
|
# Append complete command pointing to the new function
|
|
complete_commands.append(f"{command_prefix} -x -a \"({func_name})\"")
|
|
elif arg_type == "logo":
|
|
complete_commands.append(f"{command_prefix} -x -a \"(__fastfetch_complete_logo)\"")
|
|
elif arg_type == "structure":
|
|
complete_commands.append(f"{command_prefix} -x -a \"(__fish_complete_list : __fastfetch_complete_structure)\"")
|
|
elif arg_type == "path":
|
|
complete_commands.append(f"{command_prefix} -r -F")
|
|
else:
|
|
complete_commands.append(f"{command_prefix} -x")
|
|
else:
|
|
complete_commands.append(f"{command_prefix} -f")
|
|
|
|
# Print generated enum functions first, then complete rules
|
|
print("\n".join(enum_functions))
|
|
print("\n".join(complete_commands))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
main()
|
|
except:
|
|
sys.exit(1)
|
|
' | python3 | source
|