e1e9bb7499
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.6 KiB
4.6 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| open_onlyoffice_file | function | bash | shell | 1.0.0 | impure | open_onlyoffice_file(file_path: string, instance: string = demo) -> json | Abre un archivo en una INSTANCIA AISLADA de ONLYOFFICE Desktop Editors (Linux/X11) sin perturbar la instancia personal del usuario. Cada 'instance' (slot, default demo) usa su propio HOME=/tmp/oo_<instance>, XDG_RUNTIME_DIR y XDG_CONFIG_HOME bajo /tmp, lo que rompe el single-instance lock de ONLYOFFICE y permite una ventana propia en vez de una pestaña en la instancia del usuario. Espera la ventana por evento (xdotool, basename del archivo, timeout ~25s) sin sleep en foreground. Idempotente: si ya hay ventana para ese basename, no relanza y devuelve el wid existente. NO crea archivos: si file_path no existe, falla. Imprime una linea JSON con instance, file (ruta absoluta), wid (hex), pid y status (open|timeout). |
|
false | error_go_core |
|
una linea JSON a stdout: {"instance":"<i>","file":"<abs>","wid":"<hex>|null","pid":<n>|null,"status":"open"|"timeout"}. Exit 0 si abrio (status open), exit 1 si la ventana no aparecio en el timeout (status timeout) o falta dependencia/archivo, exit 2 si falta el argumento file_path | false | bash/functions/shell/open_onlyoffice_file.sh |
Ejemplo
# Como script directo (slot 'demo' por defecto)
bash bash/functions/shell/open_onlyoffice_file.sh /tmp/demo_reload.xlsx
# Slot nombrado distinto (ventana propia, no perturba la instancia personal)
bash bash/functions/shell/open_onlyoffice_file.sh /tmp/informe.docx reporte
# Via fn run
./fn run open_onlyoffice_file_bash_shell /tmp/demo_reload.xlsx demo
# Sourceado, capturando el wid del JSON
source bash/functions/shell/open_onlyoffice_file.sh
out=$(open_onlyoffice_file /tmp/demo_reload.xlsx demo)
echo "$out"
# {"instance":"demo","file":"/tmp/demo_reload.xlsx","wid":"0x3c00007","pid":12345,"status":"open"}
Cuando usarla
- Cuando necesites abrir un archivo en ONLYOFFICE Desktop desde terminal en su propia ventana aislada, sin que se agregue como pestaña a la instancia personal del usuario.
- Como primer paso de un flujo automatizado open -> (editas el archivo en disco) ->
reload_onlyoffice_file->close_onlyoffice_instance. - Cuando quieras un slot reproducible por nombre (
instance) que reuse la misma instancia aislada entre llamadas (reabrir rapido en vez de arrancar el motor de cero).
Gotchas
- ONLYOFFICE Desktop es single-instance por usuario: sin el slot aislado (HOME/XDG_RUNTIME_DIR propios), un segundo lanzamiento se reenvia a la instancia viva y abre el archivo como PESTAÑA, no ventana nueva. El lock NO se rompe con XDG_CONFIG_HOME solo; SI con HOME + XDG_RUNTIME_DIR propios. Esta funcion ya aplica esa convencion.
- NO hay reload nativo de cambios externos (GitHub Issue #2313 abierto, no implementado). Esta funcion solo abre; para reflejar ediciones hechas en disco hay que cerrar+reabrir con
reload_onlyoffice_file. - NO crea archivos: si
file_pathno existe, falla con exit 1. Crea el archivo por tu cuenta antes de llamar. - El slot vive en /tmp: los dirs
/tmp/oo_<instance>*se pierden al reiniciar el PC (tmpfs en muchos sistemas). No guardes nada importante ahi; es estado desechable de la instancia aislada. - Requiere X11 + wmctrl + xdotool: no funciona en Wayland puro sin XWayland (xdotool no encontrara la ventana). La funcion comprueba
command -vde las 3 deps y falla claro si falta alguna. - El pid reportado es el del launcher (
onlyoffice-desktopeditors), que puede reexec/fork al proceso realDesktopEditors; sirve como referencia best-effort, no parakillfiable (usaclose_onlyoffice_instance, que localiza el proceso real por su HOME). - Idempotencia por basename: si ya existe una ventana cuyo titulo contiene el basename del archivo (lo abrio el usuario en su instancia personal, por ejemplo), la funcion la considera "ya abierta" y devuelve ese wid sin relanzar. Usa un basename unico para el slot de pruebas si quieres evitar colisiones.