You know, of course, about the Scripting Plugin for OmegaT. If you’re a member of OmegaT Yahoo user group, you may know Yu Tang who provided a bunch of nice scripts to open various files and folders of the currently active OmegaT project. His scripts have been included in the most recent version of the Scripting Plugin. The only problem with them was that one needed to edit them if they were used on OS’es other than MS Windows. Generally not a problem, as many OmegaT users are quite computer savvy, but it would be nicer if they could work everywhere “out of box”.
Yu Tang has updated the scripts so now they check which OS they are running on. If you’re willing to test them out and report any possible problems, please do.
The scripts are listed here and posted on the Pastebin.com with the link to each individual script right before the respective listing.
- open_current_file.groovy
/*
* Open current file
*
* @author Yu Tang
* @date 2013-05-23
* @version 0.2
*/
import static javax.swing.JOptionPane.*
import static org.omegat.util.Platform.*
// abort if a project is not opened yet
def prop = project.projectProperties
if (!prop) {
final def title = 'open current file'
final def msg = 'Please try again after you open a project.'
showMessageDialog null, msg, title, INFORMATION_MESSAGE
return
}
// get command GString to open a file
def file = prop.sourceRoot + editor.currentFile
def command
switch (osType) {
case [OsType.WIN64, OsType.WIN32]:
command = "cmd /c start \"\" \"$file\"" // for WinNT
// command = "command /c start \"\" \"$file\"" // for Win9x or WinME
break
case [OsType.MAC64, OsType.MAC32]:
command = "open \"$file\""
break
default: // for Linux or others
command = ['xdg-open', file]
break
}
// open it
command.execute()
- open_folder.groovy
/*
* Open project folder
*
* @author Yu Tang
* @date 2013-05-23
* @version 0.2
*/
import static javax.swing.JOptionPane.*
import static org.omegat.util.Platform.*
// abort if a project is not opened yet
def prop = project.projectProperties
if (!prop) {
final def title = 'open project folder'
final def msg = 'Please try again after you open a project.'
showMessageDialog null, msg, title, INFORMATION_MESSAGE
return
}
// get command GString to open a folder
def folder = prop.projectRoot
def command
switch (osType) {
case [OsType.WIN64, OsType.WIN32]:
command = "explorer.exe \"$folder\""
break
case [OsType.MAC64, OsType.MAC32]:
command = "open \"$folder\""
break
default: // for Linux or others
command = ['xdg-open', folder]
break
}
// open it
command.execute()
- open_glossary.groovy
/*
* Open the writeable glossary in an editor
*
* @author Yu Tang
* @date 2013-05-23
* @version 0.2
*/
import static javax.swing.JOptionPane.*
import static org.omegat.util.Platform.*
/**
* Uncomment the next line if you want to set a default text editor
* that will open glossary file
*/
// def textEditor = /path to your editor/
// E.g., /TextMate/
// /C:\Program Files (x86)\editor\editor.exe/
// ['x-terminal-emulator', '-e', 'vi']
// make a Closure to show message dialog
def showMessage = { msg -> showMessageDialog null, msg, 'Open glossary', INFORMATION_MESSAGE }
// abort if a project is not opened yet
def prop = project.projectProperties
if (!prop) {
showMessage 'Please try again after you open a project.'
return
}
// exit if file not found
def file = prop.writeableGlossary
if (! new File(file).exists()) {
showMessage 'Glossary file not found.'
return
}
// get command GString list to open a file
def command
switch (osType) {
case [OsType.WIN64, OsType.WIN32]:
command = "cmd /c start \"\" \"$file\"" // default
try { command = textEditor instanceof List ? [*textEditor, file] : "\"$textEditor\" \"$file\"" } catch (ignore) {}
break
case [OsType.MAC64, OsType.MAC32]:
command = "open \"$file\"" // default
try { command = textEditor instanceof List ? [*textEditor, file] : "open -a \"$textEditor\" \"$file\"" } catch (ignore) {}
break
default: // for Linux or others
command = ['xdg-open', file] // default
try { command = textEditor instanceof List ? [*textEditor, file] : [textEditor, file] } catch (ignore) {}
break
}
// open it
console.println "command: $command"
command.execute()
- open_project_save.groovy
/*
* Open project_save.tmx in an editor
*
* @author Yu Tang
* @date 2013-05-23
* @version 0.2
*/
import static javax.swing.JOptionPane.*
import static org.omegat.util.Platform.*
/**
* Uncomment the next line if you want to set a default text editor
* that will open project_save.tmx
*/
// def textEditor = /path to your editor/
// E.g., /TextMate/
// /C:\Program Files (x86)\editor\editor.exe/
// ['x-terminal-emulator', '-e', 'vi']
// "x-terminal-emulator -e vi".split()
// abort if a project is not opened yet
def prop = project.projectProperties
if (!prop) {
final def title = 'open project_save.tmx'
final def msg = 'Please try again after you open a project.'
showMessageDialog null, msg, title, INFORMATION_MESSAGE
return
}
// get command GString list to open a file
def file = "${prop.projectInternal}project_save.tmx"
def command
switch (osType) {
case [OsType.WIN64, OsType.WIN32]:
command = "cmd /c start \"\" \"$file\"" // default
try { command = textEditor instanceof List ? [*textEditor, file] : "\"$textEditor\" \"$file\"" } catch (ignore) {}
break
case [OsType.MAC64, OsType.MAC32]:
command = "open \"$file\"" // default
try { command = textEditor instanceof List ? [*textEditor, file] : "open -a \"$textEditor\" \"$file\"" } catch (ignore) {}
break
default: // for Linux or others
command = ['xdg-open', file] // default
try { command = textEditor instanceof List ? [*textEditor, file] : [textEditor, file] } catch (ignore) {}
break
}
// open it
console.println "command: $command"
command.execute()
- open_tm_folder.groovy
/*
* Open the /tm folder
*
* @author Yu Tang
* @date 2013-05-23
* @version 0.2
*/
import static javax.swing.JOptionPane.*
import static org.omegat.util.Platform.*
// abort if a project is not opened yet
def prop = project.projectProperties
if (!prop) {
final def title = 'open TM folder'
final def msg = 'Please try again after you open a project.'
showMessageDialog null, msg, title, INFORMATION_MESSAGE
return
}
// get command GString to open a folder
def folder = prop.TMRoot
def command
switch (osType) {
case [OsType.WIN64, OsType.WIN32]:
command = "explorer.exe \"$folder\""
break
case [OsType.MAC64, OsType.MAC32]:
command = "open \"$folder\""
break
default: // for Linux or others
command = ['xdg-open', folder]
break
}
// open it
command.execute()
To test, put the scripts to other scripts that come with the Scripting Plugin and run them on a real or testing OmegaT projects. Among the things to check are: ability to run at all, ability to run when the filenames or path to the projects contain spaces and “special” characters.
You can post your findings in comments, or, if you’re so inclined, here (clickable)
UPDATE
Thanks to all who participated in testing, now shiny new scripts got included in a new release of the Scripting Plugin for OmegaT 2.6, and as an integral part of new OmegaT 3.0. Pretty cool, yeah?