Preguntaban en la LSPM:
¿Es posible conocer el tamaño de una ventana cualquiera cuando se redimensiona o fijar el tamaño dando las dimensiones? Por ejemplo en el escritorio que manejo en Linux (KDE), puedes dar el tamaño en pixels que quieres que tenga una ventana determinada. Me pregunto si también se puede hacer en el Mac.
Y la respuesta corta es sí.
La respuesta larga es que podemos usar AppleScript para obtener los tamaños actuales de las ventanas de cualquier aplicación cuyas ventanas puedan cambiar de tamaño. Sabiendo que en AppleScript la numeración de las ventanas empieza en uno, y que esa numeración depende de cuán recientemente se haya usado esa ventana en la aplicación —cuan “cerca” esté del usuario—, podemos hablar de “window 1” o “first window”.
Por ejemplo, podemos abrir el editor de scripts y escribir:
tell application "Safari" to get bounds of window 1
Eso nos dará una lista de elementos {x1,y1,x2,y2}, donde x1 e y1 son las coordenadas de la esquina superior izquierda de la ventana, empezando en 0, y aumentando x de izquierda a derecha, e y de arriba abajo; mientras que x2 e y2 son las coordenadas de la esquina inferior derecha. Por cierto, se puede averiguar que bounds es la propiedad que queremos después de haber tecleado, por ejemplo, tell application "Safari" to get properties of window 1.
Para fijar el tamaño y posición, usaríamos set bounds en lugar de get bounds:
tell application "Safari" to set bounds of window 1 to {0,44,640,524}
La altura de la barra de menús, al menos en Leopard, es de 44 pixeles, de ahí la elección de y1. Y el ancho y alto deseados son, respectivamente, x2-x1, e y2-y1. O lo que es lo mismo, si queremos fijar un ancho y un alto determinados, x2 = x1+ancho, e y2 = y1+alto.
¿Adivináis, entonces, lo que hace el próximo programa?
tell application "Safari"
set limites to the bounds of first window
set x1 to the first item of limites
set y1 to the second item of limites
set x2 to the third item of limites
set y2 to the fourth item of limites
set nuevosLimites to {x1 + 2, y1 + 2, x2 + 2, y2 + 2}
set bounds of first window to nuevosLimites
end tell
Comentarios
2 respuestas a «Desde la LSPM: Cambiar el tamaño de las ventanas de forma exacta»
Dice el dicho que cuánto más claro y breve dos veces bueno. Haces comprensible lo incomprensible (para el maquero medio, claro)
¡Muchas gracias, Jordi!