Code Monkey home page Code Monkey logo

freeplane-jumper's People

Contributors

euu2021 avatar lilive avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

freeplane-jumper's Issues

Adapt to the new Freeplane feature: Jump In

Now, FP has the feature called Jump in. Currently, when the user Jumps In a node, and perform a search in Jumper (with "Discard hidden nodes" activated), the nodes outside of the "Jumped in" branch also appear in the results.

Maybe, the "Discard hidden nodes" option in Jumper should also discard those nodes that get hidden because of the Jump In?

I vote for "yes", because, when I use "Jump In", I'm very focused on that branch, and don't want to mix with the rest of the map. Anyway, if I want to search in the rest of the map I can deactivate the "Discard hidden nodes" option.

Jumper seems not to work on Freeplane 1.9 ref 17

Hello,

I am rather new to Freeplane but I find the Jumper addon to be great one. I installed the release candiate of FreePlane 1.9 ref 17 and now the Jumper is not working anymore. The windows show up and I can change the search and display settings but nothing is found. The results field is empty (on activation already and that used to be all notes if I remember correctly) and searching for a value does not find anything.

I am not sure if and how I can assist you in debugging this issue. Let me know if you need some log file or something. Has anybody got this working on FreePlane 1.9?

Regards,
Jeroen

Execute operations directly from the Jumper window. For example: Connect.

@euu2021 wrote:

Execute operations directly from the Jumper window. For example: Connect. So, the operation is executed on the node selected in the search list. This would be useful, for example, to make it easier to use connectors as backlinks.

I understand the idea. How to provide something like that while keeping Jumper as simple as possible ?

Ideas :

1 - If the operation to execute on a node in the search result require only this node to be selected, we may say that it's enough convenient that the user select the node (and so close the Jumper window), execute the operation he wants to, then jump back to the previous location with Freeplane > Navigate > Go backward if he needs to.
The problem that I just discover is that Jumper change the locations history as the user browse the results, and that a single "Go backward" do not always return to the place where Jumper was invoked. I think this should be fixed.

2 - If the operation to execute require two nodes to be selected (like Connect), and that the user want them to be the node selected at Jumper invocation and one node in the search result, there would be this solution: Ctrl+Enter or Ctrl+Click on a node in the search results may add it to the selected nodes, instead of simply select it, and close the window. Then the user would execute the operation he wants to, for example "Connect".

What do you think ?

Accents are always "case sensitive"

I just found another problem with the accents. Those little devils don't care if the search is case-sensitive or not. Notice that searching for "á" doesn't find "Á":

javaw_l115DQcl2A

Bug when searching with Jump In activated

I'm having a bug in version 1.0.4.

In this example map:
example map bug.zip

Steps:

  • with the Root selected, search for "aaa"
  • click on the result and navigate to it
  • Jump In
  • Search for "bbb"
  • click on the result and navigate to it
  • try to select the "aaa" node with the mouse by hovering over it (I use the "select on Hover" setting"
  • the bug happens: the map view gets frozen and errors start to kick in

Steps demonstration:
pf16zIwBq3

This is the resulting log (the problem starts at the first STDERR):
log bug.zip

Search in all opened maps

@Ndrocchietto wrote:

great software, there is a shortcut search in all the (open) maps, ctrl alt shift N that allow me to jump around all my opened maps, so I open all the maps I need and then navigate through that inbuilt search function. If may be possible to use your fantastic software around opened maps, would be fantastic

Improve performances

Jumper is near unusable with very big maps. I open this issue to inform the user who may wait for improvement.

A first step would be to implement multi threading. I've already worked on it, but I struggle with concurrency problems. Some help about Java multi threading would be nice.

Because Jumper work with plain text, and not with HTML/Markdown formatted text, it has to generate this plain text for nodes with formatted text. This is time consuming for large maps. So, another idea would be to cache a plain text version of the map. But I'm reluctant to introduce some map changes monitoring that may update the cache as the user modify the map.

Another idea may be to try to rewrite some parts of Jumper in Java instead of groovy, perhaps this speed up thinks. Wait ! I just realize that I never read nothing about Groovy performances and optimization. I have to. Any pointer on good resources on this topic are welcome.

Freeplane-Jumper should be recompiled with Groovy 4 to run under Java 17 and Freeplane 1.10.x

See freeplane/freeplane#294

The problen has gone after I compiled your add-on with

dependencies {
    implementation name: 'freeplanelauncher'
    implementation name: 'freeplaneviewer'
	implementation group: 'org.freeplane.script', name: 'plugin', version: '+'
	implementation platform ('org.apache.groovy:groovy-all:4.0.1') {
		exclude group:'org.codehaus.groovy', module:'groovy-test'
		exclude group:'org.codehaus.groovy', module:'groovy-test-junit5'
		exclude group:'org.codehaus.groovy', module:'groovy-testng'
		exclude group:'org.codehaus.groovy', module:'groovy-ant'
		exclude group:'org.codehaus.groovy', module:'groovy-docgenerator'
		exclude group:'org.codehaus.groovy', module:'groovy-groovydoc'
		exclude group:'org.codehaus.groovy', module:'groovy-cli-commons'
		exclude group:'org.codehaus.groovy', module:'groovy-cli-picocli'
	}
	implementation 'org.apache.groovy:groovy-dateutil:4.0.1'
}

Interactions with the list of the results

Due to this feature request and this discussion, I'm considering to change the interactions with the results list. Can you tell me what do you think about this proposal ?

Goals:

  • New possibility to select many items in the result list. So Jumper may help to select nodes in a map.
  • Allow the user to click an item to show it in the map without closing Jumper.

How to achieve these goals:

Keyboard interaction with the result list

  • Up/Down arrow focus a result, and center the map view around it.
  • Ctrl/Cmd + Space select/unselect a result
  • Shift + Up/Down selected the focused result, focus the previous/next result, select it, and center the map view around it.
  • Enter jump to the focused result. If there is some selected results, they are all selected in the map.

Mouse interaction with the result list

  • Click a result focus it, and center the map view around it.
  • Ctrl/Cmd + Click select/unselect a result.
  • Shift + Click select all the results from the most recently selected to this one.
  • Double-click a result jump to it. If there is some selected results, they are all selected in the map.

Thank you

Freeplane-jumper doesn’t work anymore

Hi @lilive

I use a lot Jumper but it seems to not work now.

at 2023-01-10 07:44:29 CMT,  hash 5dd8eae1fa32c337c5538ea75133e7c1
previous report : at 2023-01-09 19:55:25 CMT,  hash 76db731c7364c2734fe69e4c5d3a62dc
user : bepolymathe
freeplane_version = 1.11.1 alpha; freeplane_xml_version = freeplane 1.11.1
git revision = c573e499cc4c55fd25cb54d51ff78911ead8eb63 Dimitry Polivaev 2022-11-27T12:05:11Z
java_version = 17.0.5; os_name = Linux; os_version = 6.0.17-300.fc37.x86_64
Exception in thread "AWT-EventQueue-0" 
groovy.lang.MissingMethodException: No signature of method: lilive.jumper.Candidates.fireIntervalRemoved() is applicable for argument types: (lilive.jumper.Candidates, Integer, Integer) values: [[], 0, 29]

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:72)

	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:82)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:171)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:203)

	at lilive.jumper.Candidates.update(Candidates.groovy:265)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)

	at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1348)

	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1103)

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnCurrentN(ScriptBytecodeAdapter.java:96)

	at lilive.jumper.Candidates.this$dist$invoke$3(Candidates.groovy)

	at lilive.jumper.Candidates$2.methodMissing(Candidates.groovy)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:926)

	at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1428)

	at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1350)

	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1103)

	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:63)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185)

	at lilive.jumper.Candidates$2.run(Candidates.groovy:255)

	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)

	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)

	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)

	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)

	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236)

	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)

	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234)

	at java.desktop/java.awt.Dialog.show(Dialog.java:1080)

	at java.desktop/java.awt.Component.show(Component.java:1728)

	at java.desktop/java.awt.Component.setVisible(Component.java:1675)

	at java.desktop/java.awt.Window.setVisible(Window.java:1036)

	at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1016)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)

	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2917)

	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:3920)

	at org.codehaus.groovy.runtime.InvokerHelper.setProperty(InvokerHelper.java:194)

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:502)

	at lilive.jumper.Gui.show(Gui.groovy:327)

	at lilive.jumper.Gui$show$0.call(Unknown Source)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)

	at lilive.jumper.Jumper.init(Jumper.groovy:289)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)

	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:198)

	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:75)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)

	at lilive.jumper.Jumper.start(Jumper.groovy:62)

	at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)

	at run.run(run.groovy:18)

	at org.freeplane.plugin.script.GroovyScript.execute(GroovyScript.java:114)

	at org.freeplane.plugin.script.ScriptRunner.execute(ScriptRunner.java:56)

	at org.freeplane.plugin.script.ExecuteScriptAction.actionPerformed(ExecuteScriptAction.java:112)

	at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810)

	at org.freeplane.core.ui.ActionAcceleratorManager.processKeyBinding(ActionAcceleratorManager.java:454)

	at org.freeplane.main.mindmapmode.MModeControllerFactory$2.processKeyBinding(MModeControllerFactory.java:291)

	at org.freeplane.view.swing.ui.UserInputListenerFactory$2.processKeyBinding(UserInputListenerFactory.java:173)

	at org.freeplane.core.ui.components.FreeplaneMenuBar.processKeyBinding(FreeplaneMenuBar.java:101)

	at org.freeplane.main.application.MenuKeyProcessor.processKeyBinding(MenuKeyProcessor.java:26)

	at org.freeplane.main.application.ConnectedToMenuView.processKeyBinding(ConnectedToMenuView.java:41)

	at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:3009)

	at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2909)

	at java.desktop/java.awt.Component.processEvent(Component.java:6403)

	at java.desktop/java.awt.Container.processEvent(Container.java:2266)

	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)

	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)

	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)

	at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1952)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1150)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848)

	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4882)

	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)

	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)

	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)

	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)

	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746)

	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743)

	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)

	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)

	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Exception in thread "AWT-EventQueue-0" 
