Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20
  1. #1
    London Pepping
    Themenstarter
    Avatar von Guy.brush
    Registriert
    12.2008
    Ort
    X
    Beiträge
    2.050

    AppleScript für Fenstermanagement

    Hi!

    Zu aller erst möchte ich mal sagen, dass ich bei weitem kein AppleScript Guru bin, eher als Anfänger einzuordnen.
    Ich will endlich mal ein bisschen automatische Fensterpositionierung haben, wie z.B. die Programme Cinch oder Divvy das machen.
    Also dachte mir, dass man so ein ähnliches Fenstermanagement, zumindest vorerst für den Finder, bestimmt auch mit AppleScript erledigen könnte. So hab ich mal ein AppleScript geschrieben, das tatsächlich zu funktionieren scheint...

    Code:
    -- ordnet 2 Finderfenster am oberen Rand an
    -- für eine Auflösung von 1920x1200
    set screen_width to 1920
    set screen_height to 1200
    set dock_height to 150 -- mit etwas Freiraum
    set margin_west to 150 -- Seitenabstand links
    set margin_east to 230 -- Seitenabstand rechts
    
    -- Maße für Fenster 
    set finder_width to (screen_width - (margin_west + margin_east)) / 2
    set finder_height to ((screen_height - dock_height) / 2)
    
    tell application "Finder"
    	
    	--  kein Finderfenster vorhanden
    	if not (the first window exists) then
    		
    		set window1 to make new Finder window
    		set sidebar width of window1 to 100
    		set the target of window1 to (folder (path to home folder))
    		set the bounds of window1 to {margin_west, 0, margin_west + finder_width, finder_height}
    		
    		set window2 to make new Finder window
    		set the target of window2 to (folder (path to home folder))
    		set the bounds of window2 to {margin_west + finder_width, 0, margin_west + finder_width * 2, finder_height}
    		
    		-- ein Finderfenster vorhanden
    	else if not (the second window exists) then
    		
    		set the bounds of the first window to {margin_west, 0, margin_west + finder_width, finder_height}
    		set window3 to make new Finder window
    		set the target of window3 to (folder (path to home folder))
    		set the bounds of window3 to {margin_west + finder_width, 0, margin_west + finder_width * 2, finder_height}
    		
    		-- beide vorhanden
    	else
    		set the bounds of the first window to {margin_west, 0, margin_west + finder_width, finder_height}
    		set the bounds of the second window to {margin_west + finder_width, 0, margin_west + finder_width * 2, finder_height}
    	end if
    	activate
    end tell
    Jetzt geht es mir dabei vor allem um die Performance, d.h. wie führt man das Teil möglichst schnell aus?

    Ich hab es schon als Service probiert - zu langsam. Als Applikation gespeichert - schon schneller, aber wie startet man diese möglichst schnell und wenn es geht per Shortcut ? Das Teil ins Dock legen will ich auch nicht und Spotlight is auch nich so mein Ding.

    Daher bin ich für alle Arten von Verbesserungsvorschlägen dankbar, d.h. falls No-Gos drin sind, gravierende Fehler oder einfach nicht performante Befehle. Auch Tipps zum AppleScript Stil oder wie ich die Applikation möglichst schnell starte wären sehr hilfreich.

    Danke und Gruß,
    Guy.brush
    It's more fun to be a pirate than to join the navy.

  2. #2
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.347
    @geschwindigkeit: hast schon mit osascript ausführen aus der kommandozeile versucht? als text oder scpt gespeichert... (würde mal beides versuchen)

    Code:
    osascript deinscript.applescript
    (text)

    oder
    Code:
    osascript deinscript.scpt
    (scpt)


    @auführen per shortcut
    Benutzt du irgendetwas wie keyboardmaestro oder quicksilver oder sowas? damit wäre es ein einfaches das zu bewerkstelligen.
    BetterTouchTool kann das übrigens auch (also irgendwas ausführen auf tastenkombi). Dann fällt aber osascript aus, allerdings kann es scpt's ausführen...

    ah das wäre vielleicht noch ein tipp zum testen für die performance:
    im applescripteditor, in den preferences, mach dir mal das script menü an. dann speicherst du dein script als scpt un legst es in ~/Library/Scripts ab und führst es dann über das scriptmenü aus.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken AppleScript für Fenstermanagement-2008_2010-07-27_2008.png  
    Angehängte Grafiken Angehängte Grafiken  
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

  3. #3
    London Pepping
    Themenstarter
    Avatar von Guy.brush
    Registriert
    12.2008
    Ort
    X
    Beiträge
    2.050
    Zitat Zitat von fyysh Beitrag anzeigen
    @geschwindigkeit: hast schon mit osascript ausführen aus der kommandozeile versucht? als text oder scpt gespeichert... (würde mal beides versuchen)
    Ja, das geht schon sehr fix, aber wie startet man das am besten? das Terminal hab ich ja nicht immer auf.

    Zitat Zitat von fyysh Beitrag anzeigen
    @auführen per shortcut
    Benutzt du irgendetwas wie keyboardmaestro oder quicksilver oder sowas? damit wäre es ein einfaches das zu bewerkstelligen.
    Ja, tatsächlich Alfred kann das (sowohl per default Suche als auch mit dem "run" Command) und auch nicht gerade langsam, daran kann ich mich glaub ich gewöhnen. Aber Shortcut wär evtl. noch besser.

    Danke derweil.
    It's more fun to be a pirate than to join the navy.

  4. #4
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.347
    hmm ich hab mir grad alfred angeguckt... der kann das nicht, was ich meinte.

    haste nicht ne magic mouse oder so und hast lust auf bettertouchtool? damit könntest du es tatsächlich mit einer tastenkombi ausführen. oder eben quicksilver, keyboarmaestro oder... ähm... da gabs noch eins... moment.. ahc da gibts mehrere. buttler kannd as wohl auch. quickkeys ist für solche dinge auch sehr geil, aber auch sehr teuer.

    ich hab lange quicksilver benutzt, um genau das zu machen, was du vorhast, also skripte und wasweißich mit nem keystroke zu versehen, war aber mit quicksilver dann irgendwann unzufrieden, weil es mir u.a. mehr als einmal meine mühsam konfigurierten actions gelöscht hat und bin zu keyboardmaestro gewechselt. ist zwar auch nicht günstig, aber ich habs's nie bereut. ich könnte ohne nicht leben

    quickkeys ist aber noch ein tick geiler, finde ich, aber auch teurer... naja, kommt auch drauf an für was.

    quicksilver, kennst du ja bestimmt, würde dir das, was alfred anbietet, auch zur verfügung stellen + shortcuts wie du es dir wünschst, allerdings ist die usability, imho, verglichen mit keyboard maestro und quickkeys, fürn po - leider.

    ja weiß nicht, die zuverlässigen, die ich kenne, sind die teuren und um nur dieses eine script damit auszuführen (dabei bleibts aber nicht, wenn du sowas erstmal hast ), ist es ein bisschen mit kanonen auf spatzen geschossen... du weißt schon...
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

  5. #5
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.347
    hast du eigentlich schon folgendes mit den services versucht?

    1. service ohne input, führt ein shellscript aus mit inhalt
    osascript /kompletter/pfad/zu/deinem/script.scpt

    2. service ohne input, führt ein apfelscript aus mit deinem script als inhalt

    denen kannst du ja dann ein shortcut zuweisen... und vielleicht ist es dann trotzdem schnell genug...
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

  6. #6
    London Pepping
    Themenstarter
    Avatar von Guy.brush
    Registriert
    12.2008
    Ort
    X
    Beiträge
    2.050
    Zitat Zitat von fyysh Beitrag anzeigen
    hast du eigentlich schon folgendes mit den services versucht?

    1. service ohne input, führt ein shellscript aus mit inhalt
    osascript /kompletter/pfad/zu/deinem/script.scpt

    2. service ohne input, führt ein apfelscript aus mit deinem script als inhalt

    denen kannst du ja dann ein shortcut zuweisen... und vielleicht ist es dann trotzdem schnell genug...
    Gut, dass du mich nochmal daran erinnerst! Es klappt!
    Das Problem war, dass ich das Script zuerst noch mit einem GUI Auswahl-Dialog verknüpft hatte, was den Service wohl um einiges verlangsamt hat. Nummer 1 bringt zwar nen Fehler, aber 2. funktioniert jetzt super und auch in angenehmer Zeit!

    Hier meine Script-Variationen, mit denen ich nun (vorerst) wunschlos glücklich bin:

    Code:
    -- Split Finder vertical Script Version 1.0
    -- ordnet 2 Finderfenster vertikal mit voller Höhe an
    
    -- für eine Auflösung von 1920x1200
    set screen_width to 1920
    set screen_height to 1200
    set dock_height to 150 -- mit etwas Freiraum
    set margin_west to 150 -- Seitenabstand links
    set margin_east to 230 -- Seitenabstand rechts
    
    -- Maße für Fenster 
    set finder_width to (screen_width - (margin_west + margin_east)) / 2
    set finder_height to ((screen_height - dock_height))
    
    tell application "Finder"
    	
    	--  kein Finderfenster vorhanden
    	if not (the first window exists) then
    		
    		set window1 to make new Finder window
    		set sidebar width of window1 to 100
    		set the target of window1 to (folder (path to home folder))
    		set the bounds of window1 to {margin_west, 0, margin_west + finder_width, finder_height}
    		
    		set window2 to make new Finder window
    		set the target of window2 to (folder (path to home folder))
    		set the bounds of window2 to {margin_west + finder_width, 0, margin_west + finder_width * 2, finder_height}
    		
    		-- ein Finderfenster vorhanden
    	else if not (the second window exists) then
    		
    		set the bounds of the first window to {margin_west, 0, margin_west + finder_width, finder_height}
    		set window3 to make new Finder window
    		set the target of window3 to (folder (path to home folder))
    		set the bounds of window3 to {margin_west + finder_width, 0, margin_west + finder_width * 2, finder_height}
    		
    		-- beide vorhanden
    	else
    		set the bounds of the first window to {margin_west, 0, margin_west + finder_width, finder_height}
    		set the bounds of the second window to {margin_west + finder_width, 0, margin_west + finder_width * 2, finder_height}
    	end if
    	activate
    end tell
    Das Script aus dem 1. Post mach übrigens das selbe, nur mit halber Finder Höhe...

    Code:
    -- Split Finder horizontal Version 1.0
    -- ordnet 2 Finderfenster horizontal mit voller Breite an
    
    -- für eine Auflösung von 1920x1200
    set screen_width to 1920
    set screen_height to 1200
    set dock_height to 150 -- mit etwas Freiraum
    set margin_west to 150 -- Seitenabstand links
    set margin_east to 230 -- Seitenabstand rechts
    set pitch to 75 -- Abstand für Menüleisten
    
    -- Maße für Fenster 
    set finder_width to (screen_width - (margin_west + margin_east))
    set finder_height to ((screen_height - dock_height - pitch) / 2)
    
    tell application "Finder"
    	
    	--  kein Finderfenster vorhanden
    	if not (the first window exists) then
    		
    		set window1 to make new Finder window
    		set sidebar width of window1 to 100
    		set the target of window1 to (folder (path to home folder))
    		set the bounds of window1 to {margin_west, 0, margin_west + finder_width, finder_height}
    		
    		set window2 to make new Finder window
    		set the target of window2 to (folder (path to home folder))
    		set the bounds of window2 to {margin_west, finder_height + pitch, margin_west + finder_width, finder_height * 2 + pitch}
    		
    		-- ein Finderfenster vorhanden
    	else if not (the second window exists) then
    		
    		set the bounds of the first window to {margin_west, 0, margin_west + finder_width, finder_height}
    		set window3 to make new Finder window
    		set the target of window3 to (folder (path to home folder))
    		set the bounds of window3 to {margin_west, finder_height + pitch, margin_west + finder_width, finder_height * 2 + pitch}
    		
    		-- beide vorhanden
    	else
    		set the bounds of the first window to {margin_west, 0, margin_west + finder_width, finder_height}
    		set the bounds of the second window to {margin_west, finder_height + pitch, margin_west + finder_width, finder_height * 2 + pitch}
    	end if
    	activate
    end tell

    Code:
    -- CenterFinder Version 1.0
    -- zentriert das Finderfenster
    
    -- für eine Auflösung von 1920x1200
    set screen_width to 1920
    set screen_height to 1200
    set dock_height to 150 -- mit etwas Freiraum
    set pitch to 230 -- zusätzlicher Abstand
    
    -- Maße für Fenster 
    set finder_width to (screen_width - pitch) / 2
    set finder_height to (screen_height - dock_height) / 2
    
    tell application "Finder"
    	
    	--  kein Finderfenster vorhanden
    	if not (the first window exists) then
    		
    		set window1 to make new Finder window
    		set sidebar width of window1 to 100
    		set the target of window1 to (folder (path to home folder))
    		set the bounds of window1 to {(screen_width - finder_width) / 2, (screen_height - finder_height) / 2, (screen_width + finder_width) / 2, (screen_height + finder_height) / 2}
    		
    		-- ein Finderfenster vorhanden
    	else
    		set the bounds of the first window to {(screen_width - finder_width) / 2, (screen_height - finder_height) / 2, (screen_width + finder_width) / 2, (screen_height + finder_height) / 2}
    	end if
    	activate
    end tell
    Alle einzeln als Service mit Aktion "Run AppleScript" gespeichert und mit Shortcuts versehen. Mir gefällts.

    Es gibt bestimmt noch mehr nützliche Fensterarrangements.
    Danke nochmal.
    It's more fun to be a pirate than to join the navy.

  7. #7
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    Hallo!

    Ich habe mal kurz über die Skripte geschaut und mir sind 2 Dinge aufgefallen:
    • Der Finder zählt ein wenig anders, als andere Programme: der kleinste mögliche Wert der y Achse ist dort 44 ( = Höhe der Menüleiste) und nicht 0.
    set sidebar width of window1 to 100 -- Seit 10.5 geht dieser Wert schon nicht mehr und dürfte dazu führen, dass deine Fenster ohne Toolbar geöffnet werden.


    Gruß
    Geändert von sedna (27.07.2010 um 22:52 Uhr) Grund: Gerade bemerkt, dass das Skript unter 10.6 läuft

  8. #8
    London Pepping
    Themenstarter
    Avatar von Guy.brush
    Registriert
    12.2008
    Ort
    X
    Beiträge
    2.050
    Hehe, Danke, ja das dachte ich mir schon, dass da was komisch läuft mit den Abständen, ich hab dann immer irgendwelche Pseudo-Abstände eingeführt, damit das dann einigermaßen hin haut. Ich verbesser es, wenn ich wieder Zeit und Lust hab.

    Zu der Sidebar: Als ich den Befehl nicht drin hatte, hab ich bemerkt, dass die Sidebar in neuen Finderfenstern immer zu breit war. Mit dem Befehl wars besser und ich kann auch keinen Nachteil entdecken, es ist alles wo es sein sollte.

    Hab mal eben ein Video erstellt:

    Geändert von Guy.brush (27.07.2010 um 22:55 Uhr) Grund: Video hinzugefügt
    It's more fun to be a pirate than to join the navy.

  9. #9
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    Also das mit der "0" wird quasi automatisch "korrigiert". Ist also nur ein halber Fehler.
    Und zur Sidebar: Ok. Wenn es denn so funktionert... Ich glaube, dass 135 der kleinste mögliche Wert ist.

    Gruß

  10. #10
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.347
    @video&ergebnis: nice
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •