#!/usr/bin/osascript # NetHack 3.6.2 NetHackTerm.applescript $NHDT-Date: 1524684597 2018/04/25 19:29:57 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.8 $ # Copyright (c) Kenneth Lorber, Kensington, Maryland, 2011 # NetHack may be freely redistributed. See license for details. # Run the terminal port from the GUI. # BUGS: # We close any terminal windows with no processes in them, even if they # don't belong to us because we can't really tell which ones do belong to us. # Shouldn't be serious since anyone using this is unlikely to be using Terminal # for anything else. set debug to false set needshutdown to false tell application "Terminal" # see if we're going to have to shut it down at the end because we started it up if it is not running then set needshutdown to true end if activate #open new window and run NetHack in it do script with command "clear;sleep 1;/usr/local/bin/nethack;echo '(press RETURN to exit)';awk '{exit}';exit" set nhresult to result -- class is tab set nhresrec to result as record set nhreslist to result as list set nhwin to item 4 of nhreslist set custom title of nhwin to "NH" #set title displays custom title of nhresult to true set title displays device name of nhresult to false set title displays shell path of nhresult to false set title displays window size of nhresult to false set title displays file name of nhresult to false #set idnum to id of nhresult set xxx to class of nhresrec get class of nhresrec -- record get length of nhresrec -- 4 set nhwinname to name of nhwin set nhtab to selected tab of nhwin get processes of nhtab # main loop - wait for all nethack processes to exit set hit to true set nhname to "nethack" as text delay 4 repeat while hit set hit to false delay 0.5 # don't blow up if the window has gone away try set procs to get processes of nhtab on error number -1728 exit repeat end try repeat with pname in procs if debug then display alert "PNAME=" & pname & "=" & nhname & "=" end if # XXX this test is odd, but more obvious tests fail if pname starts with nhname then #display alert "HIT" -- dangerous - infinite loop set hit to true end if # yes, this is scary. if pname starts with ("awk" as text) then set hit to true end if end repeat end repeat if debug then display alert "DONE" end if # window may have already closed or dropped its last process (error -1728) try close window nhwinname on error errText number errNum if errNum = -1728 then if debug then display alert "close failed (expected)" end if else -- unexpected error - show it display alert "close failed: " & errText & " errnum=" & errNum end if end try end tell # Close all the windows that don't have any live processes in them. tell application "Terminal" set wc to count windows set pending to {} if debug then display alert "COUNT is " & wc end if repeat with win in windows if debug then display alert "WIN: " & (name of win) & " TABS: " & (count of tabs of win) & " PROCS: " & (count of processes of item 1 of tabs of win) end if set pcount to count of processes of item 1 of tabs of win if pcount is 0 then copy win to the end of pending set wc to wc - 1 end if end repeat end tell if debug then display alert "LATE COUNT is " & wc end if repeat with win in pending try close win end try end repeat # If we started Terminal.app and the user doesn't have anything else running, # shut it down. if needshutdown and (wc is 0) then if debug then display alert "trying shutdown" end if tell application "Terminal" quit end tell end if