groovy.lang.MissingMethodException: No signature of method: lilive.jumper.Candidates.fireIntervalRemoved() is applicable for argument types: (lilive.jumper.Candidates, Integer, Integer) values: [[], 0, 29]

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:72)

	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:82)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:203)

	at lilive.jumper.Candidates.update(Candidates.groovy:265)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)

	at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1348)

	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1103)

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnCurrentN(ScriptBytecodeAdapter.java:96)

	at lilive.jumper.Candidates.this$dist$invoke$3(Candidates.groovy)

	at lilive.jumper.Candidates$2.methodMissing(Candidates.groovy)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:926)

	at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1428)

	at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1350)

	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1103)

	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:63)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185)

	at lilive.jumper.Candidates$2.run(Candidates.groovy:255)

	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)

	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)

	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)

	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)

	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236)

	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)

	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234)

	at java.desktop/java.awt.Dialog.show(Dialog.java:1080)

	at java.desktop/java.awt.Component.show(Component.java:1728)

	at java.desktop/java.awt.Component.setVisible(Component.java:1675)

	at java.desktop/java.awt.Window.setVisible(Window.java:1036)

	at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1016)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)

	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2917)

	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:3920)

	at org.codehaus.groovy.runtime.InvokerHelper.setProperty(InvokerHelper.java:194)

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:502)

	at lilive.jumper.Gui.show(Gui.groovy:327)

	at lilive.jumper.Gui$show$0.call(Unknown Source)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)

	at lilive.jumper.Jumper.init(Jumper.groovy:289)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)

	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:198)

	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:75)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)

	at lilive.jumper.Jumper.start(Jumper.groovy:62)

	at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)

	at run.run(run.groovy:18)

	at org.freeplane.plugin.script.GroovyScript.execute(GroovyScript.java:114)

	at org.freeplane.plugin.script.ScriptRunner.execute(ScriptRunner.java:56)

	at org.freeplane.plugin.script.ExecuteScriptAction.actionPerformed(ExecuteScriptAction.java:112)

	at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810)

	at org.freeplane.core.ui.ActionAcceleratorManager.processKeyBinding(ActionAcceleratorManager.java:454)

	at org.freeplane.main.mindmapmode.MModeControllerFactory$2.processKeyBinding(MModeControllerFactory.java:291)

	at org.freeplane.view.swing.ui.UserInputListenerFactory$2.processKeyBinding(UserInputListenerFactory.java:173)

	at org.freeplane.core.ui.components.FreeplaneMenuBar.processKeyBinding(FreeplaneMenuBar.java:101)

	at org.freeplane.main.application.MenuKeyProcessor.processKeyBinding(MenuKeyProcessor.java:26)

	at org.freeplane.main.application.ConnectedToMenuView.processKeyBinding(ConnectedToMenuView.java:41)

	at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:3009)

	at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2909)

	at java.desktop/java.awt.Component.processEvent(Component.java:6403)

	at java.desktop/java.awt.Container.processEvent(Container.java:2266)

	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)

	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)

	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)

	at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1952)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1150)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848)

	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4882)

	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)

	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)

	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)

	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)

	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746)

	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743)

	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)

	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)

	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Exception in thread "AWT-EventQueue-0" 
