First, there is an additional, minor change. Earlier, I'd described a
prependEnvironment
AppleScript handler. This proves to be too specific. A slightly simpler modeEnvironment
handler seems to be a better fit. It is defined as:on modeEnvironment for seeMode
set envFilePath to (path to preferences from user domain as string) & "de.codingmonkeys.SubEthaEdit." & (name of seeMode) & "_environment.plist"
readEnvironment out of envFilePath
end modeEnvironment
set envFilePath to (path to preferences from user domain as string) & "de.codingmonkeys.SubEthaEdit." & (name of seeMode) & "_environment.plist"
readEnvironment out of envFilePath
end modeEnvironment
Hopefully, that is straightforward enough.
With the infrastructure set up, the logic for the AppleScript becomes pretty straightforward. We first get some needed information from the SEE document. We use that information to read out the environment using
modeEnvironment
and to build a pipeline
string calling our comment.sh
shell script. Then, we adjust the text selection to select complete lines, transform that text by running it through pipeline
, and set the selection to the transformed text. Additionally, we define seescriptsettings
to integrate our AppleScript into SEE. The settings are patterned after those of the Objective C mode. Here is the relevant fragment of the AppleScript:tell application "SubEthaEdit"
set activeMode to mode of front document
set modeResources to resource path of activeMode
end tell
set env to modeEnvironment for activeMode
completeSelectedLines()
set inText to selectionText()
set pipeline to join of {quotedForm for (modeResources & "/bin/comment.sh"), quotedForm for "${SEE_LATEX_COMMENT:-%}"} by space
set outText to shellTransform of inText for env through pipeline without alteringLineEndings
setSelectionText to outText
-- SubEthaEdit settings
on seescriptsettings()
{displayName:"Un/Comment Selected Lines", keyboardShortcut:"@/", inContextMenu:"yes"}
end seescriptsettings
set activeMode to mode of front document
set modeResources to resource path of activeMode
end tell
set env to modeEnvironment for activeMode
completeSelectedLines()
set inText to selectionText()
set pipeline to join of {quotedForm for (modeResources & "/bin/comment.sh"), quotedForm for "${SEE_LATEX_COMMENT:-%}"} by space
set outText to shellTransform of inText for env through pipeline without alteringLineEndings
setSelectionText to outText
-- SubEthaEdit settings
on seescriptsettings()
{displayName:"Un/Comment Selected Lines", keyboardShortcut:"@/", inContextMenu:"yes"}
end seescriptsettings
Note that the comment string can be set with the
SEE_LATEX_COMMENT
environment variable, defaulting to a "%". The result is fairly nice, but not without shortcomings. There is a brief, but noticable, hesitation between activating the script and seeing the results. It's reasonably clear that building up the environment string is the problem; I'm not sure whether it's worth fixing or not. More significantly, there is a subtle logic problem. Implicitly, I've assumed that the LaTeX document is using Unix-style ("\n") line endings. That's a pretty safe assumption, most of the time, but can be wrong; we'll fix that next time.
No comments:
Post a Comment