Tip ve kterém vůbec nepůjde o ChatGPT API ale o to, že dva hotové skripty (co volají právě to API) lze pomocí jednoho “router” skriptu schovat pod jednu klávesovou zkratku.
Vtip je v tom, že oba skripty mají vstup z clipboardu a v jednom případě je tam text (překlad) a druhém případě je tam pouze URL (sumarizace).
Takže pak už stačí jen v ChatGPT vysvětlit výše popsané, sdělit jak se ty skripty jmenují a během pár sekund dostanete nový Python skript co prostě zkontroluje obsah schránky a podle toho co tam je, spustí první nebo druhý skript.
ChatGPT ten skript asi (jak už to tak bývá) obohatila o věci, které ani nejsou třeba – jako předávání stdout ze spouštěných skriptů, ale ničemu to nevadí. Stejně tak jako kontrolu jestli existují skripty, které má zavolat.
#!/usr/bin/env python3
# @raycast.schemaVersion 1
# @raycast.title Smart: URL summary or CZ↔EN translate
# @raycast.mode silent
# @raycast.packageName AI Tools
# @raycast.icon 🧠
import os, sys, re, subprocess, pathlib
HERE = pathlib.Path(__file__).resolve().parent
# cesty k tvým skriptům
SUMMARY = HERE / "tosummary.py"
TRANSL = HERE / "tocz2.py" # ten tvůj „clipboard → clipboard“ překlad (obousměrný nebo CZ→EN)
def pbpaste() -> str:
return subprocess.check_output("pbpaste", text=True)
def pbcopy(text: str) -> None:
subprocess.run("pbcopy", text=True, input=text, check=True)
def is_url(s: str) -> bool:
s = s.strip()
return bool(re.match(r"^https?://", s, re.I))
def run_script(path: pathlib.Path, input_clipboard: bool = True) -> str:
"""
Spustí child skript stejným interpretem; vrátí jeho STDOUT (to obvykle obsahuje výsledek).
"""
if not path.exists():
raise FileNotFoundError(f"Script not found: {path}")
# většina tvých skriptů bere data ze schránky sama — nic neposíláme na STDIN
proc = subprocess.run(
[sys.executable, str(path)],
capture_output=True,
text=True,
timeout=180
)
if proc.returncode != 0:
# Přepošli chybu, ať ji vidíš v Raycastu
raise RuntimeError(proc.stdout.strip() + ("\n" if proc.stdout else "") + proc.stderr.strip())
return proc.stdout.strip()
def main():
clip = pbpaste().strip()
if not clip:
print("ERROR: Clipboard is empty.")
sys.exit(1)
target = SUMMARY if is_url(clip) else TRANSL
out = run_script(target)
# většina tvých child skriptů již sama kopíruje výsledek do schránky,
# ale pro jistotu to zrcadlíme ještě tady (nevadí to)
if out:
pbcopy(out)
print(out or "[OK]")
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"ERROR: {e}")
sys.exit(1)
Pak už jen ten nový skript uložíte podobně jako ty předchozí tak aby je RayCast mohl spouštět, odstraníte klávesové zkratky na jednotlivé skripty a přidáte zkratku jenom pro tento jeden skript.
Ten RayCast není nutný, jen na MacOS tím jde extrémně snadno spouštět cokoliv pomocí klávesové zkratky – což ale jde i přímo (MacOS to umí) nebo pomocí jiných aplikací. A stejným způsobem tohle budete moci udělat ve Windows, kde jen využijte tam fungující aplikaci co umí spustit program po stisknu kláves (takže ano, třeba i mé oblíbené AHK).
Úspora času
Vtip jedné klávesové zkratky je, že je jen jedna k zapamatování a perfektně sedí ve workflow kde buď překládám nebo potřebuji shrnutí nějakého článku (a nechci vzít jeho titulek a perex). V obou případech jde o “odstavec” textu co končí v nějakém newsletteru a už se k němu jen doplňuje odkaz na zdroj.
A když tohle děláte tak více než 200 krát týdně, tak každá sekunda ušetřená je zásadní. Ve finále jsou to totiž celé hodiny měsíčně.
Pokud chcete ony dva zmiňované skripty, tak jsou v bonusovém obsahu pro platící odběratele newsletteru (odemykají se ale 14 dní po vydání tak jako tak):
