From: Matthieu C. <cho...@gm...> - 2009-02-10 22:51:08
|
Right, I think the best way to handle this is to listen on the EditBus for ViewUpdate.EDIT_PANE_CHANGED in the macro and execute the code you want in the EBComponent like this final EBComponent comp = new EBComponent() { public void handleMessage(EBMessage message) { if (message instanceof ViewUpdate) { ViewUpdate vu = (ViewUpdate) message; if (vu.getWhat() != ViewUpdate.EDIT_PANE_CHANGED) return; EditBus.removeFromBus(comp); // Necessary because you must not block the EditBus with a modal dialog SwingUtilities.invokeLater(new Runnable() { public void run() { View view = jEdit.getActiveView(); ta = view.getTextArea(); Macros.message(view, ((Buffer)ta.getBuffer()).getPath()); } }); } } }; EditBus.addToBus(comp); view.nextTextArea(); By the way I tested like this with an anonymous inner class EditBus.addToBus(new EBComponent() { public void handleMessage(EBMessage message) { if (message instanceof ViewUpdate) { ViewUpdate vu = (ViewUpdate) message; if (vu.getWhat() != ViewUpdate.EDIT_PANE_CHANGED) return; EditBus.removeFromBus(this); SwingUtilities.invokeLater(new Runnable() { public void run() { View view = jEdit.getActiveView(); ta = view.getTextArea(); Macros.message(view, ((Buffer)ta.getBuffer()).getPath()); } }); } } }); view.nextTextArea(); But the line EditBus.removeFromBus(this); fails because "this" is not the same instance of EBComponent that was added to the EditBus, I have no explanation for this, I suppose it is a bug in beanshell Matthieu On Tue, Feb 10, 2009 at 10:07 PM, Shlomy Reinstein <sre...@gm...>wrote: > This is not a bug, it's a threading thing. "view.nextTextArea()" > shifts the focus to the next text area, but this executes > asynchronously using "invokeLater". Before it actually executes, and > makes the next text area current, the Macros.message command is > executed, and still uses the current text area. > Shlomy > > On Tue, Feb 10, 2009 at 10:43 PM, Robert Schwenn <Ro...@sc...> > wrote: > > Hi, I just stumbled into an issue I can't understand and suspect it to be > a > > bug possibly. The listed macro should do only two simple things, provided > > the active view is split: > > > > 1. move the caret into the next textArea (=> this works well) > > 2. should get the "current" textArea, where the caret now resides (=> > this > > does *not* work) > > > > Why does step 2 not work? > > > > > > // Here is the macro: > > view.nextTextArea(); > > ta = jEdit.getActiveView().getTextArea(); > > Macros.message(view, ta.getBuffer().getPath()); > > > > > > > ------------------------------------------------------------------------------ > > Create and Deploy Rich Internet Apps outside the browser with > > Adobe(R)AIR(TM) > > software. With Adobe AIR, Ajax developers can use existing skills and > code > > to > > build responsive, highly engaging applications that combine the power of > > local > > resources and data with the reach of the web. Download the Adobe AIR SDK > and > > Ajax docs to start building applications today- > http://p.sf.net/sfu/adobe-com > > -- > > ----------------------------------------------- > > jEdit Developers' List > > jEd...@li... > > https://lists.sourceforge.net/lists/listinfo/jedit-devel > > > > > > > ------------------------------------------------------------------------------ > Create and Deploy Rich Internet Apps outside the browser with > Adobe(R)AIR(TM) > software. With Adobe AIR, Ajax developers can use existing skills and code > to > build responsive, highly engaging applications that combine the power of > local > resources and data with the reach of the web. Download the Adobe AIR SDK > and > Ajax docs to start building applications today- > http://p.sf.net/sfu/adobe-com > -- > ----------------------------------------------- > jEdit Developers' List > jEd...@li... > https://lists.sourceforge.net/lists/listinfo/jedit-devel > |