[OS X TeX] Re: Applescript to help update the Engines folder after a TeXShop update
Ramón Figueroa-Centeno
ramonf at hawaii.edu
Fri Feb 26 13:03:46 EST 2010
Aloha,
I revised the script to add user interaction.
Enjoy!
Ramón
------
-- Script to help organize new engines after a TeXShop update.
-- Ramon Figueroa-Centeno (February 24, 2010)
-- History:
-- Version 1.1: Add user interaction
-- A list of the engines that you wish to "NOT" be trashed, e.g., "XeLaTeX"
(not "XeLaTeX.engine").
-- The names are case sensitive!
property ignore_list : {}
-- Find all the engines in "/Library/TeXShop/Engines" (or subdirectories
thereof) and compute their md5sum
set command to "find ~/Library/TeXShop/Engines -name '*.engine' -type f
-exec md5sum {} \\;"
set candidates to paragraphs of (do shell script command)
set engines to {}
set md5sums to {}
set names to {}
repeat with p in candidates
set md5sums to md5sums & {(characters 1 thru 32 of p) as string}
set filepath to (characters 36 thru -1 of p) as string
set engines to engines & {filepath}
set names to names & {nameof(filepath)}
end repeat
-- Assume that there are at most two of each engine, one active and/or one
inactive.
-- When there are two engines define the one in the Inactive folder as "new"
and the other as old"
set duplicates to {}
set new_engines to {}
set old_engines to {}
repeat with i from 1 to (count of engines) - 1
repeat with j from i + 1 to count of engines
if (item i of names) = (item j of names) then
set e1 to item i of engines
set e2 to item j of engines
if (item i of md5sums) = (item j of md5sums) then
if e1 contains "Inactive" and e2 does not contain "Inactive" then
set duplicates to duplicates & {e1}
else if e2 contains "Inactive" and e1 does not contain "Inactive" then
set duplicates to duplicates & {e2}
end if
else
if e1 contains "Inactive" and e2 does not contain "Inactive" then
set new_engines to new_engines & {e1}
set old_engines to old_engines & {e2}
else if e2 contains "Inactive" and e1 does not contain "Inactive" then
set new_engines to new_engines & {e2}
set old_engines to old_engines & {e1}
end if
end if
end if
end repeat
end repeat
-- Finder labels
property nolabel : 0
property red : 2
property orange : 1
property yellow : 3
property green : 6
property blue : 4
property purple : 5
property gray : 7
--tell application "Finder" to activate
-- unlabel all the engines in the folder Engines hierarchy
set howmany to (count of duplicates) + (count of old_engines)
if howmany > 0 then
display dialog (howmany as string) & " Eponymous were engines found. \rDo
you wish me to process them?\r (Every engine's Finder label is reset)" with
icon 0
repeat with f in engines
set f to POSIX file f
tell application "Finder"
if the label index of file f is not in {nolabel} then
set the label index of file f to nolabel
end if
end tell
end repeat
else
return
end if
if duplicates is not {} then
display dialog "Do you want to delete or label red your inactive duplicate
engines?" buttons {"Cancel", "Delete", "Label Red"} default button "Label
Red"
set answer to button returned of the result
if answer is "Label Red" then
set trashdups to false
else if answer is "Delete" then
set trashdups to true
else
return
end if
set names to sort(getnames(duplicates))
set names to choose from list names with prompt "Choose Engines:\rTip:
Press ⌘ key and click items" with title "Duplicates" default items names
with multiple selections allowed and empty selection allowed
if result is false then return
end if
-- label or trash duplicates
repeat with f in duplicates
set fname to nameof(f)
set f to POSIX file f
if (fname is not in ignore_list) and (fname is in names) then
if trashdups then
--trash the inactive duplicate if it is not in the ignore list
tell application "Finder" to move the file f to the trash
else
tell application "Finder" to set the label index of file f to red
end if
end if
end repeat
if old_engines is not {} then
display dialog "Do you want to \"update\" or label your \"old\" and \"new\"
engines?" buttons {"Cancel", "Update", "Label"} default button "Label"
set answer to button returned of the result
if answer is "Label" then
set update to false
else if answer is "Update" then
set update to true
else
return
end if
set names to sort(getnames(old_engines))
set names to choose from list names with prompt "Choose Engines:\rTip:
Press ⌘ key and click items" with title "\"Updated\" Engines" default items
names with multiple selections allowed and empty selection allowed
if result is false then return
end if
-- label or trash "old" engines
repeat with f in old_engines
set fname to nameof(f)
set f to POSIX file f
if (fname is not in ignore_list) and (fname is in names) then
if update then
--trash old engine if it is not the ignore list
tell application "Finder" to move the file f to the trash
else
tell application "Finder" to set the label index of file f to orange
end if
end if
end repeat
-- label or activate "new" engines
repeat with f in new_engines
set fname to nameof(f)
set f to POSIX file f
if (fname is not in ignore_list) and (fname is in names) then
tell application "Finder" to set the label index of file f to green
if update then
--activate new engine if the "old" one is not the ignore list
tell application "Finder"
move the file f to the folder "Engines" of the folder "TeXShop" of the
folder "Library" of home without replacing
end tell
end if
end if
end repeat
on getnames(the_list)
set new_list to {}
repeat with f in the_list
set fname to nameof(f)
--set fname to do shell script "basename " & quoted form of f & " .engine"
set new_list to new_list & {fname}
end repeat
return new_list
end getnames
on nameof(f)
set fname to do shell script "basename " & quoted form of f & " .engine"
return fname
end nameof
(*
http://www.macosxhints.com/article.php?story=20040513173003941
Sort lists in AppleScript using the Unix sort command
Mon, May 17 '04 at 09:13AM • from: erickaterman *)
on sort(the_list)
set old_delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to {ASCII character 10} -- always a
linefeed
set list_string to (the_list as string)
set new_string to do shell script "echo " & quoted form of list_string & "
| sort -f -u"
set new_list to (paragraphs of new_string)
set AppleScript's text item delimiters to old_delims
return new_list
end sort
--
View this message in context: http://n2.nabble.com/Applescript-to-help-update-the-Engines-folder-after-a-TeXShop-update-tp4630928p4640774.html
Sent from the MacOSX-TeX mailing list archive at Nabble.com.
More information about the MacOSX-TeX
mailing list