mhhh...ich hatte gestern wohl nicht den hellsten Augenblick. Jedenfalls enthielt mein Beispiel mit dem 50/50 Split groben Unfug u.A. bei der Einteilung der Größen...vermutlich werden einige deiner Probleme damit zusammenhängen.
Darüber hinaus war '
viewportWidth' als Variablenname für die gesamte Desktopbreite von mir offenbar missverständlich gewählt..du hast dort deine halbe Breite (1280) eingetragen, obwohl ich 2560 erwartet hätte. Ich vermute, dass du vermutetest, dass
viewportWidth die Breite der App Wiederspiegeln soll..ist aber nur ne Vermutung ;). Dann wäre klar, warum die Größenanpassungen so garnicht hingehauen haben: Apps haben Mindestgrößen. Bei Numbers liegt die bei mir bei 800 in der Breite. Da du - aus Sicht des Beispiels - 1280 als "Gesamtbreite" deines Displays definiert hattest, hätte Numbers bei 640 Pixel enden sollen. Das tut Numbers - zumindest im Fileopen Dialog - nicht...es will dort grundsätzlich 800px bei mir.
Ich hab mir Chrome installiert um mal zu gucken wie und ob der sich positionieren lässt. Da sich sowohl Numbers als auch Google Chrome über die selbe Weise über "System Events" positionieren lassen, hab ich mein Beispiel dahingehend geändert. Das macht die Sacher nochmal einfacher zu verstehen. Zudem hantiere ich der Klarheit wegen nicht mit mehr Variablen, sondern habe die Werte direkt an der passenden Stelle eingetragen. Meine Breite beträgt 1920, meine Höhe 1200.
Folgendes tut bei mir
Code: Alles auswählen
tell application "Google Chrome"
activate
reopen
tell application "System Events"
set position of window 1 of application process "Google Chrome" to {0, 0}
set size of window 1 of application process "Google Chrome" to {1100, 1200}
end tell
end tell
tell application "Numbers"
activate
reopen
tell application "System Events"
set position of window 1 of application process "Numbers" to {1100, 0}
set size of window 1 of application process "Numbers" to {820, 1200}
end tell
end tell
Die Werte in den geschweiften Klammern bei '
set position of window' sind X-Achse und Y-Achse (in Pixel) für die Positionierung auf deinem Desktop. 0 Punkt ist oben links. Die Werte in den geschweiften Klammern bei '
set size of window' sind Breite und Höhe (in Pixel), die das Fenster bekommen soll.
Ich fand keinen Weg, Mindestgrößen anzufragen. Das gestaltet sich sicher auch schwer, da es ja vom Window und seiner Funktion abhängt (eine Tabelle in Numbers könnte eine andere Mindestgröße haben als ein File Dialog...wie auch immer, ist ja nur akademisch, weil's eben kein Fullscreen Split macht.
Stephan S hat geschrieben: ↑13 Feb 2022 - 13:05
Das hier fungoniert bisher am besten- die erste Schleife, Chrome zu beenden und dann wieder zu starten stellt sicher dass bereits (lt. Crome Prefs) ein leerer Tab geöffnet ist, sonst läuft komischerweise der Rest nicht.
Code: Alles auswählen
tell application "Google Chrome" to quit
delay 1
activate application "Google Chrome"
tell application "Google Chrome"
if not (exists window 1) then reopen
set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
set bmURLs to URL of bookmark items of myBMFolder
repeat with aUrl in bmURLs
open location aUrl
end repeat
end tell
tell application "System Events" to tell process "Google Chrome"
set value of attribute "AXFullScreen" of window 1 to true
end tell
delay 1
tell application "Finder"
activate
open document file "xyz.numbers" of folder "xyz" of folder "xyz" of disk "xyz"
end tell
Ein neues "leeres" Tab in deinem Chrome könntest du auch mit
Code: Alles auswählen
tell front window to make new tab with properties {URL:"about:blank"}
erzeugen. Das wäre vielleicht auch gut in deinem repeat um sicher zu stellen, dass wirklich Tabs und nicht neue Fenster erzeugt werden.
- Ist es wirklich nötig Chrome zu quitten?
- Ist es wirklich nötig, 'reopen' an die Bedingung zu knüpfen, dass noch kein Fenster da ist?
- Ich würde das activate und reopen bedingungslos in den tell application "Google Chrome" block ziehen. Das reopen erzeugt auf jeden Fall ein Fenster mit einem Tab (bei mir).
- Den
tell application "System Events" mit deinem Fullscreen könntest du direkt in den
tell application "Google Chrome" Block umeziehen. Das gehört ja zusammen.
Also insgesamt vielleicht so:
Code: Alles auswählen
tell application "Google Chrome"
activate
reopen
set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
set bmURLs to URL of bookmark items of myBMFolder
repeat with aUrl in bmURLs
tell front window to make new tab with properties {URL:aUrl}
end repeat
tell application "System Events"
set value of attribute "AXFullScreen" of window 1 to true
end tell
end tell
delay 1
tell application "Finder"
activate
open document file "xyz.numbers" of folder "xyz" of folder "xyz" of disk "xyz"
end tell
Wobei ich mich frage, warum der Finder das Dokument öffnen soll und du das nicht mit Numbers tust. Das hat ja auch einen File Open:
Code: Alles auswählen
tell application "Numbers"
activate
open "/xyz/xyz/xyz.numbers"
end tell
Dann könntest du sogar direkt mit unterschiedlichen Sheets in dem File agieren.
Stephan S hat geschrieben: ↑13 Feb 2022 - 13:05
Btw. sind die Tabs so einigermaßen erträglich gesetzt?
nicht ganz. Man versucht mit den Einrückungen zum einen eine Hierarchie abzubilden, zum anderen Blöcke zu erzeugen die einem Beginn und Ende eines "tell..end tell" oder "repeat...end repeat" in der vertikalen optisch klar hervorheben. Ich nehm direkt den ersten Block von dir:
Code: Alles auswählen
tell application "Google Chrome"
if not (exists window 1) then reopen
set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
set bmURLs to URL of bookmark items of myBMFolder
repeat with aUrl in bmURLs
open location aUrl
end repeat
end tell
Beim Lesen entsteht der Eindruck, als würde dein zweites 'set' ein Kind von dem Ersten sein, also einen "Erfolg" des ersten voraussetzen. Dto. für das 'repeat' in Bezug auf das zweite 'set'. Das erste 'tell..end tell' ist auf einer ebene, dann hast du aber begonnen, jedes einzelne Kommando einzurücken. "Richtig" wäre:
Code: Alles auswählen
tell application "Google Chrome"
if not (exists window 1) then reopen
set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
set bmURLs to URL of bookmark items of myBMFolder
repeat with aUrl in bmURLs
open location aUrl
end repeat
end tell
Du siehst beim Lesen und vertikalen scannen sofort, dass tell..if...set+set+repeat+open die Abfolge ist. Das ist auch die Formatierung, die dir dein Scripteditor automagisch macht sofern du auf das Hämmerchen klickst oder den Code einmal ausführst.
Wie breit (in Zeichen gemessen) nun genau 1 Tab ist, ist relativ. Häufigste Variante 1 Tab == 4 Spaces. Manche stehen auch auf 1 Tab == 2 Spaces. It depends...