The -run
command line switch specifies a
BeanShell script to run on startup:
$
jedit -run=test.bsh
Note that just like with startup scripts, the
view
, textArea
,
editPane
and buffer
variables are
not defined.
If another instance is already running, the script will be run in
that instance, and you will be able to use the
jEdit.getLastView()
method to obtain a view.
However, if a new instance of jEdit is being started, the script will be
run at the same time as all other startup scripts; that is, before the
first view is opened.
If your script needs a view instance to operate on, you can use the following code pattern to obtain one, no matter how or when the script is being run:
void doSomethingUseful() { void run() { view = jEdit.getLastView(); // put actual script body here } if(jEdit.getLastView() == null) VFSManager.runInAWTThread(this); else run(); } doSomethingUseful();
If the script is being run in a loaded instance, it can be invoked
to perform its work immediately. However, if the script is running at
startup, before an initial view exists, its operation must be delayed to
allow the view object first to be created and displayed. In order to
queue the macro's operation, the scripted “closure” named
doSomethingUseful()
implements the
Runnable
interface of the Java platform. That
interface contains only a single run()
method that
takes no parameters and has no return value. The macro's implementation
of the run()
method contains the
“working” portion of the macro. Then the scripted object,
represented by a reference to this
, is passed to the
runInAWTThread()
method. This schedules the macro's
operations for execution after the startup routine is complete.
As this example illustrates, the
runInAWTThread()
method can be used to ensure that
a macro will perform operations after other operations have completed.
If it is invoked during startup, it schedules the specified
Runnable
object to run after startup is complete.
If invoked when jEdit is fully loaded, the
Runnable
object will execute after all pending
input/output is complete, or immediately if there are no pending I/O
operations. This will delay operations on a new buffer, for example,
until after the buffer is loaded and displayed.