-- Manipulation of document properties
to checkSaveStatus given updating:shouldSave
tell application "SubEthaEdit"
if not (exists path of front document) then
error "You have to save the document first"
end if
if shouldSave and (modified of front document) then
try
save front document
end try
end if
end tell
end checkSaveStatus
on documentPath()
tell application "SubEthaEdit" to get the path of the front document
end documentPath
on documentLine()
tell application "SubEthaEdit" to get the startLineNumber of selection of front document
end documentLine
to checkSaveStatus given updating:shouldSave
tell application "SubEthaEdit"
if not (exists path of front document) then
error "You have to save the document first"
end if
if shouldSave and (modified of front document) then
try
save front document
end try
end if
end tell
end checkSaveStatus
on documentPath()
tell application "SubEthaEdit" to get the path of the front document
end documentPath
on documentLine()
tell application "SubEthaEdit" to get the startLineNumber of selection of front document
end documentLine
The
checkSaveStatus
handler is the most complex of the three, and the only one that warrants any discussion. It never returns a meaningful value, and thus is only to be called for its side effects. There are two possible side effects. First, if the front document in SEE has never been saved, an error is raised. Second, if requested and necessary, the handler will update the file on disk by saving the current document. That may seem a bit obscure, so let's examine an example. The AppleScript for typesetting previously featured a rather complicated nesting of
tell
, try
, and if
blocks. Using the new handlers, the only thing outside the handlers in a rewritten typesetting script is:checkSaveStatus with updating
set buildScript to join of {modeEnvironment(), quotedForm for "$SEE_MODE_RESOURCES/bin/buildlatex.sh", quotedForm for documentPath(), documentLine()} by space
do shell script buildScript
on seescriptsettings()
return {displayName:"Typeset and View", shortDisplayName:"Typeset", keyboardShortcut:"@b", toolbarIcon:"ToolbarIconBuildAndRun", inDefaultToolbar:"yes", toolbarTooltip:"Typeset and view the current document", inContextMenu:"no"}
end seescriptsettings
set buildScript to join of {modeEnvironment(), quotedForm for "$SEE_MODE_RESOURCES/bin/buildlatex.sh", quotedForm for documentPath(), documentLine()} by space
do shell script buildScript
on seescriptsettings()
return {displayName:"Typeset and View", shortDisplayName:"Typeset", keyboardShortcut:"@b", toolbarIcon:"ToolbarIconBuildAndRun", inDefaultToolbar:"yes", toolbarTooltip:"Typeset and view the current document", inContextMenu:"no"}
end seescriptsettings
Just three statements, plus the
seescriptsettings
handler to connect it to SEE.The various handlers introduced thus far have been to support several actions in the LaTeX mode: typesetting, viewing the product PDF in an external viewer, cleaning up auxiliary files, and commenting out lines. All of these actions can be rewritten using just the handlers, without directly addressing SubEthaEdit at all.
The handlers thus provide a useful abstraction layer for working with several distinct types of actions. They definitely won't cover every case of interest, but should still be useful patterns for a lot of common actions in many different modes.
No comments:
Post a Comment