Launcher Code
From NeoWiki
launcher xcode files: http://neo-downloads.sixthcrusade.com/launcher-xcode.zip
-- launcher.applescript
-- launcher
-- Created by Jacob Haddon on 9/18/06.
-- Copyright (c) 2003 __MyCompanyName__. All rights reserved.
(*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: main.applescript,v $
*
* $Revision: 1.2 $
*
* last change: $Author: obo $ $Date: 2005/10/13 09:46:35 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*************************************************************************)
on clicked theObject
set j to (name of theObject as string)
--display dialog j
if j is equal to "open" then
display open panel
set the pathNames to (path names of open panel)
openFiles(pathNames)
else if j is equal to "quit" then
--display dialog "Are You Sure You Want to Quit OpenOffice.org?"
quit {}
else
openSoffice(j, "-")
end if
end clicked
--
-- the default handlers: run, open, idle, quit
--
on open theObject
openFiles(theObject)
end open
on idle
-- close icon only if ooo has terminated
if isOOoRunning() = 0 then
tell me to quit
end if
-- check all x seconds if ok to quit
return 3
end idle
on quit
if isOOoRunning() = 0 then
continue quit
else
display dialog "OpenOffice is still running, Quit Launcher?"
continue quit
end if
end quit
-------------------------------------------------------------
on isOOoRunning()
set soffice to getProgramPath() & "/soffice"
set isRunning to do shell script "_FOUND_=`ps -wx -o command | grep \"" & soffice & "\" | grep -v grep`; echo $_FOUND_"
if isRunning ≠ "" then
return 1
else
return 0
end if
end isOOoRunning
on openSoffice(progToOpen, aFile)
set oooProgramPath to getProgramPath()
--display dialog "getProgramPath"
set theDisplay to startXServer()
--display dialog "start x"
set theEnv to "DISPLAY=" & theDisplay & " ; export DISPLAY; "
set theCmd to "sh \"" & oooProgramPath & "/" & progToOpen & "\" "
--display dialog "soffice"
do shell script theEnv & theCmd & aFile & " &>/dev/null & echo $!"
end openSoffice
on startXServer()
-- First try standard X11 location, then try standard XDarwin location
set Xserverloc to "/Applications/Utilities/X11.app"
set whichserver to do shell script "if [ -d " & Xserverloc & " ]; then echo \"X11\"; else echo \"NOXSERVER\"; fi"
if whichserver = "NOXSERVER" then
set Xserverloc to "/Applications/XDarwin.app"
set whichserver to do shell script "if [ -d " & Xserverloc & " ]; then echo \"XDarwin\"; else echo \"NOXSERVER\"; fi"
end if
-- if nothing found yet try using locate, first with X11.app and then with XDarwin.app
if whichserver = "NOXSERVER" then
set Xserverloc to do shell script "locate X11.app/Contents/MacOS/X11 | sed -e 's-/Contents/MacOS/X11--g'"
if Xserverloc ≠ "" then
set whichserver to "X11"
end if
end if
if whichserver = "NOXSERVER" then
set Xserverloc to do shell script "locate XDarwin.app/Contents/MacOS/XDarwin | sed -e 's-/Contents/MacOS/XDarwin--g'"
if Xserverloc ≠ "" then
set whichserver to "XDarwin"
end if
end if
set now_running to ""
set now_running to do shell script "INX=`ps -wcx | grep \"" & whichserver & "\"`; echo $INX"
if whichserver = "NOXSERVER" then
-- display dialog "No XServer Found"
set now_running to "Skip"
end if
-- display dialog "now running is " & now_running
if now_running = "" then
if whichserver = "X11" then
-- enable keyboard extension for X11 for proper Alt key handling
set x11cmd to Xserverloc & "/Contents/MacOS/X11 +kb &>/dev/null & echo $!"
do shell script x11cmd
-- save process id
set x11pid to the result
-- wait until the window manager is started which is the second child process of x11
set numchildrencmd to "ps -x -o ppid | grep " & x11pid & " | wc -l"
set numchildren to 0
set d to current date
set t1 to time of d
repeat while numchildren ≠ 2
set d to current date
set t2 to time of d
-- give up after 30 seconds
if t2 - t1 > 30 then
display dialog "Command timed out"
exit repeat
end if
set result to do shell script numchildrencmd
set numchildren to result as integer
end repeat
else -- startup XDarwin
do shell script "open " & "\"" & Xserverloc & "\"" & " >> /dev/null 2>&1"
do shell script "sleep 4"
end if
end if
if whichserver = "X11" then
-- the DISPLAY variable is different for every user currently logged in
-- X11 passes the DISPLAY as the last command line parameter to its child process
-- we can use ps to read the command line and parse the trailing :0, :1, or whatever
set xdisplay to do shell script "ps -wx -o command | grep X11.app | grep \":.$\" | sed \"s/^.*:/:/g\""
-- display dialog xdisplay
return xdisplay
else
-- TODO: find out how XDarwin does it
return ":0"
end if
end startXServer
on checkPath(aPath)
set pathFound to do shell script "if [ -d \"" & aPath & "\" ]; then echo \"true\"; else echo \"false\"; fi"
--display dialog quoted form of aPath
if (pathFound = "true") then
return 1
else
return 0
end if
end checkPath
-- getInstallPath
-- finds the path to the oo.o installation
-- checks the path to make sure there is something there
-- returns true if so, or error message if not
on getInstallPath()
set myPath to (path to me)
--set oooInstallPath to "/Applications/OpenOffice.org 2.0.app/Contents/openoffice.org"
tell application "Finder" to set j to POSIX path of (application file id "org.openoffice.script" as string)
set oooInstallPath to j & "/Contents/openoffice.org"
if checkPath(oooInstallPath) = 0 then
display dialog "No valid installation found at: " & oooInstallPath
return ""
else
return oooInstallPath
end if
end getInstallPath
on getProgramPath()
return getInstallPath() & "/program"
end getProgramPath
on openFiles(fileList)
-- open dialog sends posix
if (count of fileList) > 0 then
repeat with i from 1 to the count of fileList
set theDocument to (quoted form of item i of fileList)
--display dialog theDocument
openSoffice("soffice", theDocument)
end repeat
end if
end openFiles