groovy.lang.MissingMethodException: No signature of method: lilive.jumper.Candidates.fireIntervalRemoved() is applicable for argument types: (lilive.jumper.Candidates, Integer, Integer) values: [[], 0, 29]

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:72)

	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:82)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:203)

	at lilive.jumper.Candidates.update(Candidates.groovy:265)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)

	at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1348)

	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1103)

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnCurrentN(ScriptBytecodeAdapter.java:96)

	at lilive.jumper.Candidates.this$dist$invoke$3(Candidates.groovy)

	at lilive.jumper.Candidates$2.methodMissing(Candidates.groovy)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:926)

	at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1428)

	at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1350)

	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1103)

	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:63)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185)

	at lilive.jumper.Candidates$2.run(Candidates.groovy:255)

	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)

	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)

	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)

	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)

	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236)

	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)

	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234)

	at java.desktop/java.awt.Dialog.show(Dialog.java:1080)

	at java.desktop/java.awt.Component.show(Component.java:1728)

	at java.desktop/java.awt.Component.setVisible(Component.java:1675)

	at java.desktop/java.awt.Window.setVisible(Window.java:1036)

	at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1016)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)

	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2917)

	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:3920)

	at org.codehaus.groovy.runtime.InvokerHelper.setProperty(InvokerHelper.java:194)

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:502)

	at lilive.jumper.Gui.show(Gui.groovy:327)

	at lilive.jumper.Gui$show$0.call(Unknown Source)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)

	at lilive.jumper.Jumper.init(Jumper.groovy:289)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)

	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:198)

	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:75)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)

	at lilive.jumper.Jumper.start(Jumper.groovy:62)

	at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)

	at run.run(run.groovy:18)

	at org.freeplane.plugin.script.GroovyScript.execute(GroovyScript.java:114)

	at org.freeplane.plugin.script.ScriptRunner.execute(ScriptRunner.java:56)

	at org.freeplane.plugin.script.ExecuteScriptAction.actionPerformed(ExecuteScriptAction.java:112)

	at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810)

	at org.freeplane.core.ui.ActionAcceleratorManager.processKeyBinding(ActionAcceleratorManager.java:454)

	at org.freeplane.main.mindmapmode.MModeControllerFactory$2.processKeyBinding(MModeControllerFactory.java:291)

	at org.freeplane.view.swing.ui.UserInputListenerFactory$2.processKeyBinding(UserInputListenerFactory.java:173)

	at org.freeplane.core.ui.components.FreeplaneMenuBar.processKeyBinding(FreeplaneMenuBar.java:101)

	at org.freeplane.main.application.MenuKeyProcessor.processKeyBinding(MenuKeyProcessor.java:26)

	at org.freeplane.main.application.ConnectedToMenuView.processKeyBinding(ConnectedToMenuView.java:41)

	at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:3009)

	at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2909)

	at java.desktop/java.awt.Component.processEvent(Component.java:6403)

	at java.desktop/java.awt.Container.processEvent(Container.java:2266)

	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)

	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)

	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)

	at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1952)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1150)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848)

	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4882)

	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)

	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)

	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)

	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)

	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746)

	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743)

	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)

	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)

	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Exception in thread "AWT-EventQueue-0" 
groovy.lang.MissingMethodException: No signature of method: lilive.jumper.Candidates.fireIntervalRemoved() is applicable for argument types: (lilive.jumper.Candidates, Integer, Integer) values: [[], 0, 29]

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:72)

	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:82)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:203)

	at lilive.jumper.Candidates.update(Candidates.groovy:265)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)

	at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1348)

	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1103)

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnCurrentN(ScriptBytecodeAdapter.java:96)

	at lilive.jumper.Candidates.this$dist$invoke$3(Candidates.groovy)

	at lilive.jumper.Candidates$2.methodMissing(Candidates.groovy)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:926)

	at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1428)

	at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1350)

	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1103)

	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:63)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185)

	at lilive.jumper.Candidates$2.run(Candidates.groovy:255)

	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)

	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)

	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)

	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)

	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236)

	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)

	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234)

	at java.desktop/java.awt.Dialog.show(Dialog.java:1080)

	at java.desktop/java.awt.Component.show(Component.java:1728)

	at java.desktop/java.awt.Component.setVisible(Component.java:1675)

	at java.desktop/java.awt.Window.setVisible(Window.java:1036)

	at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1016)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)

	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2917)

	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:3920)

	at org.codehaus.groovy.runtime.InvokerHelper.setProperty(InvokerHelper.java:194)

	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:502)

	at lilive.jumper.Gui.show(Gui.groovy:327)

	at lilive.jumper.Gui$show$0.call(Unknown Source)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)

	at lilive.jumper.Jumper.init(Jumper.groovy:289)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

	at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)

	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:198)

	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:75)

	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)

	at lilive.jumper.Jumper.start(Jumper.groovy:62)

	at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)

	at run.run(run.groovy:18)

	at org.freeplane.plugin.script.GroovyScript.execute(GroovyScript.java:114)

	at org.freeplane.plugin.script.ScriptRunner.execute(ScriptRunner.java:56)

	at org.freeplane.plugin.script.ExecuteScriptAction.actionPerformed(ExecuteScriptAction.java:112)

	at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810)

	at org.freeplane.core.ui.ActionAcceleratorManager.processKeyBinding(ActionAcceleratorManager.java:454)

	at org.freeplane.main.mindmapmode.MModeControllerFactory$2.processKeyBinding(MModeControllerFactory.java:291)

	at org.freeplane.view.swing.ui.UserInputListenerFactory$2.processKeyBinding(UserInputListenerFactory.java:173)

	at org.freeplane.core.ui.components.FreeplaneMenuBar.processKeyBinding(FreeplaneMenuBar.java:101)

	at org.freeplane.main.application.MenuKeyProcessor.processKeyBinding(MenuKeyProcessor.java:26)

	at org.freeplane.main.application.ConnectedToMenuView.processKeyBinding(ConnectedToMenuView.java:41)

	at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:3009)

	at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2909)

	at java.desktop/java.awt.Component.processEvent(Component.java:6403)

	at java.desktop/java.awt.Container.processEvent(Container.java:2266)

	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)

	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)

	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)

	at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1952)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1150)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020)

	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848)

	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4882)

	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)

	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)

	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)

	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)

	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)

	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746)

	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)

	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)

	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743)

	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)

	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)

	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Better use of space when displaying the results (truncation method)

I always felt a bit unsatisfied about how the search results displayed when the node text is long. I never knew why. For some reason, I always need to navigate to the node in order to check if it really is what I'm looking for. Even making the Jumper window giant and the font size tiny isn't enough for me to "see" the results.

Now, I stopped to understand the situation, and concluded that it's because of how the truncation works.

For example, searching for BBB in this situation:

image

Results in:

image

Notice that:

-For BBB2: the truncation favors the text to the right side of the word BBB2. To me, this creates problems, because there is not enough text before the word BBB2 for me to get the context, and so understand the result (i.e., in order to understand which node actually is this). I think that, if the result was in the middle, it would be more useful.
image

-for BBB3: the truncation doesn't take full advantage of the space available for displaying the result (I give a lot of screen real estate to Jumper, so I want Jumper to actually use it)

Thanks,

Map used in the example:
EXAMPLE BBB.zip

Search in all mm files recursively

@kksharma1618 wrote :

Hey, would love to have a project search. Basically search in all mm files recursively in project folder. People tend to have a lot of small maps in different files, most of the time you want to search your entire dataset instead of current map.

Jumper sometimes locks FreePlane

Reading the discussion on Freeplane, I see that this was already reported (problem b on this post).

I frequently get this problem, but couldn't find a way to replicate it consistently. Now, I think that there might be a relation with that bug. So, if I:

  • open the "mapinsight bug.mm" that I attached there;
  • then try to open MapInsight in "a", I will get the error message;
  • I then close the error message and search and try to open "a" in Jumper, then I get locked in the Jumper dialog.

I will attach here the log showing those steps.
jumper bug log.txt

Thanks,

--
EDIT: I'm not sure, but I think this problem wasn't happening before I activated MapInsight. I will disable MapInsight and see if the problem still happens.

Idea for a new layout: 3 panels

I'm improving my scripting skills, so I think that soon I will be able to study the Jumper code. An idea that I would like to test is a new layout for the results.

I think that a layout with 3 panels can make the experience more intuitive. So, each panel so specific results of each criteria: descendants/siblings/others. Below each panel there is a checkbox, so the user can deactivate that criteria easily.

image

I think this disposition makes the search visually intuitive, because it follows the standard left to right disposition of nodes in FP. It gets more clear in the user mind "where" each search result is, and also to understand the scope of the search.

Feedbacks

You're welcome to post here to let me know that you use Jumper, to make comments... propose improvements or make feature requests
To report problems, propose improvements or make feature requests, please open a new issue.

Search within formulae

Using Google Sheets analogy, Jumper's current behavior is like having "Also search within formulae" checkbox selected (in Advanced search).

For example

  • node ID_1 has core text foo
  • node ID_2 has core text =ID_1.text+"bar" (evaluated as foobar)

Searching for foo in Jumper returns only the first node. This is fine but sometimes it's also useful to search in text resulting from evaluated formulas. IMO it's probably more common.

Would it be possible to add a checkbox within "How to search" saying "Search within formulae" and change default behavior to search in evaluated formulas?

Thank you for the great plugin!

Update.
I've submitted similar feature request to Freeplane
freeplane/freeplane#1306

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.